RSIインジケーターを利用したドテンEAのサンプルmq4を紹介します

MT4 EA開発をするにあたって、ネットで関連サイトをチェックしながら独学で学んだことを
過去の記事でご紹介しました。

今回は、EAを作りたい初心者に向けて、私もノウハウを提供しようと思い、サンプルコードを記載します。

サンプルEAのロジックは、MT4にデフォルトで組み込まれているRSIインジケーターを利用したドテンEA。
一枚運用で、RSIが30%未満になったら買い!RSIが70%を超えたら売り!という超単純なロジックです。

それでは、サンプルコードをご紹介します。(コメントを記載していますので、説明は割愛します)
//+------------------------------------------------------------------+
//| iRSI.mq4 |
//| Copyright 2013, BLT. |
//| http://mt4ordersenderror.blog.fc2.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, BLT."
#property link "http://mt4ordersenderror.blog.fc2.com/"

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
int BuyCount = 0;
int SellCount = 0;
int Ticket = 0;
int ErrCode = 0;

// オーダー情報取得
for ( int i = 0; i < OrdersTotal(); i++ )
{
// オーダー選択
if ( OrderSelect( i, SELECT_BY_POS, MODE_TRADES ) == false )
{
return (0);
}

// オーダー確認
if ( OrderMagicNumber() != 123456789 || OrderSymbol() != Symbol() )
{
continue;
}

// 買いポジションカウント
if ( OrderType() == OP_BUY )
{
BuyCount++;
}

// 売りポジションカウント
if ( OrderType() == OP_SELL )
{
SellCount++;
}

// オーダーチケット番号取得
Ticket = OrderTicket();

// ループを抜ける
break;
}

// RSIが70を超えて売りポジションがなければ成行売り
if ( iRSI( NULL, 0, 14, PRICE_CLOSE, 0 ) > 70 && SellCount == 0 )
{
// 買いポジションがあれば決済
if ( BuyCount > 0 )
{
OrderClose( Ticket, 0.1, Bid, 30, Goldenrod );
ErrCode = GetLastError();
}

// レートのリフレッシュ
RefreshRates();

// エラーがなければ成行売り
if ( ErrCode == 0 )
{
OrderSend( Symbol(), OP_SELL, 0.1, Bid, 30, 0, 0, NULL, 123456789, 0, Red );
ErrCode = GetLastError();
}
}

// RSIが30未満で買いポジションがなければ成行買い
if ( iRSI( NULL, 0, 14, PRICE_CLOSE, 0 ) < 30 && BuyCount == 0 )
{
// 売りポジションがあれば決済
if ( SellCount > 0 )
{
OrderClose( Ticket, 0.1, Ask, 30, Goldenrod );
ErrCode = GetLastError();
}

// レートのリフレッシュ
RefreshRates();

// エラーがなければ成行買い
if ( ErrCode == 0 )
{
OrderSend( Symbol(), OP_BUY, 0.1, Ask, 30, 0, 0, NULL, 123456789, 0, Blue );
ErrCode = GetLastError();
}
}

// エラーがある場合はエラーコードを出力
if ( ErrCode > 0 )
{
Print( "ErrCode=" + ErrCode );
}

return(0);
}
//+------------------------------------------------------------------+

これをコンパイルしてVisual modeでバックテストをしてみると下記のようになります。
上チャートの青(矢印・破線)が買い赤(矢印・破線)が売りです。下チャートはRSIの値です。

iRSI

RSIが30未満で買って、70超えたら売っているのが確認できますよね?
ドテンロジックですので、新規注文の前に必ず保有ポジションを決済してから成行注文をしています。

このチャートだけみると成績は良いのですが、期間を延ばすと右肩下がりのダメダメEAです。
絶対に本番口座で動かさないでくださいね。^^;

これぐらい単純なロジックの場合は、慣れてくると1時間もかからず作成できます。
このEAをベースにインジケーターを追加したりしながら、改良してみてください。

MT4 EA開発・運用ブログ:カテゴリー

MT4 EA開発・運用ブログ:人気記事ランキング(直近1ヶ月)

MT4 EA開発・運用ブログ:最新記事一覧

もっと見る...