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

 


你好,请你帮助我--我有一个问题:机器人进入一个头寸,在下一个点上,它将其止损修改为之前的低点,我需要只有在开仓的蜡烛关闭时才修改止损。

void TrailingStop()
{  
  for(int i=0;i<OrdersTotal();i++)
  {
  if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true);
    {
    if (OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
      {  
      if (OrderType()==OP_BUY)             
        {              
            double LOW_1 = iLow(NULL,0,1);       
            bool res=OrderModify(OrderTicket(),OrderOpenPrice(),LOW_1,OrderTakeProfit(),0,White);                
            if(!res)  Print("Ошибка модификации ордера. Код ошибки=",GetLastError());         
        }               
       if (OrderType()==OP_SELL)              
        {                  
            double HIGH_1 = iHigh(NULL,0,1);                    
            res=OrderModify(OrderTicket(),OrderOpenPrice(),HIGH_1,OrderTakeProfit(),0,White);                
            if(!res)  Print("Ошибка модификации ордера. Код ошибки=",GetLastError());          
        }                      
      }
    } 
  }     
 return;                   
}
 

或如何摆脱这个错误


 
remjte:
先生们!你能告诉我,当没有足够的保证金开仓时,停止测试EA的代码吗?谢谢你!
如果AccountFreeMarginCheck()小于某个值(例如小于AccountFreeMargin的50%)--退出交易函数,测试很快结束,因为空循环几乎无法加载。
 
evillive:
如果AccountFreeMarginCheck()小于某个值(例如,小于AccountFreeMargin的50%)--退出交易函数,测试迅速结束,因为空循环几乎不加载。

说实话,我还是很菜,发现了这段代码,你能告诉我怎么改吗?

如果(AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0.0) 返回(-1);
如果(GetLastError()== 134/* NOT_ENOUGH_MONEY */) 返回(-2);
返回(l_lots_4);

 
简单点说:我如何写这个条件--在新的蜡烛 出现之前不要修改未平仓的订单?
 
zhezheria:
让我以更简单的方式来写:如何写这个条件--在新的蜡烛出现之前不要修改开仓订单
在相应的时间范围内努力开辟一个新的酒吧。大量的代码实例
 
remjte:

说实话,我还是很菜,发现了这段代码,你能告诉我怎么改吗?

如果(AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= 0.0) 返回(-1);
如果(GetLastError() == 134/* NOT_ENOUGH_MONEY */) 返回(-2);
返回(l_lots_4);

你不需要编辑它,它可以做得很好。除非你只是用你自己的名字来替换这些变量。

但是如果我们需要更少的风险,那么如果(AccountFreeMarginCheck(Symbol(), a_cmd_0, l_lots_4) <= AccountFreeMargin()*0.5) 返回 (-1); - 在这种情况下,如果以指定手数开仓后,剩余50%或更少的自由资金,那么返回 (-1)

 
请给我一个提示,好吗?我需要写一段代码,列表中的第二个订单将被选中,然后被删除(等待)。当OrderSelect(1, SELECT_BY_POS, MODE_TRADES)返回4051。
 
remjte:
先生们!你能告诉我,当没有足够的保证金开仓时,停止测试EA的代码吗?
谢谢你!
      // проверяем доступность свободных средств
      if(AccountFreeMarginCheck(Symbol(),OP_BUY,OpenLot)<=0 || GetLastError()==134)
            {
               Print("It is impossible to open the order Buy, not enough money.");
               return(0);
            }
      // проверяем доступность свободных средств
      if(AccountFreeMarginCheck(Symbol(),OP_SELL,OpenLot)<=0 || GetLastError()==134)
            {
               Print("It is impossible to open the order Sell, not enough money.");
               return(0);
            }
doube OpenLot; // Лот который вы хотите открыть.
在开立市场订单之前插入这个。
 
Pomid:
请给我一个提示,好吗?我需要写一段代码,列表中的第二个订单将被选中,然后被删除(等待)。当OrderSelect(1, SELECT_BY_POS, MODE_TRADES)返回4051。
订单计数从0开始。Try,OrderSelect(0, SELECT_BY_POS, MODE_TRADES)