メタトレーダーについて
自動売買の方法はいろいろあるが、一から自分で構築するのはかなり骨が折れる。
また既存のソフトウェアは高額なものが多い上、自分の好みに応じてカスタマイズするのが難しい。
自動売買の対象が為替であれば、メタトレーダー4(MT4)という取引ツールを導入している業者に口座を作り、MT4を利用した自動売買システムを作るのが便利だと思う。
海外の業者なら、MT4を利用して商品や株価指数のCFDを取引することもできる。
MT4にはエキスパート・アドバイザー(EA)という自動売買機能があり、ここに売買のルールをプログラムとして記述しておき、EAの機能をオンにすれば自動売買が行える。
EAのプログラムは独自の言語で記述するが、ほとんどC言語などと同じ形式。
そんなわけで入門書を買ってプログラムを組んでみた。
役に立ったのはこの本。
- 作者: FXPG
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2010/09/16
- メディア: 単行本(ソフトカバー)
- 購入: 2人 クリック: 3回
- この商品を含むブログを見る
他に入門書も一冊買ったが、上記の逆引きだけでプログラムは動かせた。
冒頭にシステムの解説もあるので、当面はこれ一冊で十分かも。
〈注意事項〉
・専用のエディタでCtrl-Cを使うとフリーズする。
・注文時のロスカット・利益確定の指定は使えない。デモですらある程度の幅が求められるし、実際に動かすとかなり広い幅でもエラーになる。
・実際のトレードでは数秒に1回程度プログラムを実行してる感じ。一瞬だけ指値に到達しても、そこで買える(売れる)ことはほとんどない。
〈プログラム例〉
とりあえず下記のようなコードで試運転してみる。
1ドル=100円以下で10銭下がるごとに1000単位購入。
10銭上がったら1000単位ずつ利益確定。
int start ()
{
if (OrdersTotal () < MathFloor ( (100-Ask) * 10) ) {
int ticket=OrderSend (Symbol (), OP_BUY, 0.01, Ask, 5, 0, 0, "", 1, 0, Green);
if (ticket<0) {
Print ("OrderSend failed with error #",GetLastError () );
}
}
if (OrdersTotal () > MathCeil ( (100-Bid) * 10) ) {
if (OrderSelect (0, SELECT_BY_POS, MODE_TRADES)==true) {
int ticket_n = OrderTicket ();
}
OrderClose (ticket_n, 0.01, Bid, 5, Red);
}
return (0);
}
※1000単位(0.01)で購入できてMeta Traderを使用できる証券会社は稀かも?今のところサイバーエージェントはそれが可能。
…どうも複数の通貨を同時に自動売買できるようだが、上記のコードだと全体の注文数をパラメータに用いているため、複数の通貨をそれぞれ適切な数だけナンピンすることはできない。
同時に売買するためには、通貨ごとの注文数を取得する必要があるか。
〈修正検討箇所〉
・基準価格、利幅等を関数外で定義→修正
・注文時も「MathCeil」を使って、基準価格で購入し始める方が分かりやすいのでは?その場合、設定した利幅(決済時の価格に加算してある)がそのまま実際の利幅になるし。利幅を設定しないと利益ゼロで何度も売買してしまうのがやや難だが。
・「一定の利幅で売買」したことが分かりやすいように、OrderSelectで最初ではなく最後に出した注文から決済する仕様にする→修正
・注文数に下限と上限を設けると便利→修正
・1円(1ドル)あたりのナンピン回数より、ナンピン幅を指定する方式の方が分かりやすいのでは?→検討中
・売りポジションを取った時に、ポジションが古い順に決裁されてしまう。チケット番号はおそらく約定価格の高いものに若い番号が振られているのだろう。決裁する順序を逆にしてみる?
ちなみに買った入門書はコレ。
FXメタトレーダー実践プログラミング (現代の錬金術師シリーズ)
- 作者: 豊嶋久道
- 出版社/メーカー: パンローリング
- 発売日: 2009/10/16
- メディア: 単行本(ソフトカバー)
- 購入: 4人 クリック: 37回
- この商品を含むブログ (6件) を見る
サンプルプログラムがここ(Pan; FXメタトレーダー実践プログラミング)からダウンロード可能。