RSIで30を下回り上抜けでロングエントリーするEA
RSIで30を下回り上抜けでロングエントリーするEAを作成していきたいと思います。
メタエディタ(MetaEditor)を立ち上げる
メタエディタ(MetaEditor)を立ち上げましょう。今回は名前を「RSI-30」で作成します。
グローバル変数を記述する
グローバル変数を記述します。TicketNumberにオーダーのチケットが入るようになっています。
static int TicketNumber;//チケットナンバー
Copy
OnTick()関数を記述する
OnTick()関数を記述しましょう。
OrdersTotalが0で、現在のRSIが30より大きく1つ前のRSIが30よりも下にある場合に
if(OrdersTotal() == 0 &&iRSI(Symbol(),0,14,PRICE_CLOSE,0) > 30 &&iRSI(Symbol(),0,14,PRICE_CLOSE,1) <= 30)
ロングのポジションを持ちます。
TicketNumber = OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,"EA",1234,0,Red);
そして、決済はRSIが70を超えた場合に
if(OrdersTotal() > 0 && iRSI(Symbol(),0,24,PRICE_CLOSE,0) >= 70)
OrderCloseで決済します。
OrderClose(TicketNumber,0.1,Bid,3,Yellow);
これでOnTick()関数は完了です。
if( OrdersTotal() == 0 &&iRSI(Symbol(),0,14,PRICE_CLOSE,0) > 30 &&iRSI(Symbol(),0,14,PRICE_CLOSE,1) <= 30)//オーダーが0で1つ前のRSIが30未満で現在のRSIが30を超えている場合 { TicketNumber = OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,"EA",1234,0,Red); //ロングエントリー } if(OrdersTotal() > 0 && iRSI(Symbol(),0,14,PRICE_CLOSE,0) >= 70)//オーダーが0以上でRSIが70以上の場合 { OrderClose(TicketNumber,0.1,Bid,3,Yellow);//ポジションを決済 } }
Copy
コンパイル
コンパイルしましょう。そしてバックテストを行って動きを確認したら完了です。
ソースコード全体
//+------------------------------------------------------------------+ //| RSI-30.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( OrdersTotal() == 0 &&iRSI(Symbol(),0,14,PRICE_CLOSE,0) > 30 &&iRSI(Symbol(),0,14,PRICE_CLOSE,1) <= 30)//オーダーが0で1つ前のRSIが30未満で現在のRSIが30を超えている場合 { TicketNumber = OrderSend(Symbol(),OP_BUY,0.1,Ask,3,0,0,"EA",1234,0,Red); //ロングエントリー } if(OrdersTotal() > 0 && iRSI(Symbol(),0,14,PRICE_CLOSE,0) >= 70)//オーダーが0以上でRSIが70以上の場合 { OrderClose(TicketNumber,0.1,Bid,3,Yellow);//ポジションを決済 } } //+------------------------------------------------------------------+
Copy
まとめ
今回はRSIを活用したEAの作り方でした。
コメント