ローソク足の陽線が3本でエントリーさせるEA
ローソク足の陽線が3本で自動売買させるEAを作成したいと思います。
- ローソク足の陽線が3本でロングエントリー
- 決済は6時と18時に行う
メタエディタ(MetaEditor)を立ち上げる
メタエディタ(MetaEditor)を立ち上げましょう。今回は名前を「3Candle-long」で作成します。
グローバル変数を記述する
グローバル変数を記述します。
TicketNumberとは、ポジションごとの番号です。
MT4ではエントリーするとそれぞれのポジション別の番号があります。
これを代入するための変数です。
staticというのはチャートのティックが更新後にも変数をリセットさせないようにするためです。
staticが無いとティック更新後に変数がリセットされてしまうからです。
static int TicketNumber;//チケットナンバー
Copy
OnTick()関数を記述する
OnTick()関数を記述します。
ローソク足陽線3本連続なので、シフトを使いながら初値と終値を見て終値が3本大きいようにif文を作ります。
if(iOpen(Symbol(),0,1) < iClose(Symbol(),0,1) && iOpen(Symbol(),0,2) < iClose(Symbol(),0,2) && iOpen(Symbol(),0,3) < iClose(Symbol(),0,3))
そしてその条件を満たしたらオーダーをTicketNumberにセットします。
TicketNumber = OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,"EA",1234,0,Red);
決済は、Hour()で6時または18時のタイミングだった場合に
if(OrdersTotal() > 0 && ( Hour() == 6 || Hour() == 18))
OrderCloseして決済します。
OrderClose(TicketNumber,0.1,Bid,3,Yellow);
これでOnTick()関数の記述は完了です。
if(iOpen(Symbol(),0,1) < iClose(Symbol(),0,1) &&//1本前の始値より終値が高い iOpen(Symbol(),0,2) < iClose(Symbol(),0,2) &&//2本前の始値より終値が高い iOpen(Symbol(),0,3) < iClose(Symbol(),0,3))//3本前の始値より終値が高い { TicketNumber = OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,"EA",1234,0,Red); //ロングエントリー } if(OrdersTotal() > 0 && ( Hour() == 6 || Hour() == 18))//ポジションが0以上で時刻が6時か18時の場合 { OrderClose(TicketNumber,0.1,Bid,3,Yellow);//ポジションを決済 }
Copy
コンパイルする
コンパイルしましょう。バックテストで動きを確認できたら完了です。
ソースコード全体
//+------------------------------------------------------------------+ //| 3Candle-long.mq4 | //| Copyright 2020, FX-EA System Project Creator | //| https://creator.fx-ea-system-project.com/ | //+------------------------------------------------------------------+ #property copyright "Copyright 2020, FX-EA System Project Creator" #property link "https://creator.fx-ea-system-project.com/" #property version "1.00" #property strict static int TicketNumber;//チケットナンバー //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- if( iOpen(Symbol(),0,1) < iClose(Symbol(),0,1) &&//1本前の始値より終値が高い iOpen(Symbol(),0,2) < iClose(Symbol(),0,2) &&//2本前の始値より終値が高い iOpen(Symbol(),0,3) < iClose(Symbol(),0,3) )//3本前の始値より終値が高い { TicketNumber = OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,"EA",1234,0,Red); //ロングエントリー } if(OrdersTotal() > 0 && ( Hour() == 6 || Hour() == 18))//ポジションが0以上で時刻が6時か18時の場合 { OrderClose(TicketNumber,0.1,Bid,3,Yellow);//ポジションを決済 } } //+------------------------------------------------------------------+
Copy
まとめ
今回はポジションの取り方やポジションの決済方法を理解できれば完璧です。
コメント