atc2007

ここでは、「自動売買チャンピオンシップ2007」で第5位に入賞し3ヶ月弱で$10000を約3.7倍にしたzyx40さんが使用したEAの基となったEAを紹介します。

今回紹介するEAが入っている【Zyx40.zip】をダウンロード

そのままでは、少し読みづらいので、シンプルなコードに変更したEAでコード解説していきます。

今回解説するEA【Zyx40_mod01.mq4】をダウンロード

コード解説

上から順に見ていきます。

外部パラメーター

パラメーターは次の通りです。それぞれの設定値が何に使用されるかは、大体の見当をつける程度でよいと思います。ちなみに時間設定はODLのサーバー時間での時間だそうです。

extern int     TakeProfit_L   = 40;
extern int     StopLoss_L     = 133;
extern int     TakeProfit_S   = 27;
extern int     StopLoss_S     = 200;
extern int     TradeTime      = 18;
extern int     t1             = 7;
extern int     t2             = 2;
extern int     delta_L        = 9;
extern int     delta_S        = 10;
extern double  lot            = 0.1;
extern int     Orders         = 1;
extern int     MaxOpenTime    = 138;

グローバル変数

グローバル変数cnatradeは、のちほど分かりますがトレード許可判定に使用されています。

bool cantrade = true;

取引注文用関数

ユーザー関数OpenLong()

OpenLong(ロット数) と実行すると、指定したロット数で買い成行注文をするユーザー関数を作っています。

void OpenLong(double volume = 0.1)
{
   int      slippage    = 10;
   double   sl          = Ask - StopLoss_L * Point;
   double   tp          = Ask + TakeProfit_L * Point;
   string   comment     = "20/200 expert v2 (Long)";
   color    arrow_color = clrBlue;
   int      magic       = 0;
   
   int ticket = OrderSend(Symbol(), OP_BUY, volume, Ask, slippage, sl, tp, comment, magic, 0, arrow_color);
}

ロット数の指定がない場合は、デフォルト値の0.1ロットで注文します。

ユーザー関数OpenShort()

OpenLong()関数の売り注文バージョンの関数です。

void OpenShort(double volume = 0.1)
{
   int      slippage    = 10;
   double   sl          = Bid + StopLoss_S * Point;
   double   tp          = Bid - TakeProfit_S * Point;
   string   comment     = "20/200 expert v2 (Short)";
   color    arrow_color = clrRed;
   int      magic       = 0;

   int ticket = OrderSend(Symbol(), OP_SELL, volume, Bid, slippage, sl, tp , comment, magic, 0, arrow_color);
}

あとがき

次回は、start()関数の中身を見ていきます。