↓そもそも「MT4って何?」という方はこちら。
メタトレーダー(MT4)の使い方!入手方法も解説
↓サンプルEAの動かし方や評価、改編方法は以下
MT4で自作するFX自動売買システム(EA)とは?作り方を徹底解説!
1.【質問】トレーリングストップを実装するには?
裁量取引をする際によくトレーリングストップを利用しています。
EAに取り入れようと思いましたがMT4には実装されていないようです。
どうにかできないでしょうか。
2.【回答】同様のロジックを組むことは可能です。
ご質問の通り、トレーリングストップは設定することができません。
ただし「相場変動に応じて決済ラインを変更する」機能は実現できます。
トレーリングストップとは?
利益が出た場合に決済条件を更新してくれるのがトレーリングストップです。
予め設定した値幅(トレール幅)に従いS/L値を切り上げます。
これにより利益を大きく伸ばしつつ反発時の損失を抑えることが可能です。
決済条件を変更するにはOrderModify()関数を利用
OrderModify(①,②,③,④,⑤,⑥);
① チケット番号を指定 ⇒ OrderTicket()
② 注文時の価格を指定 ⇒ OrderOpenPrice()
③ 新しい損切価格を指定 ⇒ 価格決定方法は後述
④ 新しい利確価格を指定 ⇒ 価格決定方法は後述
⑤ 有効期限を指定 ⇒ 無期限なら0でOK
⑥ 色を指定 ⇒ clrRed取引には影響しないので適当
獲得PIPSに基づき決済条件を変更するロジック
こちら で公開しているコードの末尾に以下を追加してください。
command //------------------------------------------------------------------------------------ // 6. ordercheck : ポジション調整 //------------------------------------------------------------------------------------ void ordercheck(){ int res,res2,magic; double BID,ASK,pro; int torder = OrdersTotal(); for(int i = torder-1; i >= 0; i--){ res = OrderSelect(i,SELECT_BY_POS,MODE_TRADES); res2 = 0; BID = MarketInfo(rcur,MODE_BID); ASK = MarketInfo(rcur,MODE_ASK); magic = OrderMagicNumber(); if(OrderType() == OP_SELL){ pro = OrderStopLoss()-BID; if(pro>=0.1) res2 =OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()-0.10,OrderTakeProfit()-0.10,0,clrRed); } if(OrderType() == OP_BUY){ pro = ASK-OrderStopLoss(); if(pro>=0.1) res2 =OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()+0.10,OrderTakeProfit()+0.10,0,clrRed); } if(res2==1) Sleep(3000); } }
使用する場合はmain() 関数内でordercheck();関数を呼び出して下さい。
関数が呼び出される度に保有ポジションを一通りチェック
ドル円が0.1円=10pips変動する度にOrderModify()で利確、損切条件を変更します。
(ドル円以外の通貨で使用する場合はマーカーの部分を修正)
証券会社によって変更できるpips幅に制限がある場合があるのでご注意下さい。
トレーリングストップよりも柔軟なトレードも可能
少し条件を変更して独自の動きをさせることも可能です。
command
//------------------------------------------------------------------------------------
// 6. ordercheck : ポジション調整
//------------------------------------------------------------------------------------
void ordercheck(){
int res,res2,magic;
double BID,ASK,pro;
int torder = OrdersTotal();
for(int i = torder-1; i >= 0; i--){
res = OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
res2 = 0;
if(OrderSymbol() == rcur){
BID = MarketInfo(rcur,MODE_BID);
ASK = MarketInfo(rcur,MODE_ASK);
magic = OrderMagicNumber();
if(OrderType() == OP_SELL){
pro = OrderStopLoss()-BID;
if(pro>=0.4)
res2 = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()-0.10,OrderTakeProfit(),0,clrRed);
}
if(OrderType() == OP_BUY){
pro = ASK-OrderStopLoss();
if(pro>=0.4)
res2 = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss()+0.10,OrderTakeProfit(),0,clrRed);
}
if(res2==1){
Sleep(3000);
Alert(rcur+" Orderchange "+string(magic));
}
}
}
}
上記の場合はドル円が0.4円=40pips以上変動した場合に10pipsずつ損切条件”のみ”を切り上げるようにしています。
勝率の低下を最小限に抑えつつ、ドローダウンを抑えることが可能です。
筆者が現在運用しているEAにはこれが採用されています。
3.EA開発に詰まったら
EA開発に限らず、物事に詰まったら外部の知識を頼るのが賢い選択です。
以下ではトレードとプログラミングに役立つ参考書籍やサービスを紹介します。
①書籍でトレードの勉強
基本ブログ内で完結するよう心がけていますが、以下の本があると理解が深まります。
シリーズものですがとりあえず1冊読んでみると良いかと思います。
②無料のプログラミングスクールを活用
ソースコードの理解に苦しむようであれば初級レベルのプログラミングを学びましょう。
最初の基礎ベースを身に着けるならTechAcademyがおすすめです。
TechAcademyは1週間の無料体験があるので、それで十分学べるかと思います。
4.まとめ
移動平均のような良くある機能も、必ずしもそれを使う必要はありません。
チャートから価格を読み取って自分で平均を計算しても同様の結果が出ます。
既存の関数がどういう計算をしているかを調べることは非常に有効です。
時間はかかりますが次のEA開発に生きてくると思います。
その他のロジックについて知りたい方は以下の記事を参照下さい。
>>参考:『FX自動売買システム(EA)の自作に困った際のヒント集』
以上、参考になれば幸いです。