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

 
Zver4991:

测试质量取决于什么,我怎样才能把它提高到最大?

请看这个网站,如何 以99%的模拟质量测试EA

http://tradelikeapro.ru/kak-poluchit-kachestvo-modelirovaniya-99/

 
Zhunko:
这对BOOL类型来说是如此。也就是说,对于来自MQL4旧版本的bool。这对于单字节的bool来说是不正确的。如果数值大于零,将发生溢出。

我想知道那是为什么。

   bool b=2;

编译时是否没有错误或警告?

 
artmedia70:

我想知道那是为什么。

bool b=2;
编译时没有错误或警告?

赋值运算符必须对bool类型进行重载。它监测溢出,如果超过1,它就分配并返回真。

在警告级别4的工作室中,当试图在逻辑表达式中插入一些不合逻辑的类型时,经常会出现警告。或者反过来说,在算术运算 中应用逻辑类型时,

 
Zhunko:

赋值运算符必须对bool类型进行重载。它监测溢出的情况,如果大于1,它就赋值并返回真。

在警告级别4的工作室中,当试图在逻辑表达式中插入一些不合逻辑的类型时,经常会出现警告。或者反之,在算术运算中应用逻辑类型时,也是如此。

更合理的做法是

#property strict

发出警告,并让它与旧版本一样,没有

 
artmedia70:

并不完全正确,但大意是正确的。

实际上:零对应的是假,除零以外的任何其他值对应的是真

在不依赖默认值的情况下,我把init改成一个布尔变量,然后只使用这个变量。
 

嗯,我毕竟不是一个程序员......

有账号1--五位数,最小手数0.01,步数0.01(构建584);账号2--四位数,最小手数0.1,步数0.1(构建584),账号3,与账号2相同,但终端构建509。

还有就是止损拖网。

void manageStops()
{ 
   string trailSymbol=Symbol();  
   for( int i = OrdersTotal()-1; i >=0 ; i-- ) 
   {
      if ( OrderSelect( i, SELECT_BY_POS ) == true ) 
      {  
         int trailOrderType = OrderType(); 
         if( OrderSymbol() != trailSymbol || trailOrderType > 1 || OrderProfit() < 0 ) continue; 
         double trailStopLoss = OrderStopLoss();   
         while( true ) {
            double trailStop = TrailingStop; 
            int trailDistance = MarketInfo( trailSymbol, MODE_STOPLEVEL ); 
            if( trailStop < trailDistance ) trailStop = trailStop+trailDistance;  
            bool modifyTrailingStop = false;  
            switch( trailOrderType ) 
            {
               case 0 : 
                  if(trailStopLoss < (Bid - (TrailingStop+TrailingStep) * pipPoints)) 
                  {
                     trailStopLoss = NormalizeDouble(Bid - TrailingStop * pipPoints,digits);   
                     modifyTrailingStop = true;       
                  }
                  break;    
               case 1 :                      
                  if(trailStopLoss > (Ask + (TrailingStop+TrailingStep) * pipPoints)) 
                  {
                     trailStopLoss = NormalizeDouble(Ask + TrailingStop * pipPoints,digits);             
                     modifyTrailingStop = true;             
                  }
               }                               
            if( modifyTrailingStop == false ) break;                       
            double trailTakeProfit = OrderTakeProfit(); 
            double trailPrice = OrderOpenPrice();  
            int trailTicket = OrderTicket();   
            if( ( OrderType() == OP_BUY && trailStopLoss > trailPrice && trailStopLoss < OrderOpenPrice() + ( MaxStop * pipPoints ) ) 
                  || ( OrderType() == OP_SELL && trailStopLoss < trailPrice && trailStopLoss > OrderOpenPrice() - ( MaxStop * pipPoints ) ) )

            OrderModify( trailTicket, trailPrice, trailStopLoss, trailTakeProfit,0);
            break; 
           } 
        }  
     }  
  return;   
} 

为什么在1号账户上,止损被正常拖动,而在2号和3号账户上却出现 "错误130"?虽然这个逻辑被颠覆了,但在一个案例中是可行的...

 
evillive:

嗯,我毕竟不是一个程序员......

有1号账户--五位数,最小手数0.01,步数0.01(构建584);2号账户--四位数,最小手数0.1,步数0.1(构建584);3号账户,只是takoe与2号相同,只是终端构建509。

而且有一个止损的拖网。

为什么账户1的止损正常,而账户2和3却显示 "错误130"?虽然这个逻辑被颠覆了,但在一个案例中是可行的...


这个问题本身意味着问题是一个5位数或4位数的账户。看了看代码。pipPoint 变量在哪里定义 它等于什么?这很可能就是问题所在。
 
pro_:

问题本身表明,问题是关于5或4位数的计数。我在看代码。pipPoints 变量在哪里定义 它等于什么?这很可能就是问题所在。

我在init中定义了pipPoints = MarketInfo(Symbol(), MODE_POINT)。

我增加了MaxStop值,拖网应该以较大的增量变化,但它以1点为单位变化,至少它在4位数时开始拖网......我仍然需要修改逻辑,我需要可调的间距。

 
smdm:

你好!

问题如下。我有一个Heiken Ashi Smoothed指标https://www.mql5.com/ru/code/7930。

我应该对指标的代码做什么修改,以便能够在更高的时间框架的五分钟图表上附加这个指标,例如在三十分钟或一小时的图表上?

谢谢你。


我问过一个类似的问题--如何将一个指标从周线图应用到H4图上。我在几个论坛上捣鼓过.在这里也是,但没有得到任何比在代码中规定一个大的TF-m的大小更小的建议。虽然如果你的指标有简单的物流,并为其计算简单的条形计算,这是可能的。如果你能在工作室的n1上将代码和屏幕的文字与你的解释相结合。
 

因此,该指标应在价格收盘的条形图上画一条垂直线,在条形图的中间位置.....

double close_price(int nomer_bara)
{
if(nomer_bara<1)
{
Alert("нельзя анализировать текущий бар");
}
else
{
if(iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)<iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)/3)//возвращает 1/3 если цена текущего бара закрылась ниже 1/3 его спреда 
{
return(1/3);
}
if(iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)>iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)/3&&(iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)<iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)*2)/3)//возвращает 2/3 если цена текущего бара закрылась ниже 2/3 и выше 1/3 его спреда 
{
return(2/3);
}

if((iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)>(iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara))*2)/3&&iClose(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara)<iHigh(Symbol(),NULL,nomer_bara)-iLow(Symbol(),NULL,nomer_bara))//возвращает 1 если цена текущего бара закрылась выше 2/3 его спреда
{
return(1);
}
}

}

 if(close_price(1)==1/3)// в случае если цена закрылась внизу то нарисовать линию на этом баре
   {
 SetVLine(Red, "", Time[1], STYLE_SOLID, 2);
   }
и так вся проблема заключается в том что линия рисуется на каждом баре не пойму какого черта... помогите пожалуйста

原因: