关闭半数地段。 - 页 12

 
DomGilberto:
啊,是的--知道了!我想我知道怎么做了--现在回去玩了:)
 
int start()
   {
   if(IsNewCandle())
      {
      CheckForMaTrade();
      if(UseCandleTrail)AdjustTrail();
      }

   if(OpenOrdersThisPair(Symbol())>0)
      {
      if(UseMoveToBreakEven)MoveToBreakEven();
      if(UseTrailingStop)AdjustTrail();
      if(Use_MA_Trail)MA_Trail();
      CloseHalfOrder(); // If there is an order call this void - loop inside the void - "if(OrderType()!=OP_BUY)continue;"
      }
   }
这能行吗?它是否会从那里开始检查每一个刻度?(CloseHalfOrder() )

更新如下--它确实有效 :)
 

对不起--我应该在尝试之前停止问101个问题 :P

是的--这确实有效。我现在有了它的工作原理,只要有tick进来,并且出价>=订单关闭的价格,它就会关闭 :D

在正确的方向上迈出了很好的一大步现在要做的是,在每次价格重新回到OrderClose函数 中指定的相同价格时,阻止它不断地关闭一半的交易:)

(也摆脱了恼人的OrderModify错误1!) 嗯,我想不出在第一个目标(1:1)完成其平仓指令后等待的正确逻辑...。有什么想法吗?OrderTicket()的数字是一样的......所以不可能是这样的?我现在被卡在这部分了:) 在我有了这部分之后,它就被破解了:)

我非常感谢你的帮助!

 
DomGilberto:


我非常感谢你的帮助!

不客气,我毫不犹豫地帮助那些听从并乐于尝试帮助自己的人。
 
不可思议 1 2 3 4 5 6 7 8 9 10 11 12

这是一个多么巨大的话题

关闭了一半的地段。

希望你能给别人解释一下,你知道的那一刻该怎么做

101个问题......谁想全部看完......

对于 (也摆脱了那个恼人的OrderModify错误1!)。

如果你试图用已经有的设置来修改交易,这种情况大多数时候都会发生。

 

一旦你想通了,就会很有成就感!显然,也要感谢你的意见!

最后一点我被卡住了,就是告诉循环在OrderClose()的出场价上停止将未平仓的订单减半,持续不断?我真的搞不清楚这个逻辑?它对什么时候和什么价格部分平仓是一清二楚的。我只需要告诉它,一旦它将订单减半就停止?

问题是,一旦OrderClose()关闭了一半的开仓,它仍然会被不断调用,因为 "int start "在每次有 "OP_BUY "开仓时都会调用 "CloseHalfOrder()"...。有什么想法吗?

//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
{
   if(OrderType()==OP_BUY)
      {
      CloseHalfOrder();
      } 
} // ---// <<<<<<<<<<<<< I haven't bothered copying and pasting all of in start() functions. Just showing you how the "CloseHalfOrder" is being called...


//+--------------------------------------------------------------------------------------------------+
//| Close OP_BUY Half lots @ 1:1 Function                                                            |
//+--------------------------------------------------------------------------------------------------+
void CloseHalfOrder()
{   
   
   double minLot=MarketInfo(Symbol(),MODE_MINLOT);
   //Print("The minimum lots are: ",DoubleToStr(minLot,Digits));

   double lotStep=MarketInfo(Symbol(),MODE_LOTSTEP);
   //Print("The Lotstep is: ",DoubleToStr(lotStep,Digits));

   double half=MathFloor(OrderLots()/2/lotStep)*lotStep;
   Print("The Lots to close is: ",DoubleToStr(half,Digits));

for(int c=OrdersTotal()-1; c>=0; c--)
      {
      if(OrderSelect(c,SELECT_BY_POS,MODE_TRADES)==true)
         {
         Print("Order Ticker Number = ",OrderTicket());
         Print("Order Lots Open = ",OrderLots());
         }
      else
          {
          Print("Order Select returned the error of ",GetLastError()); // Order Select does not seem to want to work?
          continue;
          }

      double FirstTarget_Buy=OrderOpenPrice()+(( OrderTakeProfit()-OrderOpenPrice())/2);
      Print("FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
      
      if(OrderMagicNumber()==MagicNumber)
         if(OrderSymbol()==Symbol())
            if(OrderLots()>minLot)
            {
            Print("Current Bid: ",DoubleToStr(Bid,Digits)," FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
            int HalfCloseTicket = OrderTicket();
            
            if(OrderType()==OP_BUY && Bid>=FirstTarget_Buy+(Point/2)) // Doesn't seem to even go further than this as I do not get an error from OrderClose?
               {
               Print("Bid >= FirstTarget_Buy - Current Bid: ",DoubleToStr(Bid,Digits)," FirstTarget_Buy: ",DoubleToStr(FirstTarget_Buy,Digits));
               bool Close_Half_Order_Buy=OrderClose(HalfCloseTicket,half,Bid,3,CLR_NONE);
               if(Close_Half_Order_Buy!=TRUE)Print("Close_Half_Order_Buy Last Error = ",GetLastError());
               if(Close_Half_Order_Buy==True)Print("First Target Closed: ", OrderLots());
               }
            }
         if(Close_Half_Order_Buy==True)
         {
         MoveToBreakEven(); // This is a void.
         EMA_Exit(); // This is another void being called on the basis I can get this loop above to just close the OP_BUY once...
         }    
     }
}
 
deVries:
难以置信 1 2 3 4 5 6 7 8 9 10 11 12

这是一个多么巨大的话题

关闭了一半的地段。

希望你能给别人解释一下,你知道的那一刻该怎么做

101个问题......谁想全部看完......

对于 (也摆脱了那个恼人的OrderModify错误1!)。

如果你试图用已经有的设置来修改交易,这种情况大多数时候都会发生。


伙计,我很乐意写一个主题,解释一个简单而有效的方法来部分关闭一个开放的订单--我被卡住了,只有最后一点,然后它就可以工作了。我将把它整理成一个简洁的主题/线程,供其他人使用?(不知道我如何去做?)

见上面的最后一个帖子--我几乎已经做到了,只是不知道告诉循环在同一个OrderClose()的退出价格上连续停止平仓的逻辑是什么?

也谢谢你关于OrderModify错误1的提示:)
 
DomGilberto:

伙计,我很乐意写一个主题,解释一个简单而有效的方法来部分关闭一个开放的订单--我被卡住了,只有最后一点,然后它就可以工作了!我将在一个简洁的主题/线程中整理所有内容,供其他人使用。我将把它整理成一个简洁的主题/线程,供其他人使用?(不知道我如何去做?)

见上面的最后一个帖子--我几乎已经做到了,只是不知道告诉循环在同一个OrderClose()的退出价格上连续停止平仓的逻辑是什么?

也谢谢你关于OrderModify错误1的提示:)

为什么不先把你的票移到盈亏平衡点,这是之前告诉你的,然后关闭一部分交易 .... if OrderLots() >= .......
 
deVries:

为什么不先把你的票移到盈亏平衡点,这是之前告诉你的,然后关闭一部分交易 .... if OrderLots() >= .......

就因为这个?如果我先移动到盈亏平衡点并不重要......第一个障碍是我不能理解的这部分?即使我先移动到收支平衡,然后关闭一半,这将再次调用ANY开仓,并通过调用 "CloseHalfOrder(); "在相同的价格再次关闭OrderClose()?

int start()
   {
    
   if(OrderType()==OP_BUY)
      {
      CloseHalfOrder();
      } 
      
   }
 
DomGilberto:

就因为这个?如果我先移动到收支平衡,这并不重要...第一个障碍是我无法理解的这部分?即使我首先移动到收支平衡,然后关闭一半,这将再次调用ANY开仓,并通过调用 "CloseHalfOrder(); "在相同的价格上再次关闭订单()?


只有当SL还没有达到BE时,你才会移动到BE并关闭一半。