皆さん、こんにちは!今日は私が使っているシンプルなEA(エキスパートアドバイザー)についてお話しします。これは、私が今までに作った中で最も簡単なEAですので、ぜひ読んで評価してみてください。
このEAはシングルペア専用で、設定メニューから時間枠、ロット数、ストップロス、テイクプロフィットなどを調整できます。

externENUM_TIMEFRAMES TF = PERIOD_CURRENT;// 時間枠の選択externint period = 8;// DeMarkerの期間externdouble lt = 0.01;// ロット数externint sl = 100;// ストップロスexternint tp = 100;// テイクプロフィットexterndouble OB = 0.7;// オーバーソールドexterndouble OS = 0.3;// オーバーバウトexternbool OPENBAR = false;// 新しいバーのオープンプライスで取引するか
秘密は、変数を3つの部分に分けていることです:
1. データ | 時間枠
2. 注文
3. ペア
//+------------------------------------------------------------------+//-- 時間枠 | インジケーターdouble dmrk[5]; int signal =-1;//-- 0 = 買い, 1 = 売りint hold = 0; //-- 注文int ticket =0; double lot =0.0; int typ =-1; //-- ペアdatetime t1=0; bool newbar=false; bool entry =false; //+------------------------------------------------------------------+
OnInit()関数では、DeMarkerのインジケーター配列変数を初期化し、特定のブローカー要件に応じた最小ロットサイズを確認します。
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+voidOnInit() { ArrayInitialize(dmrk,0.0); //--- constdouble test_lot = SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN); if(lt<test_lot) lt = test_lot; }
OnTick()関数では、インジケーターの計算と売買シグナルの判断を行います。
//--------------------------------------------------------------------------- signal = -1; //---------------------------------------------------------------------------//---計算 for(int i=0; i<ArraySize(dmrk); i++) { dmrk[i] = iDeMarker(Symbol(),TF,period,i); } //--- if(dmrk[1] > OB) { hold = 1;//セット } else if(dmrk[1] < OS) { hold = -1;//セット } else { hold = 0;//リセット } if(hold == 1) { if(dmrk[0]<OB && dmrk[1]>OB) { signal = OP_SELL; } } if(hold == -1) { if(dmrk[0]>OS && dmrk[1]<OS) { signal = OP_BUY; } }
買いと売りのシグナルを開くためのコードです...
//--------------------------------------------------------------------------- if(signal != -1) if(newbar==true) if(entry==false)//ドアを開ける { //--- entry =true;//セット //--- if(signal == OP_BUY) { ticket = OrderSend(Symbol(),OP_BUY,lt,Ask,(int)((Ask-Bid)/Point), sl>0?Bid-sl*Point:0.0, tp>0?Bid+tp*Point:0.0, EAName+":signal= "+IntegerToString(signal)+":hold= "+IntegerToString(hold), EANumber, 0, clrBlue); signal=-1; //hold =0; }//リセット }//リセットシグナル }
そして、クローズに関しては...
if(entry == true) // クローズ { if(OrderSelect(ticket,SELECT_BY_TICKET)) { if(OrderCloseTime() == 0)//-- アクティブな取引 { /* クローズ条件 todo */ //entry = false; } //else if(OrderCloseTime() != 0)//-- 手動またはSL/TP、EAでクローズ { entry = false;//リセットエントリー } } }


このEAを使えば、トレードの効率がかなり向上すると思います。ぜひ試してみてください!

コメント 0