未结订单总量的问题 - 页 3

 
你需要展示你的整个修改后的代码。
 
if 语句之前和里面打印 你的变量,并找出原因。
 
WHRoeder:
if 语句之前和里面打印 你的变量,并找出原因。

好的,谢谢你,我会这样做,并进一步研究这个问题。 我还发现了这段代码,这让我很感兴趣,因为SL和TP与OrderSend是分开的。 也会研究这个问题的

ticket = OrderSend( Symbol(), OP_SELL, getPositionSize(), Bid, 3, 0, 0, "Basic CCI EA", magic, 0 , Red );
         OrderModify( ticket, OrderOpenPrice(), Bid + SL, Bid - TP, 0 );
 

大家好

我已经解决了大部分问题,EA在测试器中运行良好,但我在OrdersTotal方面仍有问题。在模拟模式下,它有时会打开两个挂单,但大多数时候只有买入或卖出。 我希望两个挂单同时打开(在几秒钟内),但只有在没有其他订单或挂单的情况下。 我认为发生的情况是,有时它在有机会计算订单数量 之前就打开了两个挂单,而其他时候它实际上意识到一个挂单被发送,而不会打开另一个。我想,如果我把订单放在大括号内,当满足条件时,它会同时执行这两个订单。 我现在还知道,当我删除这些订单时,只要最后一根蜡烛正在形成,它就会继续打开挂单,也就是说,只要时间变量与Time[0]蜡烛匹配,点数就不重要。

下面是这段代码。

extern datetime StartTime1 = D'2016.03.15 15:05';
int start(){
int buy_ticket=0, sell_ticket=0, buystop_ticket=0, sellstop_ticket=0, total=0;
   for(int i= OrdersTotal()-1; i>= 0; i--)
      if(OrderSelect(i,SELECT_BY_POS) && OrderMagicNumber()==magic && OrderSymbol()==Symbol())
        {
         total++;
         if(OrderType()==OP_BUYSTOP) buystop_ticket=OrderTicket();
         if(OrderType()==OP_SELLSTOP) sellstop_ticket=OrderTicket();
         if(OrderType()==OP_BUY) buy_ticket=OrderTicket();
         if(OrderType()==OP_SELL) sell_ticket=OrderTicket();
        }

   if(total==0 && Time[0]==StartTime1)
     {
      buystop_ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Price,30,Ask-SL,0,"Pending",magic,0,Lime);
      sellstop_ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Price,30,Bid+SL,0,"Pending",magic,0,Red);
     }

那么,有没有更好或更简单的方法让我这样做呢? 谢谢你

 
Trader3000:

大家好

我已经解决了大部分问题,EA在测试器中运行良好,但我在OrdersTotal方面仍有问题。在模拟模式下,它有时会打开两个挂单,但大多数时候只有买入或卖出。 我希望两个挂单同时打开(在几秒钟内),但只有在没有其他订单或挂单的情况下。 我认为发生的情况是,有时它在有机会计算订单数量之前就打开了两个挂单,而其他时候它实际上意识到一个挂单被发送,而不会打开另一个。我想,如果我把订单放在大括号内,当满足条件时,它会同时执行这两个订单。 我现在还知道,当我删除这些订单时,只要最后一根蜡烛正在形成,它就会继续打开挂单,也就是说,只要时间变量与Time[0]蜡烛匹配,点数就不重要。

下面是这段代码。

那么,有没有更好或更简单的方法让我这样做呢? 谢谢你

你是在检查 buystop_ticket和sellstop_ticket的值吗?如果只有一个开放,第二个就永远不会开放(除非你手动删除第一个)。
 
Trader3000 我还发现了这段代码,这让我很感兴趣,因为SL和TP与OrderSend是分开的。 我也会研究一下这个问题
ticket = OrderSend( Symbol(), OP_SELL, getPositionSize(), Bid, 3, 0, 0, "Basic CCI EA", magic, 0 , Red );
         OrderModify( ticket, OrderOpenPrice(), Bid + SL, Bid - TP, 0 );
当ECN经纪商开始时,OrderSend 会在设置了SL/TP后失败。自600版以来,大多数人已经解决了这个问题。
 
zirkoner:
你在检查buystop_ticket和sellstop_ticket的值吗?如果只有一个开放,第二个将永远不会开放(除非你手动删除第一个)。

谢谢你的回答。 事实上,买入止损和卖出止损订单在大约50%的时间里都会打开。 另外50%的时间里,买入或卖出都会被发送。 但我确实发现了一些问题。我问了最后一个错误,在那些两个都被发送的情况下,没有错误,但当只有一个打开时,我在没有打开的那个上得到了错误130。 因此,似乎我的止损是无效的,但我不知道为什么。 这里是SL的代码。

extern int StopLossOriginal=11;

int start(){
int stoplevel=(MarketInfo(Symbol(),MODE_STOPLEVEL))/10;
   if(StopLossOriginal<=stoplevel) StopLossOriginal=stoplevel;

double point=Point*10,
       Price=Pipmove*point,
       SL=(StopLossOriginal-Pipmove)*point;

 if(total==0 && (Time[0]==time1)
     {
      buystop_ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Price,30,Ask-SL,0,"Pending",magic,0,Lime);
      Print("Buystop ticket =",buystop_ticket);
      sellstop_ticket=OrderSend(Symbol(),OP_SELLSTOP,Lots,Bid-Price,30,Bid+SL,0,"Pending",magic,0,Red);
      Print("Sellstop ticket =",sellstop_ticket);
     }

你说的" 你在检查buystop_ticket和sellstop_ticket的值吗?"是不是这个意思?"它返回两个值,即。

2016.03.24 17:11:22.532 News_v10 GBPUSD,M1: Buystop ticket =-1

2016.03.24 17:11:23.227 News_v10 GBPUSD,M1: Buystop ticket =49644335



 
WHRoeder:
当ECN经纪商开始时,在设置了SL/TP后,OrderSend 会失败。从600版开始,大多数人已经解决了这个问题。
谢谢你的回答,我也试过了,但没有什么不同,我在build950上。
 
Trader3000:

谢谢你的回答。 事实上,买入止损和卖出止损订单在大约50%的时间里都会打开。 另外50%的时间里,买入或卖出都会被发送。 但我确实发现了一些问题。我问了最后一个错误,在那些两个都被发送的情况下,没有错误,但当只有一个打开时,我在没有打开的那个上得到了错误130。 因此,似乎我的止损是无效的,但我不知道为什么。 这里是SL的代码。

你说的 "你在检查buystop_ticket和sellstop_ticket的值吗?"是不是这个意思?"它返回两个值,即。

2016.03.24 17:11:22.532 News_v10 GBPUSD,M1: Buystop ticket =-1

2016.03.24 17:11:23.227 News_v10 GBPUSD,M1: Buystop ticket =49644335



你需要在你的两个OrderSend()之间添加RefreshRates()。
 
zirkoner:
你需要在你的两个OrderSend()之间添加RefreshRates()。
成功了,非常感谢你。