MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 372

 
PokrovMT5 :

Maksim, iyi günler! Seçenek için teşekkürler, benimki neredeyse aynı, o da çalışıyor, ama Alekseu Fedotov bana farklı bir tane teklif etti, bunun hakkında yazdım ve nasıl düzeltileceği konusunda bir fikir olduğunu yazdım?



yeniden çizim fazla hareket etmezse (örneğin, görsel bir göstergedir veya şu anda olduğu gibi bir şekilde yeniden hesaplayacaksınız) - sizin durumunuzda OnCalculate işlevinden her şeyin yeniden hesaplanması gereken yeri döndürün - önceki saatin başlangıcının çubuğu.

dönüş oranları_total-iBarShift(_Symbol,_Period,time[0]-TimeMinute(time[0])*60-TimeSeconds(time[0])-1 ); // yaklaşımı göstermek için "elle ve test edilmemiş" yazılmış böyle bir şey.

 
MakarFX : ama sorunu çözmüyor
 // #property  copyright "Copyright © 2005, Yura Prokofiev"
// #property  link      "Yura.prokofiev@gmail.com"
#property   strict
#property   indicator_separate_window
#property   indicator_buffers 3
 
extern int       Barrs  = 10 ;     // Баров для расчета
extern string    simvol = "EURGBP" ;
double Buf_0[], Buf_1[], Buf_2[];

void OnInit ()
{
   SetIndexStyle ( 0 , DRAW_NONE );
   SetIndexStyle ( 1 , DRAW_HISTOGRAM , STYLE_SOLID , 2 ,Yellow);
   SetIndexStyle ( 2 , DRAW_HISTOGRAM , STYLE_SOLID , 2 ,Red);
   IndicatorDigits (( int ) SymbolInfoInteger (simvol, SYMBOL_DIGITS ));

   SetIndexBuffer ( 0 ,Buf_0);
   SetIndexBuffer ( 1 ,Buf_1);
   SetIndexBuffer ( 2 ,Buf_2);

   IndicatorShortName ( "Fisher " +simvol);
   SetIndexLabel ( 1 , NULL );
   SetIndexLabel ( 2 , NULL );
}

int start()
{
   int     i, limit, counted_bars= IndicatorCounted ();
   double prev,current;
   double Value= 0 , Value1= 0 , Value2= 0 , Fish= 0 , Fish1= 0 , Fish2= 0 ;
   double price, MinL= 0 , MaxH= 0 ;

   if (counted_bars> 0 ) counted_bars--;
   limit= Bars -counted_bars;

   for (i= 0 ; i<limit; i++)
   {
      MaxH = iHigh (simvol,   0 , iHighest (simvol,   0 , MODE_HIGH ,Barrs,i));
      MinL = iLow (simvol,   0 , iLowest (simvol,   0 , MODE_LOW , Barrs,i));
      price = ( iHigh (simvol, 0 , i) + iLow (simvol, 0 , i))/ 2 ;
       if (MaxH != MinL)
      Value = 0.33 * 2 *((price-MinL)/(MaxH-MinL)- 0.5 ) + 0.67 *Value1;     
      Value= MathMin ( MathMax (Value,- 0.999 ), 0.999 ); 
      Buf_0[i]= 0.5 * MathLog (( 1 +Value)/( 1 -Value))+ 0.5 *Fish1;
      Value1=Value;
      Fish1=Buf_0[i];
   }
   bool up= true ;
   for (i=limit- 2 ; i>= 0 ; i--)
   {
      current=Buf_0[i];
      prev=Buf_0[i+ 1 ];
       if (((current< 0 )&&(prev> 0 ))||(current< 0 ))   up= false ;    
       if (((current> 0 )&&(prev< 0 ))||(current> 0 ))   up= true ;
      Buf_1[i]= 0 ;  Buf_2[i]= 0 ;
       if (!up) Buf_2[i]=current;
       else     Buf_1[i]=current;
   }
   return 0 ;
}

Altta eski, üstte yeni

Göstergenin - sıfırların olduğu grafiğin zaman çerçevesi kullanılır.

 
YarTrade :

Lütfen bana yeni bir çubuk görünümüyle arabelleği nasıl sıfırlayacağımı söyleyin, ancak önceki veriler silinmez, ancak grafikte görüntülenir. Nedense arabelleği sıfırlayamıyorum ve yeni bir barın gelmesiyle eski birikmiş veriler yenileriyle kaplanıyor. Kodda neyi yanlış yapıyorum? Açıklamalar için teşekkürler.

Yeni bir çubuk göründüğünde, terminal arabelleklere yeni sıfır öğeleri ekler. 3 ... 6. satırlarda sıfırlanırlar. Gerisi tutulur
 
STARIJ :
Yeni bir çubuk göründüğünde, terminal arabelleklere yeni sıfır öğeleri ekler. 3 ... 6. satırlarda sıfırlanırlar. Gerisi tutulur

Öyleyse, neden yeni bir çubuğun ortaya çıktığı histogramın çubukları önceki çubuğu hemen artırıyor ve daha da büyüyor ve bir sonraki çubuk göründüğü anda bir sonraki çubuk bir öncekinin büyümesine sahip?

 
YarTrade :

Öyleyse, neden yeni bir çubuğun ortaya çıktığı histogramın çubukları önceki çubuğu hemen artırıyor ve daha da büyüyor ve bir sonraki çubuk göründüğü anda bir sonraki çubuk bir öncekinin büyümesine sahip?

özetin var
V2 = V1 + V2;
 
Herkese selamlar, kendim çözemiyorum, bir tür poltergeist, dikkatsizlik olsa da
 int ticket_order= 0 ;
void OnTick ()
{
   if ( OrdersTotal ()== 0 )
   {
     // километр кода
    ticket_order= OrderSend ( Symbol (),up_down,lots, Ask , 3 , 0 , 0 );
    }
     if ( OrdersTotal ()== 1 )
   {
     OrderSelect (ticket_order, SELECT_BY_TICKET );
     bool Ans= OrderModify (ticket_order,Price,SL,TP, 0 );
    }
}
     
   
Böyle bir kombinasyonda, strateji test cihazında yanlış bir biletle (OrderModify()) ve n. sırada, birincide değil, ikincide değil, ne günah işleyeceğimi bilmiyorum, belki de OrderModify() veya OrderSelect bilet bağlantıya göre geçirilir ve bir şekilde değişir mi?
 
ijonhson : yanlış bilet hatası(OrderModify())
Benzerdi. Birinci ve ikinci koşul operatörlerini sakatatlarla birlikte yeniden düzenleyin - yardımcı olabilir.
 
STARIJ :

Altta eski, üstte yeni

Göstergenin - sıfırların olduğu grafiğin zaman çerçevesi kullanılır.

Çok teşekkürler. İstediğim buydu.
 
ijonhson :
Herkese merhaba, kendim çözemiyorum,

Bu, hatayı bulmayı kolaylaştırır:

 if ( OrderSelect (ticket_order, SELECT_BY_TICKET ) )
  if ( OrderModify (ticket_order,Price,SL,TP, 0 ) ) {}
Ama bence OrderSelect() öncesi tiket_order=(correct_ticket) olmalı
 
ijonhson :
Herkese selamlar, kendim çözemiyorum, bir tür doğrudan poltergeist, dikkatsizlik olsa da, böyle bir grupta, strateji test cihazında yanlış bir biletle (OrderModify ()) ve nth'de bir hata oluşur. sipariş, birincide değil, ikincide değil, ben ve ben ne günah işleyeceğimizi bilmiyoruz, belki OrderModify () veya OrderSelect'te, bilet referansla geçirilir ve bir şekilde orada değişir mi?
Bilete göre bir sipariş seçiyorsunuz ve ardından bir kilometrelik koddan sonra onu değiştirmeye çalışıyorsunuz. Ancak şu anda zaten kapalı olabilir.