[存档!]任何菜鸟问题,为了不给论坛添乱。专业人士,不要与它擦肩而过。没有你,哪里都不能去 - 2. - 页 502

 
编辑|删除 帮助找到一个考虑到滑点的下单功能,并且没有130-134的错误。
 
nuan:
编辑|删除 帮助找到一个考虑到滑点的下单功能,并且没有130-134的错误。

让我看看你的变体。
 
NumderOrder=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-SL*Point,Ask+TP*Point, "BUY",0,0,Red);

Print(GetLastError())。

在SL和TP的任何数值下,它都会给出134,它往往根本不下单。

如果(NumberOfOrders(NULL)==0),则根据条件打开。


在测试器中,它总是下一堆订单,而不是一个订单,也就是说,我不明白为什么它要下一个订单,如果这个货币对上没有其他未结订单的话。

 
对不起,为什么有多个订单
 
nuan:
NumderOrder=OrderSend(Symbol(),OP_BUY,0.01,Ask,3,Ask-SL*Point,Ask+TP*Point, "BUY",0,0,Red);

Print(GetLastError())。

在SL和TP的任何数值下,它都会给出134,它往往根本不下单。

如果(NumberOfOrders(NULL)==0),则根据条件打开。


在测试器中,它总是下一堆订单,而不是一个订单,也就是说,我不明白为什么它要下一个订单,如果这个货币对上没有其他未结订单的话。


ERR_NOT_ENOUGH_MONEY 134 没有足够的钱来完成交易。
 

日子过得不错。我正在做一个EA,它在某个条件下开了2个订单(比喻说:当价格上升和下降时)。当价格上升时,它打开2个,当价格下降时,它关闭这些2个并打开一个新的2个。一个订单没有止盈,第二个订单有止盈。第二个问题是有问题的。当它的死亡时间到来时,它没有被选中,这里有删除订单的代码。

for (int a = 0; a < OrdersTotal()-1; a++)
    if (OrderSelect(a, SELECT_BY_POS, MODE_TRADES))
        if (OrderComment() == "MyOrd" && OrderType() == OP_SELL)
            OrderClose(OrderTicket(), NormalizeDouble(OrderLots(), Digits), NormalizeDouble(Ask, Digits), 0);

OP_BUY的情况也一样。我正在比较评论,以确定这是一个由我的EA开出的订单,而不是手动或其他EA开出的。OrderSelect的问题就在这里,它就是不想选择有止盈的订单。当它得到一个到它的数字时,OrderSelect返回false。测试员日志中没有错误,GetLastError也说一切正常(返回0)。为什么没有被选中?如果它不能选择它,为什么没有错误?谢谢大家。

 
后续问题。为什么在测试器中,当我将周期设置为月+时,那么结果中出现了五位数?无论在哪里设置价格,我都把NormalizeDouble(SomeValue, Digits)放进去。而只有在结果中,日志才不会发誓,尽管当我不知道四舍五入函数时,它才会发誓。
 

条件

a < OrdersTotal()-1

在每个迭代中都会被检查。

想一想a 等于什么,OrdersTotal()-1在第一次迭代后等于什么?

 
Solree:

OrderClose(OrderTicket(), NormalizeDouble(OrderLots(), Digits), NormalizeDouble(Ask, Digits), 0)。

地段和价格有不同的数字
 

Solree:

归一化双数(OrderLots(),Digits)


另外--要把这批货正常化也不是那么容易。
你需要考虑到地段变更的允许步骤。
例如,如果步长是0.01,那么就按2进行标准化处理
而如果步长是0.1,那么归一化应该是1