[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 465

 

所有的选择都是正常的,但错误很奇怪,我无法用测试器弄清楚。

它说我同时关闭了0.3手和卖出了0.7手。在测试器中,交易的一部分是这样完成的吗?我不知道这样的量从何而来;我在我的专家顾问中没有看到任何关于这样的量的信息。

   for(Counter1=0;Counter1<OrdersTotal();Counter1++)
     {
     if(OrderSelect(Counter1,SELECT_BY_POS,MODE_TRADES) == false) break;
     if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
       {
       if(OrderType() == OP_BUY)
         {
         
         BuyOpened = 1;
         if((Bid - OrderOpenPrice()) / Point >= TrailingLevel1 && (Bid - OrderOpenPrice()) / Point < TrailingLevel2)
           {
           // Перенести в безубыток
           }
         }
       if(OrderType() == OP_SELL)
         {
         TrailingPrice1 = OrderOpenPrice() - TrailingLevel1*Point;
         MyOrderStopLoss1 = NormalizeDouble(OrderStopLoss(),4);
         MyOrderStopLoss1 = OrderOpenPrice() - BreakEven*Point;
         SellOpened = 1;
         if((OrderOpenPrice() - Ask) / Point >= TrailingLevel1 && (OrderOpenPrice() - Ask) / Point < TrailingLevel2 && OrderStopLoss() != MyOrderStopLoss1)
           {
           ClosingLot = OrderLots() / 100 * ClosingPercent;
           ClosingLot = NormalizeDouble(ClosingLot,3);
           OrderClose(OrderTicket(),ClosingLot,Ask,Slippage,Yellow);
           OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() - BreakEven*Point,OrderTakeProfit(),OrderExpiration(),Black);
           }
         }
       }
     }
 
sss2019:

所有的选择都是正常的,但错误很奇怪,我无法用测试器弄清楚。

它说我同时关闭了0.3手和卖出了0.7手。在测试器中,交易的一部分是这样完成的吗?另外,我不知道当交易的一部分被关闭,然后打开0.16、0.24、0.12时,这样的交易量从何而来;专家顾问没有这样的交易量。

是的,这就是部分关闭的显示方式--首先是全部关闭,然后是部分打开。


我有两个问题。

1)你怎么知道接下来不要关闭什么?

在下一次打勾时,这个函数的条件将再次得到满足

2)如果我没有弄错的话,部分关闭后,订单票会发生变化,即

OrderClose(OrderTicket(),ClosingLot,Ask,Slippage,Yellow);
           OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice() - BreakEven*Point,OrderTakeProfit(),OrderExpiration(),Black);
           

第二行将没有变化


3) 我们不要忘记正常化......。

 
ilunga:

是的,这就是关闭部分的显示方式--首先是所有关闭部分,然后是打开部分


立即提出两个问题。

1)你怎么知道没有必要进一步关闭?

下一个刻度线的条件将再次满足该函数的要求。

2)如果我没有弄错的话,部分关闭后,订单票会发生变化,即

第二行将没有变化


3) 我们不要忘记正常化的问题...


这张票真的在变化吗?这一定是所有错误的原因。那么,为什么手动更改订单时,票据不发生变化?我需要确定的是,门票是否有变化。
 


真的在改变,非常感谢你
 
我听说,当你从一个货币对中获得一个价格以进一步处理它时,它应该被规范化,例如,从一个最低点获得的价格,它应该被规范化以设置为止损,这是真的吗?
 
sss2019:
我听说,当你从一个货币对中获得一个价格时,你需要将其正常化,例如,你从一个低点获得一个价格,你需要将其正常化为一个止损,这是真的吗?

是的,但我们指的是在设置为Ordersend/OrderModify/...时的规范化。在这些功能之前,你可以用它来工作并执行操作
 
sergeev:

是的,但规范化是指在Ordersend/OrderModify/...中的替换时刻。在这些功能之前,你可以使用它并进行操作

它应该被规范化为多少位数?默认情况下,价格似乎在小数点后有4位,即使是五位数的价格值,至少Low[0]和High[0]总是在小数点后只有4位,我试着通过Alert或通过Print 来输出。
 
sss2019:

它应该被规范化为多少位数?默认情况下,价格似乎在小数点后有4位数字,即使是5位数的值,至少Low[0]和High[0]在小数点后总是只有4位数字,我试着通过Alert或Print来输出。

默认情况下,Digits 价格在小数点后有数字。

而警报和打印输出默认只有4个。使用字符串DoubleToStr( double value, int digits)获得更多信息。

 

然后帮助实施追踪止损,像这样。卖出订单

         if((OrderOpenPrice() - Ask) / Point > Trailing) //Если прибыль в пунктах больше чем уровень трейлинг стопа
           {
           NewStopLoss = Ask + TrailingLevel2*Point;
           double NewStopLoss2 = 9999;
           if(NewStopLoss2 > NewStopLoss)
             {
             NewStopLoss2 = NewStopLoss;
             }
           OrderModify(OrderTicket(),OrderOpenPrice(),NewStopLoss2,OrderTakeProfit(),OrderExpiration(),Black);
           }

问题是,止损应该只向前滚动,但在我的订单中它也向后滚动。

________________________________

我的问题没有了,对不起。

 
sss2019:

然后帮助实施追踪止损,像这样。卖出订单

问题是,止损应该只向前移动,但我也让它向后移动。

double NewStopLoss2 = 9999;
           if(NewStopLoss2 > NewStopLoss)
             {
             NewStopLoss2 = NewStopLoss;
             }

相当于

NewStopLoss2 = NewStopLoss;