スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

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開発・運用ブログ:関連記事ピックアップ

EAつくーる
自動売買システム作成ソフト「EAつくーる
MT4 EA開発ブログの人気記事「RSI」「ボリンジャーバンド
を使用したEAが、数値入力とクリックで簡単に作成できます。
mq4プログラムが出力されるため、MQL4言語を効率よく
習得したいEA開発初心者にもオススメのEA開発ツールです。
お試しで利用したい方は「EAつくーる【1ヶ月版】」をどうぞ。

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

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

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

もっと見る...
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。