在过去,我考虑过使用自动交易系统(Expert Advisor,简称EA)来进行交易。这是我所使用的最简单的EA之一。希望您在阅读后能给予评价...
此EA仅适用于单一交易对,您可以在菜单属性中设置时间框架、手数、止损和止盈。

extern ENUM_TIMEFRAMES TF = PERIOD_CURRENT;// 选择时间框架 extern int period = 8;// DeMarker周期 extern double lt = 0.01;// 手数 extern int sl = 100;// 止损 extern int tp = 100;// 止盈 extern double OB = 0.7;// 超卖 extern double OS = 0.3;// 超买 extern bool OPENBAR = false;// 在新柱开启价格时交易
这是我的秘密,我将变量分为三个部分:
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指标数组变量,并检查特定经纪商要求的最小交易手数。
//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnInit() { ArrayInitialize(dmrk,0.0); //--- const double 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)//-- 订单处于活动交易 { /* 关闭条件 */ //entry = false; } //else if(OrderCloseTime() != 0)//-- 关闭原因 1. 手动 2. sl/tp 3. EA { entry = false;//重置entry } } }

