MT5编程求助

要添加评论,请登录注册
chnp
131
chnp  
我做了个mt5的EA,但是发现真实账户会连续开仓2笔,同样的设置在demo和回测中都是只开一笔的,不知道有没有大神碰到过?
499602353
5
499602353  
chnp:
我做了个mt5的EA,但是发现真实账户会连续开仓2笔,同样的设置在demo和回测中都是只开一笔的,不知道有没有大神碰到过?
能加一下qq,讨论下怎么写EA程序和跑程序吗?球球:499602353
chnp
131
chnp  
   if(时间限制交易())
      //if(iTime(Symbol(),K线监控时间轴,0)==iTime(Symbol(),PERIOD_D1,0))
      // if(iBarShift(Symbol(),PERIOD_D1,iTime(Symbol(),K线监控时间轴,0))==0)
      if(分项单据统计(-100,magic,"主")<可同时持有N组)
         if(ObjectFind(0,(string)iTime(Symbol(),K线监控时间轴,0))==-1)
           {
            if(做单方向选择==1 || 做单方向选择==3)
               if(做多)
                 {
                  //laber(iBarShift(Symbol(),PERIOD_D1,iTime(Symbol(),K线监控时间轴,0)),clrAliceBlue,3);
                  int t1=建立单据(Symbol(),0,开仓手数,0,0,止损,0,time+"主"+备注,magic);
                  if(PositionSelectByTicket(t1))
                    {
                     int TICKET=(int)t1;
                     string SYMBOL=PositionGetString(POSITION_SYMBOL);
                     double CLOSE=PositionGetDouble(POSITION_PRICE_CURRENT);
                     double OPEN=PositionGetDouble(POSITION_PRICE_OPEN);
                     ulong TYPE=PositionGetInteger(POSITION_TYPE);
                     double SL=PositionGetDouble(POSITION_SL);
                     double TP=PositionGetDouble(POSITION_TP);
                     double POINT=SymbolInfoDouble(SYMBOL,SYMBOL_POINT);
                     int DIGITS=(int)SymbolInfoInteger(SYMBOL,SYMBOL_DIGITS);
                     int MAGIC=(int)PositionGetInteger(POSITION_MAGIC);
                     string COMM=PositionGetString(POSITION_COMMENT);
                     double LOTS=PositionGetDouble(POSITION_VOLUME);
                     double SWAP=PositionGetDouble(POSITION_SWAP);
                     double PROFIT=PositionGetDouble(POSITION_PROFIT);
                     datetime OPENTIME=(datetime)PositionGetInteger(POSITION_TIME);

                     laber0((string)iTime(Symbol(),K线监控时间轴,0),"",clrYellow,0,0,8,ANCHOR_LEFT_UPPER,0);
                     double stop=iLow(Symbol(),K线监控时间轴,止损K位置)-止损退出策略止损点设置*POINT*系数(Symbol());
                     double take=OPEN+(OPEN-stop)*风险收益比;
                     laber0("做单组"+time,time,clrYellow,0,0,8,ANCHOR_LEFT_UPPER,0);
                     if(平仓策略==1)
                       {
                        ZeroMemory(request);
                        ZeroMemory(result);

                        if(错误调试1==1)request.type_filling=ORDER_FILLING_FOK;
                        if(错误调试1==2)request.type_filling=ORDER_FILLING_IOC;
                        if(错误调试1==3)request.type_filling=ORDER_FILLING_RETURN;
                        request.action=TRADE_ACTION_SLTP;
                        request.position=TICKET;
                        request.sl=NormalizeDouble(stop,DIGITS);
                        request.tp=NormalizeDouble(take,DIGITS);
                        request.deviation=(ulong)(滑点*系数(SYMBOL));

                        check=OrderSend(request,result);
                       }
                     //check=OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(stop,Digits),NormalizeDouble(take,Digits),0);
                    }
                 }
chnp
131
chnp  
做单代码如上,我实在找不到问题
Renjun Gu
283
Renjun Gu  
chnp:
用两个个变量分别接收多、空订单号
每次开仓先查找订单号,找不到再开仓
没有那个方向的单子时把接收单号对应的变量归0
这样就可以保证每个方向只有1单
chnp
131
chnp  

非常感谢!我开单前判断加一个条件看看是不是可以在实际中有效。估计实际交易服务器中tick变化和demo不同

if(分项单据统计(-100,magic,"主")<可同时持有N组 & 分项单据统计(-100,magic,time+"主")<1)
Ziheng Zhuang
24234
Ziheng Zhuang  

1. 如果策略允许一个K线上只能有一次持仓,则检查当前K线时间点之后,有没有持仓单子。

2. 如果某次信号只能有一个持仓,则只能依据开仓时写入到单子中的注释。

3. 开仓后不能立即PositionSelectByTicket(x),因为本地持仓数据可能还没有更新,简单解决办法是开仓后,Sleep(1000),这种解决办法有时候不凑效,那就用while(),

   但别弄成了死循环。

chnp
131
chnp  
Ziheng Zhuang:

1. 如果策略允许一个K线上只能有一次持仓,则检查当前K线时间点之后,有没有持仓单子。

2. 如果某次信号只能有一个持仓,则只能依据开仓时写入到单子中的注释。

3. 开仓后不能立即PositionSelectByTicket(x),因为本地持仓数据可能还没有更新,简单解决办法是开仓后,Sleep(1000),这种解决办法有时候不凑效,那就用while(),

   但别弄成了死循环。

非常感谢!

要添加评论,请登录注册