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の作り方でした。






コメント