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

 
Vitaly Muzichenko:

直到你厌倦了写这些东西

真的吗?)
 
multiplicator:
真的吗?)

是的,但作为一项规则,你不要写超过三个,因为这样的代码以后很难阅读,特别是在写完后已经过了很多时间的情况下。最好是将这些许多嵌套的ifs分成独立的函数。或使用开关操作员...案例

 
Artyom Trishkin:
讯息框()

有什么方法可以使我在新的刻度线出现后点击,新的窗口不会出现,但会使用第一个窗口的值?

void OnTick()
  {
 if (Orders()<1 && (1==message || !use_MessageBox)){
   ticket=OrderSend(Symbol(), OP_SELL, lot, Bid, slippage, Ask+stopLoss*Point, Bid-takeProfit*Point, "", magic, 0, Red); message=0; 
 } 
 if (Orders()<1 && (message==0 || message==2) && use_MessageBox){
 if(use_PlaySound) PlaySound ("tick");
 message=-2;
 message =MessageBox("Текст, содержащий сообщение для отображения", "Необязательный текст для отображения в заголовке", IDOK);
   }
if (Orders()<1 && (1==message || !use_MessageBox)){
   ticket=OrderSend(Symbol(), OP_SELL, lot, Bid, slippage, Ask+stopLoss*Point, Bid-takeProfit*Point, "", magic, 0, Red); message=0; 
 }

}
 
void Trailing()
{
   for (int i=OrdersTotal() - 1; i>=0; i--)
   {
      if (OrderSelect(i, SELECT_BY_POS,MODE_TRADES))
      {
         if (OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol())
         {
            if (OrderType() == OP_BUY)
            {
               if (Bid - OrderOpenPrice() > TrailingStop*Point)
               {
                  if (OrderStopLoss() < Bid-Point*(TrailingStop+TrailingStep) || OrderStopLoss() == 0)
                  {
                     if (!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Bid-Point*TrailingStop,Digits),OrderTakeProfit(),0,Blue))
                        Print("error order modify");
                  }
               }
            }
         }
      }
   }
   
   if (OrderType() == OP_SELL)
   {
      if (OrderOpenPrice() - Ask > TrailingStop*Point)
      {
         if (OrderStopLoss() > Ask + Point * (TrailingStop+TrailingStep) || OrderStopLoss() == 0 )
         {
            if (!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Ask+Point*TrailingStop,Digits),OrderTakeProfit(),0,Red))
               Print("error order modify");
         }
      }
   }
}
//--------------------------------------------------------

下午好,在测试中尾随工作如预期,但在现实生活中没有,或只是偶尔一次,不时出现错误的OrderModify错误4108,我不明白是什么问题,请纠正,我理解为EA没有正确选择订单 进行修改。

我想描述一下我的EA。

当两个MAs交叉时,用魔法打开2个位置,一个做空,一个做多。短的在武井或在MA交叉点关闭,长的应该拖网。选择拖网的长仓是根据神奇的数字进行的。

也许我在开仓时,在代码的某个部分犯了错误。

//BUY
   if (fast1>slow1&&fast2<slow2)
     {
      if (StopLoss_1>0)   sl=NormalizeDouble(Bid-StopLoss_1*Point,Digits);   else sl=0;
      if (TakeProfit_1>0) tp=NormalizeDouble(Ask+TakeProfit_1*Point,Digits); else tp=0;
      closeshrts();
      OrderSend(Symbol(),OP_BUY,Lts,NormalizeDouble(Ask,Digits),5,sl,tp,NULL,0,0,Blue);
     }
   //BUY_2
   if (fast1>slow1&&fast2<slow2)  
     {
      if (StopLoss_2>0)   sl=NormalizeDouble(Bid-StopLoss_2*Point,Digits);   else sl=0;
      if (TakeProfit_2>0) tp=NormalizeDouble(Ask+TakeProfit_2*Point,Digits); else tp=0; 
      closeshrts();
      OrderSend(Symbol(),OP_BUY,Lts,NormalizeDouble(Ask,Digits),5,sl,tp,NULL,MagicNumber,0,Blue);
     }  
     
   //SELL
   if(fast1<slow1&&fast2>slow2)
     {
      if (TakeProfit_1>0) sl=NormalizeDouble(Ask+StopLoss_1*Point,Digits);   else sl=0;
      if (StopLoss_1>0)   tp=NormalizeDouble(Bid-TakeProfit_1*Point,Digits); else tp=0;
      closelongs();
      OrderSend(Symbol(),OP_SELL,Lts,NormalizeDouble(Bid,Digits),5,sl,tp,NULL,0,0,Red);
     }
   //SELL_2
   if(fast1<slow1&&fast2>slow2)
     {
      if (TakeProfit_2>0) sl=NormalizeDouble(Ask+StopLoss_2*Point,Digits);   else sl=0;
      if (StopLoss_2>0)   tp=NormalizeDouble(Bid-TakeProfit_2*Point,Digits); else tp=0;
      closelongs();
      OrderSend(Symbol(),OP_SELL,Lts,NormalizeDouble(Bid,Digits),5,sl,tp,NULL,MagicNumber,0,Red);
     } 

我不知道,也许我应该通过一个循环打开订单? 如何正确编写这段代码,以便设置正确的止损和止盈? 正如我所写的--它只对卖出有效,对买入设置止损为0。

(请帮助我走上正轨))。

 
你好,我的一个朋友问我一个关于MQL4字母的问题。
那么,西里尔字母的俄罗斯字母是字母表的一部分吗?
而问号????,包括在字母表的字符集中?????。
和反斜线\\\\\\\,它到底是不是字母表的一部分?
 
进入。
 
Alexander Zhmurenko:
)来的。

你能详细说明进去的内容吗? 我写的是一个熟人的一句话。我只是把它复制并粘贴进去。他正试图教我MQL。我正在绞尽脑汁,所以请写下什么东西进去。

a) 问号( ?)

b) backslash(反斜杠)。

 
Zvezdochet:

你能详细说明进去的内容吗? 我写的是一个熟人的一句话。我只是把它复制并粘贴进去。他正试图教我MQL。我正在绞尽脑汁,所以请写下什么东西进去。

a)一个问号(?)

b ) 反斜杠( ` )

使用西里尔字符是一个没有记录的特征

可以在ID中使用的字符有:数字0-9,小写和大写字母a-z和A-Z,可识别为不同的字符,下划线字符(_)。第一个字符不能是数字。

语法。

 
int OnInit()
  {
//---
   color желтый = clrAqua;
//---
   return(INIT_SUCCEEDED);
  }
变量也可以是
 

你好,请你告诉我为什么ZigD[0]在某些情况下没有输出?

   for(ww = 0; ww <= Bars-1; ww++)
  {
      zzz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, ww);
      
           if(zzz > 0.0)   
           {
           ZigM[kk]=zzz;
            kk++; 
           ZigD[dd]=ww;
            dd++;  
            }
   }   
原因: