简单均线策略
- 开仓条件
开多条件
(前一短均<=当前长均 and 当前短均>当前长均) or (前一短均<当前长均 && 当前短均>=当前长均)
开空条件
(前一短均>=当前长均 and 当前短均<当前长均) or (前一短均>当前长均 and 当前短均<=当前长均)
2. 平仓条件
平多条件
(前一 短均线 >= 当前长均线 and 当前短均线 < 当前长均线) or (前一短均>当前长均 and 当前短均<=当前长均)
平空条件
(前一短均>=当前长均 and 当前短均<当前长均) or (前一短均>当前长均 and 当前短均<=当前长均)
- 当前周期内,只允许做一次某个方向的单
//[EA]简单的均线穿越 // //---------------------------------------------------------------------+ extern int 短均周期=3; extern int 长均周期=13; extern int 短均均模=0; extern int 长均均模=3; extern int 短均价类=0; extern int 长均价类=4; extern int 短均平移=0; extern int 长均平移=0; extern double 手数 = 0.01; extern int 滑点 = 0; int New_Bar; int 最后时间; int 开仓定位; int 关仓定位; int 单总数; double 当前短均; double 前一短均; double 当前长均; double 前一长均; int 买单判断; int 卖单判断; //------------------------------主函数---------------------------------+ int start() { 买单判断=0; 卖单判断=0; double 下单现价; int 开仓单=0; // 未用 int 单总数=OrdersTotal(); for(int i=单总数-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true) { if(OrderType()==OP_BUY) { 买单判断=1; //没用 if(均线穿越子()==1) { 下单现价=MarketInfo(Symbol(),MODE_BID); OrderClose(OrderTicket(), OrderLots(), 下单现价, 滑点, CLR_NONE); //平买 } } if(OrderType()==OP_SELL) { 卖单判断=1; //没用 if(均线穿越子()==2) { 下单现价=MarketInfo(Symbol(),MODE_ASK); OrderClose(OrderTicket(), OrderLots(), 下单现价, 滑点, CLR_NONE); //平卖 } } } } New_Bar=0; // 将棒 赋为0 if (最后时间 != Time[0]) { New_Bar= 1; // 将棒赋为 1 最后时间 = Time[0]; } 当前短均= iMA(NULL,0, 短均周期, 短均平移, 获均线类型子(短均均模), 获均线价格类型子(短均价类), 0); 前一短均= iMA(NULL,0, 短均周期, 短均平移, 获均线类型子(短均均模), 获均线价格类型子(短均价类), 1); 当前长均= iMA(NULL,0, 长均周期, 长均平移, 获均线类型子(长均均模), 获均线价格类型子(长均价类), 0); 前一长均= iMA(NULL,0, 长均周期, 长均平移, 获均线类型子(长均均模), 获均线价格类型子(长均价类), 1); if (开仓前检查穿越定位子()==1 && New_Bar==1) { 开买子(); } if (开仓前检查穿越定位子()==2 && New_Bar==1) { 开卖子(); } return; } //----------------------------穿越位置开 子函数()----------------------+ int 开仓前检查穿越定位子() { 开仓定位=0; if ((前一短均<=当前长均 && 当前短均>当前长均) || (前一短均<当前长均 && 当前短均>=当前长均)) { 开仓定位=1; } if ((前一短均>=当前长均 && 当前短均<当前长均) || (前一短均>当前长均 && 当前短均<=当前长均)) { 开仓定位=2; } return(开仓定位); } //------------------------------均线穿越 子函数()----------------------+ int 均线穿越子() { 关仓定位=0; if ((前一短均>=当前长均 && 当前短均<当前长均) || (前一短均>当前长均 && 当前短均<=当前长均)) { 关仓定位=1; } if ((前一短均<=当前长均 && 当前短均>当前长均) || (前一短均<当前长均 && 当前短均>=当前长均)) { 关仓定位=2; } return(关仓定位); } //--------------------------开买单 子函数()----------------------------+ int 开买子() // 注意函数类型! { if (单总数==1) { OrderSelect(0, SELECT_BY_POS,MODE_TRADES); if (OrderType()==OP_BUY) return; // 如果类型是买单时,返回,即不再开买 } OrderSend(Symbol(), OP_BUY, 手数, Ask, 滑点, 0, 0, "Buy: 均线穿越", 1, 0, CLR_NONE); return; // 未写返回值 } //---------------------------开卖单子函数()----------------------------+ int 开卖子() { if (单总数==1) { OrderSelect(0, SELECT_BY_POS,MODE_TRADES); if (OrderType()==OP_SELL) return; } OrderSend(Symbol(), OP_SELL, 手数, Bid, 滑点, 0, 0, "Sell: 均线穿越", 2, 0, CLR_NONE); return; } //----------------------均线模式选择 子函数()--------------------------+ int 获均线类型子(int 均模) { switch(均模) { case 0: return(0); case 1: return(1); case 2: return(2); case 3: return(3); } } //--------------------均线使用的价格模式选择 子函数()-------------------+ int 获均线价格类型子(int 使用价格) { switch(使用价格) { case 0: return(PRICE_CLOSE); case 1: return(PRICE_OPEN); case 2: return(PRICE_HIGH); case 3: return(PRICE_LOW); case 4: return(PRICE_MEDIAN); case 5: return(PRICE_TYPICAL); case 6: return(PRICE_WEIGHTED); } } //----------------------------------------------------------------------+