新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 423

 
novichok2018:

你好!帮我解决这个问题: 在Y1的条件下开了一个头寸 1,在Y2的条件下关闭。但如果在U2发生之前,再次发生U1并打开位置2,它不会对U2的到来作出反应,而是挂到下一个U2,即在新的U1之后(!),这个新位置不会被新的U2关闭,而是等待下一个条件U1-U2。如何避免这种情况?我的头很痛。谢谢你。

我们需要一个循环来关闭条件为U2的所有订单的OrderClose(...)--即使我们有一百个这样的订单。我们可以在每次打勾 时删除一个--然后做以下工作:1)通过U2条件,提高标志。2) 如果旗帜被升起,则删除一个订单。3)如果没有命令,就降低旗帜。然后,所有的订单都将陆续被删除....

 
STARIJ:

我们需要一个循环,根据条件U2关闭所有订单的OrderClose(...) - 我们需要100个。


我在一个周期内,因为它是。有什么问题吗?

void ClosePoz()
  { int total=OrdersTotal();
  if(total>1)
   {
      for(int i=0;i<OrdersTotal();i++)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 
      { Print("позиция для закрытия не найдена");
         break;
      }
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {double WPR0 = iWPR(NULL,PERIOD_M5,bars,0);
         if(OrderType()==OP_BUY && MathAbs(WPR0)>80)
           OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,clrNONE);                  
         }
      }
    } 
  }   
 
novichok2018:
我在一个周期内,因为它是。有什么问题吗?
我不明白--我用SRC插入代码,但我看不到它。
你必须按插入键,然后按添加键
 
STARIJ:
你必须先按 "粘贴",然后再按 "添加"。

上面,虽然位置不对,但写的是。哦!现在它在正确的地方了。哦,我的天啊!

 
novichok2018:

我已经正确插入了你的代码。

首先按下SRC按钮,然后将你的代码提交到窗口,按下 "插入 "按钮并提交你的信息。

 
tura210577:

谢谢你的答复

不客气。尝试使用这样的多平台功能。

//+------------------------------------------------------------------+
//| Returns specified Open by shift                                  |
//+------------------------------------------------------------------+
double Open(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyOpen(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified High by shift                                  |
//+------------------------------------------------------------------+
double High(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyHigh(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified Low by shift                                   |
//+------------------------------------------------------------------+
double Low(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyLow(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified Close by shift                                 |
//+------------------------------------------------------------------+
double Close(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyClose(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified Time by shift                                  |
//+------------------------------------------------------------------+
datetime Time(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   datetime array[];
   if(CopyTime(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
 
novichok2018: 我在一个周期内,因为它是。有什么问题吗?

代码中存在2个错误。1)本页 解释了循环中的订单顺序。2) break - 从循环中退出并继续 - 跳过这一步

 
Artyom Trishkin:

我已经正确插入了你的代码。

首先你按下SRC按钮,然后将你的代码提交到窗口,按 "插入 "按钮并提交你的信息。


谢谢。(笑)。至少你让我对自己的写作感到好笑。这个问题的意义何在?循环中的一切都正确吗?

 
novichok2018:

谢谢。(笑)。至少你让我对自己的写作感到好笑。这有什么意义?循环是否正确?

你已经得到了答案。

关于交易、自动交易系统和交易策略测试的论坛

初学者对MQL4的任何问题,对算法和代码的帮助和讨论

starij, 2018.01.18 20:19

代码中存在2个错误。1)本页 解释了循环中的订单顺序。2) break - 从循环中退出,你应该继续 - 跳过这一步


 
Artyom Trishkin:

你已经得到了答案。



是的,谢谢你,我看了这一页。我对MKL4的了解只足以让我注意到,在我的循环中,位置是从零到最后一个的循环,而在例子中则相反,是从最后一个到零。我仍然不知道 该在哪里插入断裂而当我把我的循环改为反向时,仓位 完全停止关闭

原因: