任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 963

 

是的,Atztek,我为描述中的不准确而道歉。

1.因为在与MA相交之前,这些都是买入止损单,而Ur1 Ur2 Ur3只有在价格越过MA之后才被识别。

2.分别在所有买入订单中进行上述for-cycle搜索(因为还有3个卖出止损订单,它们在每个蜡烛图上爬行在不同的MA上)。

 
vadimvborisov:


是的,Atztek,我为描述中的不准确而道歉。

1.因为在与MA相交之前,这些都是买入止损单,而Ur1 Ur2 Ur3只有在价格越过MA之后才被识别。

2.分别在所有买入订单中进行上述for-cycle搜索(因为还有3个卖出止损订单,它们在每个蜡烛图上爬行在不同的MA上)。

1.你说。
Советник открывает (на основании пересечения с MA ) несколько (3) рыночных ордеров

止损单在被价格越过的那一刻就成为可销售的,MA与此无关。
好吧,由你来决定你的EA如何运作。

2.目的是什么 - ?
 bool mod_Buy1 = OrderModify ( OrderTicket(???),OrderOpenPrice (), NULL,Ur1,0,clrNONE);
 bool mod_Buy2 = OrderModify ( OrderTicket(???),OrderOpenPrice (), NULL,Ur2,0,clrNONE);
 bool mod_Buy3 = OrderModify (OrderTicket(???),OrderOpenPrice (), NULL,Ur3,0,clrNONE);

也就是说,对于 "for "中的每个周期,你看到的是一个订单,而不是同时看到三个。
 

atztek,1.我已经纠正了我的第一个帖子。

2.bool mod_Buy1 = 修改订单(OrderTicket(以前的第一个BUY订单),不改变开盘价, 不改变止损,TakeProfit取自Ur1,0,clrNONE)。

"换句话说,在 "for "的每个循环中,你看到的是一个订单,但不是同时看到所有三个

这就是问题所在,我不知道如何按票据浏览这3个订单,并为每个订单设置适当的Takeprofit水平(Ur1 Ur2 Ur3)。

 
vadimvborisov:

atztek,1.我已经纠正了我的第一个帖子。

2.bool mod_Buy1 = 修改订单(OrderTicket(以前的第一个BUY订单),不改变开盘价, 不改变StopLoss,TakeProfit取自Ur1,0,clrNONE)的赋值。

"换句话说,在 "for "的每个循环中,你看到的是一个订单,但不是同时看到所有三个

这就是问题所在,我不知道如何按票据浏览这3个订单,并为每个订单设置适当的Takeprofit级别(Ur1 Ur2 Ur3)。


1.要么我不理解你,要么你不知道你想做什么(或如何运作)。
你甚至在纠正之后还说到有止损单,然后 "在越过MA之后",它们变成了市场订单。
- 你要么立即开立市场订单(如 "穿越MA后"),要么开立止损单,在价格穿越止损单时自动成为市场订单。

2.我看到这不是一个纠正的问题,而是你的EA的逻辑。
(有很多问题,例如,你是否有其他订单在这个时候打开,为什么订单是根据票据选择的,而不是仓位,等等。)
不要一下子用3个订单开始,从一个简单的例子开始,用一个订单,并确保专家顾问的工作没有错误。然后通过增加3个订单将其复杂化。
 

1) 是的,没错--"你开了止损单,在价格越过止损单的时候自动变成了市场订单。"

2)在限价订单转换为市场订单的时刻,没有其他(市场)订单,只有限价订单。也许你也可以按职位而不是按票来选择--我不介意。好的。让我们考虑有两个订单的情况。因为我可以处理一个自己的....。

 
vadimvborisov:

1) 是的,没错--"你开了止损单,在价格越过止损单的时候自动变成了市场订单。"

2)在限价订单转换为市场订单的时刻,没有其他(市场)订单,只有限价订单。也许你也可以按职位而不是按票来选择--我不介意。好的。让我们考虑有两个订单的情况。因为我可以处理一个自己的....。

限制的人进来了吗?
好的,请讲。当你有了一个,那么剩下的就会变得清晰。
 
vadimvborisov:

1) 是的,没错--"你开了止损单,在价格越过止损单的时候自动变成了市场订单。"

2)在限价订单转换为市场订单的时刻,没有其他(市场)订单,只有限价订单。也许你也可以按职位而不是按票来选择--我不介意。好的。让我们考虑有两个订单的情况。因为我可以处理一个自己的....。

这正是我们需要的。

int i, total = OrdersTotal();
for(i = 0; i < total; i++)
{
 if(OrderSelect(i, SELECT_BY_POS) && OrderType() == OP_BUY)
  {
   bool mod_Buy1 = Модифицировать ордер ( OrderTicket(i-тый BUY из перебранных )
  }
}
 

1.对不起,我的意思是停止订单。

2.使用1个时一切正常。但使用2个或更多时我就不知道了....。

 

问候,AlexeyVik

bool mod_Buy1 = 修改订单( OrderTicket(所取的第i个BUY))

对于其他两个BUY的情况如何?以同样的方式?

////////////////////////////
 int i, total = OrdersTotal();
for(i = 0; i < total; i++)
{
 if(OrderSelect(i, SELECT_BY_POS) && OrderType() == OP_BUY)
  {
   bool mod_Buy1 = Модифицировать ордер ( OrderTicket(i-тый BUY из перебранных )
   bool mod_Buy2 = Модифицировать ордер ( OrderTicket(i-тый BUY из перебранных )
   bool mod_Buy3 = Модифицировать ордер ( OrderTicket(i-тый BUY из перебранных )
  }
}
 
vadimvborisov:

问候,AlexeyVik

bool mod_Buy1 = 修改订单( OrderTicket(所取的第i个BUY))

对于其他两个BUY的情况如何?以同样的方式?

注意我的例子中的循环。在循环中,所有订单都按类型检查,也按符号和魔法检查,最好能根据重要的情况检查OrderStopLoss == 0或OrderTakeProfit == 0,即没有止损的订单或没有起飞的订单,这样就不会试图不必要地修改订单,也不会出现错误1。

在这个循环中,订单被一个接一个地选中,如果所有条件都满足,就被送去修改。这将修改所有必要的命令。

第二种变体:如果只提供了3个订单,我们可以在全局变量的层面上声明,例如int tick_buy_1, tick_buy_2, tick_buy_3,并在开仓时将点数记录到这些变量中。然后,我们可以通过票据选择订单,检查其类型,订单是否关闭,只有这样,才不会出现循环。

   bool mod_Buy1 = Модифицировать ордер ( tick_buy_1 );
   bool mod_Buy2 = Модифицировать ордер ( tick_buy_2 );
   bool mod_Buy3 = Модифицировать ордер ( tick_buy_3 );