关闭半数地段。 - 页 14

 
很好的建议,谢谢!我一定会试着走这条路--我没有一个与点值有关的固定获利 价格(即总是100点),它是根据60EMA的位置=止损和最终固定TP是1:2(所以它可以是与止损的2倍点距离有关的任何点值...)。因为这个原因,我做起来有点困难......

最后一个问题,价格翻倍的正常化是否真的那么关键......我不明白它的目的是什么...?
 

是的,这可能是双倍数的问题,OrderTakeProfit()OrderStopLoss()OrderLots(),特别是如果你对它们进行计算。这影响了我的一个EA,当时我正在做类似于你的部分订单关闭的事情。请看这个主题https://www.mql5.com/en/forum/141034

 
对了--我已经把它运作得很好了......问题是,我想从 "If(OrderOpenPrice() > OrderStoploss()) "移开,以过滤掉在同一价格上连续平仓的交易......

我试着绞尽脑汁,但我无法通过 "OP_BUY "触发时的OrderTicket()来实现这一逻辑,并在一半的仓位被平仓后通过OrderTicket()号来实现。

一旦OP_BUY在OrderClose()中被减半,剩下的头寸就会有一个不同的票据号码......谁能告诉我如何比较这两者,以便在OrderClose()做了一次后告诉它停止?
 
求你了 - 我知道已经用尽了这个主题,但这是最后一点了:)?

我已经准备好了,只是不明白我上面写的那些东西的比较逻辑。

我打算在我完成这项工作后,做一个主题来帮助其他人--这才是公平的!
 
任何一个人 :(
 

我已经告诉你怎么做了,获取你要关闭的票据的OrderOpenTime()。在你关闭部分订单后,再做一次OrderSelect(),无论哪张票有相同的OrderOpenTime(),都是部分关闭订单的剩余部分。

 

啊,对不起,一定是第一次错过了!我刚刚坐下来思考了一下,我发现很难理解其中的逻辑。

我刚刚坐下来思考了一下,我发现很难理解其中的逻辑?你能给我一个指针吗?

目前,我在 "int Start() "部分有这个问题。

显然,我需要删除"OrderOpenPrice() > OrderStopLoss() "部分,但我要用什么来替代它,以便 "CloseHalfOrder(); "不会被持续调用?我不能把逻辑搞清楚(今天有点慢!)我是在与历史上的交易关闭进行比较吗?

   if(OpenOrdersThisPair(Symbol())>0) //If there is a trade open = do below, which ever is applicable.
      {
      if(OrderType()==OP_BUY && OrderOpenPrice() > OrderStopLoss())
         {
         CloseHalfOrder(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
         }

      if(OrderType()==OP_SELL && OrderStopLoss() > OrderOpenPrice())
         {
         CloseHalfOrder1(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
         }   
      
 
DomGilberto:

啊,对不起,我一定是第一次错过了!我刚刚坐下来研究了一下。

我刚刚坐下来思考了一下,我发现很难理解其中的逻辑?你能给我一个提示吗?

目前,我在 "int Start() "部分有这个问题。

显然,我需要删除 "OrderOpenPrice() > OrderStopLoss() "部分,但我用什么来替代它,以便 "CloseHalfOrder(); "不会被持续调用?我不能把逻辑写下来(今天有点慢!)我是在与历史上的交易关闭进行比较吗?

在我在你的代码中标记的地方,你选择了什么订单?

 if(OpenOrdersThisPair(Symbol())>0) //If there is a trade open = do below, which ever is applicable.
      {

      //  order currently selected is ??
 
      if(OrderType()==OP_BUY && OrderOpenPrice() > OrderStopLoss())
         {
         CloseHalfOrder(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
         }

      if(OrderType()==OP_SELL && OrderStopLoss() > OrderOpenPrice())
         {
         CloseHalfOrder1(); // Closes half at 1:1 - then calls another void to break even on the trade +3.
         }   
      

如果是正确的订单,那是偶然的还是设计的?

 
我也是这么想的--它说我在使用OrderType之前需要OrderSelect(),但它是有效的?我在任何时候都只有一个订单开放...。

我想不出如何利用OrderOpenTime()对我有利,并停止每次都调用CloseHalfOrder......
 
DomGilberto:
我也是这么想的--它说我在使用OrderType之前需要OrderSelect(),但它是有效的?我在任何时候都只有一个订单...。

如果你的EA在两个符号上运行,你将有可能同时有两个订单打开......但你不能在策略测试器中 测试这一点,那么哪个订单会被选中? 正确的还是错误的?