MT4のEAのプログラミングに関する質問です。

現在レートが、ボリンジャーバンド(期間21、±3σ)を超えたら逆張りし、その後、単純移動平均線(期間21)まで戻ったら決済を行う、というプログラムを作りたいのですが、MetaEdhitarにはどのように書けば良いでしょうか?

サイトや本を参考にここまでは書いたので、追加点や間違いがあれば教えて頂きたいです。

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;
}

// 現在値がボリンジャーバンド+3σを超えて売りポジションがなければ成行売り 4/6変更
if ( iBands( NULL, 0, 21, 3, 0, PRICE_CLOSE, MODE_UPPER, 0 ) < Bid && SellCount == 0 )
{
// 買いポジションがあれば決済
if ( BuyCount > 0 )
{
OrderClose( Ticket, 0.1, Bid, 10, Goldenrod );
ErrCode = GetLastError();
}

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

// エラーがなければ成行売り
if ( ErrCode == 0 )
{
//成行注文(通貨ペアは現在表示中、売り、0.1Lot、売値で、スリッページ10、損切50、利確10、コメントなし、マジックナンバー、有効期限なし、チャート上のオブジェクトは赤)4/7追加
OrderSend( Symbol(), OP_SELL, 0.1, Bid, 10, 50, 10, NULL, 123456789, 0, Red );
ErrCode = GetLastError();
}
}

// 現在値がボリンジャーバンド-3σ未満で買いポジションがなければ成行買い 4/6変更
if ( iBands( NULL, 0, 21, 3, 0, PRICE_CLOSE, MODE_LOWER, 0 ) > Bid && BuyCount == 0 )
{
// 売りポジションがあれば決済
if ( SellCount > 0 )
{
OrderClose( Ticket, 0.1, Ask, 10, Goldenrod );
ErrCode = GetLastError();
}

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

// エラーがなければ成行買い
if ( ErrCode == 0 )
{
//成行注文(通貨ペアは現在表示中、買い 、1Lot、買値で、スリッページ10、損切50、利確10、コメントなし、マジックナンバー、有効期限なし、チャート上のオブジェクトは青)4/7追加
OrderSend(Symbol(), OP_BUY, 0.1, Ask, 10, 50, 10, NULL, 123456789, 0, Blue );
ErrCode = GetLastError();
}
}

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

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

またプログラミングを勉強するのにおすすめのサイトや書籍などご存知の方がいればご紹介頂ければ幸いです。

よろしくお願い致します。

回答1

私も独学でmqlをやってきましたが

mqlに関しては
ネットにしても
本にしてもあまり良いものはありませんでした。

おそらく、
本当に腕の立つmqlのプログラマーは
ネットにも本にもあまり
自分のコードを晒すことはしないのかもしれません。

当然それが自分の自動売買システムを形作る財産だからです。

結局、一番為になるのは以下の2つの関数リファレンスのサイトです。

http://www.metasys-seeker.net/MQL4_Reference_ver1/MQL4_Reference_Co…

http://mt4-traders.com/reference/

>MetaEdhitarにはどのように書けば良いでしょうか?

泙紺焚爾里茲Δ淵椒螢鵐献磧璽丱鵐匹痢3σと−3σとMAの値を取得する為だけの関数を作ります。

double getter_BandsHigh();
double getter_BandsLow();
double getter_MA21();

あとは、
if(Close[0]> getter_BandsHigh())
のようにしてエントリー条件を作ってやればOKです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA