執行専用EAの作成

執行専用EAはFXシステム(Python)から送られたシグナルに基づいて売買する。

メタエディターの設定

メタエディターを初めて使うときのみ、実行する。

①MT4のメニューバーで「ツール」をクリックする。

②「メタエディター」をクリックする。

メタエディターが起動する。

③メタエディターのメニューバーで「Tools」をクリックする。

④「Options...」をクリックする。

⑤「Options」で「Font」タブをクリックする。

⑥「Font:」で「Takao ゴシック」を選択する。

これは単なる好みである。

⑦「Script」:で「日本語」を選択する。

⑧「OK」ボタンをクリックする。

サンプルプログラムの作成

①メタエディターのツールバーで「New」ボタンをクリックする。

②「MQL Wizard」で「Expert Advisor (template)」が選択されているのを確認する。

③「次へ」ボタンをクリックする。

④「Name:」を「Experts\ExecutionOnly」で上書きする。

⑤「Author:」を消去する。

⑥「Link:」も消去する。

⑦「次へ」ボタンをクリックする。

⑧続けて「次へ」ボタンをクリックする。

⑨「完了」ボタンをクリックする。

⑩メタエディターで以下のプログラムをコピー&ペーストして「ExecutionOnly.mq4」ファイルを上書きする。

// ファイル名は必ず31文字以内にすること。
extern string Filename = "sample_strategy";
extern double Lot = 0.1;
extern int MaxPos = 5;

void OnTick() {
    // 変数を宣言する。
    bool check;
    int file_handle;
    int i;
    int signal;
    int total;
    int pos;
    int ticket;
    string comment = Filename;

    // シグナルをファイルから確認する。
    file_handle = FileOpen(Filename + ".csv", FILE_READ | FILE_CSV);
    if (file_handle != INVALID_HANDLE) {
        // シグナルには2が加えられているので2を減じて元に戻す。
        signal = FileReadNumber(file_handle) - 2;
        FileClose(file_handle);
    }

    // ポジション総数(このEA以外のものも含む)を確認する。
    total = OrdersTotal();

    // このEAのポジションを確認する。
    pos = 0;
    for (i = 0; i < OrdersTotal(); i++) {
        if (OrderSelect(i, SELECT_BY_POS) == TRUE) {
            if (OrderComment() == comment) {
                if (OrderType() == OP_BUY) {
                    pos = 1;
                }
                else if (OrderType() == OP_SELL) {
                    pos = -1;
                }
            }
        }
    }

    // ポジション総数が最大ポジション数以下である前提で、
    // ポジションが「なし」、かつ、
    if (total <= MaxPos && pos == 0) {
        RefreshRates();
        // シグナルが「買い」なら、新規買い注文を送信する。
        if (signal == 1) {
            ticket = OrderSend(Symbol(), OP_BUY, Lot, Ask, 3, 0, 0, comment);
        }
        // シグナルが「売り」なら、新規売り注文を送信する
        else if (signal == -1) {
            ticket = OrderSend(Symbol(), OP_SELL, Lot, Bid, 3, 0, 0, comment);
        }
    }
    // ポジションが「買い」、かつ、シグナルが「なし」、または「売り」なら、
    // 決済売り注文を送信する。
    else if (pos == 1 && (signal == 0 || signal == -1)) {
        for (i = OrdersTotal() - 1; i >= 0; i--) {
            if(OrderSelect(i, SELECT_BY_POS) == TRUE) {
                if (OrderComment() == comment && OrderType() == OP_BUY) {
                    check = OrderClose(OrderTicket(), OrderLots(), Bid, 3);
                }
            }
        }
    }
    // ポジションが「売り」、かつ、シグナルが「なし」、または「買い」なら、
    // 決済買い注文を送信する。
    else if (pos == -1 && (signal == 0 || signal == 1)) {
        for (i = OrdersTotal() - 1; i >= 0; i--) {
            if(OrderSelect(i, SELECT_BY_POS) == TRUE) {
                if (OrderComment() == comment && OrderType() == OP_SELL) {
                    check = OrderClose(OrderTicket(), OrderLots(), Ask, 3);
                }
            }
        }
    }

    // ポジション総数、ポジション、シグナルを出力する。
    Print("total = ", total);
    Print("pos = ", pos);
    Print("signal = ", signal);
}

サンプルプログラムの第1行にcsvファイルの名前を設定する(例として「sample_strategy」としてある)。

警告:csvファイルの名前は半角で必ず31文字以内にする。そうしないとOrderComment()関数に正しく読み込まれない。ファイル名でEAのポジションを識別するようにしているので、正しく読み込まれないと大変なことになる。例えば他のEAのポジションを自分のものと勘違いして決済し、本来の保有者であるEAはポジションが突然決済されてしまったので、再びポジションを持つ。すると、執行専用EAは決済したはずなのにまたポジションが出来てしまったので再び決済する。こうして新規注文、決済注文が繰り返されるが、コンピューターは非常に高速にこれを実行するので、その都度払うスプレッドだけで退場させられるだろう。

⑪ツールバーの「Compile」ボタンをクリックする。

「Toolbox」の「Description」に「0 error(s), 0 warning(s)」と表示されればOK。

空のcsvファイルの作成

シグナルのやり取りはcsvファイルを通じて行う。そこで、あらかじめ空のcsvファイルを作っておく。

上のサンプルプログラムに合わせて、「sample_strategy.csv」ファイルを作成する場合を例とする。また、MT4のインストール先は「~/.wine/drive_c/Program Files (x86)/OANDA - MetaTrader」であるとする。半角スペースのあるフォルダー名は「""」で囲む点に注意。

○端末に以下のコマンドをコピー&ペーストして「Enter」キーを押す。

touch ~/.wine/drive_c/"Program Files (x86)"/"OANDA - MetaTrader"/mql4/Files/sample_strategy.csv
(2017/01/08更新)

EAの使い方

EAの基本的な使い方を説明する。

EA使用の準備

「執行専用EAの作成」で作成した「ExecutionOnly」をドル円5分足チャートで使用する場合を例とする。

①MT4のメニューバーで「ファイル」をクリックする。

②「新規チャート」をクリックする。

新規チャート内部の構成や通貨ペアの名前はどのFX会社のサーバーを使うかで違ってくる。ここではOANDAのデモ口座を使用した場合の例である。

③「USDJPY」をクリックする。

「USDJPY,H1」(ドル円1時間足)チャートが表示される。

④ツールバーで「M5」ボタンをクリックする。

「USDJPY,M5」(ドル円5分足)チャートに変更される。

チャートの変更

私の好みなので、このようにする必要はない。

①ツールバーで「ローソク足」ボタンをクリックする。

小さくて分からないが、足がバーチャートからローソク足に変更される。

②ツールバーで「ズームイン」ボタンを数回クリックして好みの大きさにする。

大きくしすぎたと思ったら、同じくツールバーで「スームアウト」ボタンをクリックして調整する。

EAのロード

上に続けて実行する。

①「ナビゲーター」で「エキスパートアドバイザ」をダブルクリックして展開する。

初めから展開していれば必要ない。また、ナビゲーターが表示されていなければ、メニューバーで「表示」→「ナビゲーター」の順にクリックして表示させる。

②「ExecutionOnly」を「USDJPY,M5」チャート上にドラッグ&ドロップする。

③「Expert - ExecutionOnly」で「全般」タブをクリックする。

④「自動売買を許可する」にチェックを入れる。

⑤「OK」ボタンをクリックする。

「USDJPY,M5」チャートの右上隅に「ExecutionOnly」と表示される。

EAの稼働

○(EAが停止状態の場合、つまりMT4のツールバーの「自動売買」ボタンが赤の停止マークの場合、)「自動売買」ボタンをクリックして緑の再生マークに変える(稼動状態となる)。

停止状態から稼動状態になった場合、他のチャートにロードしているEAがあれば、そのEAも稼動する。

EAの停止

○(EAが稼動状態の場合、つまりMT4のツールバーの「自動売買」ボタンが緑の再生マークの場合、)「自動売買」ボタンをクリックして赤の停止マークに変える(停止状態となる)。

稼動状態から停止状態になった場合、他のチャートにロードしているEAがあれば、そのEAも停止する。

EAの削除

ここにおけるEAの削除とはチャート上にロードしているEAをロードしていない状態に戻すという意味であり、以下の手順でEAのソースファイル、実行ファイルが削除されることはない。

①「USDJPY,M5」チャートを右クリックする。

②「エキスパートアドバイザ」にカーソルを合わせる。

③「削除」をクリックする。

「USDJPY,M5」チャートの右上隅の「ExecutionOnly」が消える。

(2016/11/14更新)

MT4のインストール

「プロキシサーバ」から進まない問題

WineでMT4をインストールしようとすると「プロキシサーバ」というウィンドウが出てきて、そこから先に進めないという問題が起きている。最新版のWineを使えば無事にMT4をインストールできるので、ここでは最新版をインストールする。今後、この問題は解消するかもしれないが、当面は最新版でいいだろう。

Wineのインストール

旧バージョンのWineを使っていた場合、先ず必要なデータを移動した上で「~/.wine」フォルダーを削除してからインストールする。

①端末に以下のコマンドをコピー&ペーストして「Enter」キーを押す。

sudo dpkg --add-architecture i386

②「[sudo] **** のパスワード:」でパスワードを入力して「Enter」キーを押す。

③端末に以下のコマンドをコピー&ペーストして「Enter」キーを押す。

sudo add-apt-repository ppa:wine/wine-builds

④「[ENTER] を押すと続行します。ctrl-c で追加をキャンセルできます」で「Enter」キーを押す。

⑤端末に以下のコマンドをコピー&ペーストして「Enter」キーを押す。

sudo apt-get update

⑥端末に以下のコマンドをコピー&ペーストして「Enter」キーを押す。

sudo apt-get -y install winehq-devel

MT4用デモ口座の開設

①「OANDA REST APIの準備」の記事に基づき、OANDAのデモ口座を開設する。

②以下のアドレスをクリックする。

https://www.oanda.jp/

③右上の「ログイン」ボタンをクリックする。

④「口座をご選択ください:」で「デモ口座」を選択する。

⑤「お客様のIDを入力してください」でIDを入力する。

⑥「パスワードを入力してください」でパスワードを入力する。

⑦「ログイン」ボタンをクリックする。

⑧「MT4/API関連」で「MT4アカウントの作成」をクリックする。

⑨「MT4 サブアカウントの作成」の「パスワードを作成:」でMT4用のパスワードを入力する。

⑩「パスワードを再入力:」でもう一度MT4用のパスワードを入力する。

⑪「続ける」ボタンをクリックする。

⑫(ブラウザがFirefoxの場合のみ)「このログイン情報を Firefox に記憶させますか?」で「記憶」ボタンをクリックする。

⑬「ライセンス規約同意画面」で「同意する」ボタンをクリックする。

⑭OANDAからのメールを確認する。

メールにはMT4用デモ口座にログインするための「ID」(7桁の数字)と「PW」(⑨、⑩で設定したパスワード)が書かれてある。

MT4のインストール

上の手順から続けて行う。

①「MT4 サブアカウント」で「こちらをクリック」をクリックする。

②「oanda4setup.exe を開く」で「プログラムで開く」を選択する。

③右のボタンをクリックする。

④「その他...」をクリックする。

⑤「アプリケーションの選択」で「すべてのアプリケーションを表示」ボタンをクリックする。

⑥「Wine Windowsプログラムローダー」を選択する。

⑦「選択」ボタンをクリックする。

初めてWineでexeファイルを開く場合はこのように選択するが、次回からは初めから選択されている。

⑧「oanda4setup.exe を開く」に戻って「OK」ボタンをクリックする。

もし「OK」ボタンをクリックしても何も起きない場合、「~/.wine」フォルダーを削除し、もう一度①から実行してみる。

⑨「OANDA - MetaTrader 4 セットアップ (32 ビット)」で「□□□□□□□□□□□□□□□□□□□□□□」にチェックを入れる。

文字化けしているかもしれないが「はい、上記の全てのライセンス条項に同意します」という項目である。

⑩右下の3つのボタンのうち、真ん中の「□□(N) >」みたいなボタンをクリックする。

文字化けしているかもしれないが「次へ」というボタンである。「MQL5」のウェブページが勝手に開くが気にしない。

MT4がインストールされ、起動する。デスクトップには「OANDA - MetaTrader」という設定ファイルが生成する。次からは「OANDA - MetaTrader」ファイルをダブルクリックすればMT4を起動できる。

MT4用デモ口座のサーバーの選択

上の手順から続けて行う。

①サーバーを選択するウィンドウで「OANDA-Japan Practice」を選択する。

②「次へ」ボタンをクリックする。

③「既存のアカウント」を選択する。

④「ログイン:」にOANDAからメールで送られた「ID」を入力する。

⑤「パスワード:」に同じくOANDAからメールで送られた「PW」を入力する。

⑥「パスワードを保存」にチェックを入れる。

⑦「完了」ボタンをクリックする。

(2017/02/09更新)