Yeni başlayanlardan sorular MQL4 MT4 MetaTrader 4 - sayfa 227

 

Merhaba, büyük olasılıkla sorun sıfıra geçişte değil, bir arabellekten diğerine geçişte. Bir çubukta sinyal biter ve sonraki çubukta sinyal zaten başka bir tampondadır, bitişik iki çubuk arasında hangi rengi görmek istersiniz? belirsiz.

İsterseniz sarı çizgili üçüncü bir tampon yapın ve bu ikisinin altına koyun, güzel olur!

 
Aleksei Stepanenko :

Merhaba, büyük olasılıkla sorun sıfıra geçişte değil, bir arabellekten diğerine geçişte. Bir çubukta sinyal biter ve sonraki çubukta sinyal zaten başka bir tampondadır, bitişik iki çubuk arasında hangi rengi görmek istersiniz? belirsiz.

İsterseniz sarı çizgili üçüncü bir tampon yapın ve bu ikisinin altına koyun, güzel olur!

Alexey, yardımın için teşekkürler.

Üç renge ihtiyacım yok, iki tane yeter. Boş alanların önceki rengin bir çizgisiyle çizilmesini istiyorum. " Sinyal bir çubukta bitiyor ve sonraki çubukta sinyal zaten başka bir arabellekte" derken ne demek istediğinizi anlamadım. Her çubuğun arabelleklerden birinde bir değeri vardır, bu nedenle grafikte bir görüntü olmalı, yoksa bir şey mi anlamadım?

 

Bakın, zaman çizelgede kesiklidir, minimum birim 1 bardır. Yani, çubuklar arasında kısmi zaman yoktur. Çizimi bir histogramla değiştirirseniz, iki çubuğunuz olur - farklı renklerde iki sütun. Ama aralarında hiçbir şey yok. Ve çizgi öyle bir şekilde çizilir (böyle bir özellik yapılır), bir tamponun değerlerini birbirine bağlar, ancak farklı olanları değil. Bu nedenle delikler.

Güzellik için iseniz, her iki tamponda da örtüşen son değerleri vermeyi deneyebilirsiniz. Yeni bir ara belleğe sinyal veriyorsunuz, ancak yine de bir çubuk için eski arabelleğe sinyal vermeye devam ediyorsunuz.

Ancak daha sonra böyle bir göstergeden bir Uzman Danışmana bir sinyal alırsanız, yanlışlıklar olacaktır.


Veya bir histogram, fazladan güçlük çekmeden iyi bir seçenektir. Histograma oy veriyorum.

 
Grigori.SB :

Alexey, yardımın için teşekkürler.

Üç renge ihtiyacım yok, iki tane yeter. Boş alanların önceki rengin bir çizgisiyle çizilmesini istiyorum. " Sinyal bir çubukta bitiyor ve sonraki çubukta sinyal zaten başka bir arabellekte" derken ne demek istediğinizi anlamadım. Her çubuğun arabelleklerden birinde bir değeri vardır, bu nedenle grafikte bir görüntü olmalı, yoksa bir şey mi anlamadım?

bir arabelleği koşulsuz bırakın ve ikincisini koşullarla birinciye empoze edin

 #property strict
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 clrGreen
#property indicator_color2 clrRed

//---- input parameters
extern int     FastEMA= 12 ;  
extern int     SlowEMA= 26 ;  
extern int     Signal= 9 ;  

//---- buffers
double DiffBuffer_up[];
double DiffBuffer_dn[];
//
double MainBuffer[];
double SignalBuffer[];

ENUM_TIMEFRAMES TimeFrame;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   int     draw_begin= MathMax (FastEMA,SlowEMA);
   string short_name= "MACD Stephen" ;
   //---- indicators
   SetIndexStyle( 0 , DRAW_LINE );
   SetIndexBuffer ( 0 ,DiffBuffer_up);
   SetIndexStyle( 1 , DRAW_LINE );
   SetIndexBuffer ( 1 ,DiffBuffer_dn);
   short_name= StringConcatenate (short_name, " (" +( string )FastEMA+ "," +( string )SlowEMA+ "," +( string )Signal+ ")" );
   IndicatorShortName(short_name);
   SetIndexDrawBegin( 0 ,draw_begin);
   SetIndexDrawBegin( 1 ,draw_begin);
   SetIndexLabel( 0 , "Up" );
   SetIndexLabel( 1 , "Down" );
   IndicatorDigits( 6 );
   SetLevelValue( 0 , 0 );
   
   TimeFrame=GetTF();
   
   return ( 0 );
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
{

   return ( 0 );
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
{
   int limit, iChart, iTF, delta= 0 ;
   datetime TimeArray[];
   //if(TimeFrame>Period()) delta=(int)MathCeil(TimeFrame/Period());
   int counted_bars=IndicatorCounted();
   //---- check for possible errors
   if (counted_bars< 0 ) return (- 1 );
   //---- the last counted bar will be recounted
   if (counted_bars> 0 ) counted_bars--;
  limit= Bars -counted_bars+delta;

  ArrayCopySeries(TimeArray,MODE_TIME, Symbol (),TimeFrame);
   ArraySetAsSeries (MainBuffer, true );
   ArraySetAsSeries (SignalBuffer, true );
   ArrayResize (MainBuffer,   100000 );
   ArrayResize (SignalBuffer, 100000 );
  
  iTF= 0 ;
   for (iChart= 0 ; iChart<limit; iChart++)
  {
       while (Time[iChart]<TimeArray[iTF]) iTF++;
      MainBuffer[iChart]= EMPTY_VALUE ;
      SignalBuffer[iChart]= EMPTY_VALUE ;
      MainBuffer[iChart]  = iMACD ( Symbol (),TimeFrame,FastEMA,SlowEMA,Signal, PRICE_CLOSE ,MODE_MAIN,iTF);
      SignalBuffer[iChart]= iMACD ( Symbol (),TimeFrame,FastEMA,SlowEMA,Signal, PRICE_CLOSE ,MODE_SIGNAL,iTF);
       double diff=MainBuffer[iChart]-SignalBuffer[iChart];
      DiffBuffer_up[iChart]=diff;
      
      
       if (diff> 0 ) //{
        DiffBuffer_dn[iChart]=diff; 
         //DiffBuffer_dn[iChart]=EMPTY_VALUE;
       //}
       //else {
         
         //DiffBuffer_up[iChart]=EMPTY_VALUE;
       //}
  }
   return ( 0 );
}
 
Aleksei Stepanenko :

Bakın, zaman çizelgede kesiklidir, minimum birim 1 bardır. Yani, çubuklar arasında kısmi zaman yoktur. Çizimi bir histogramla değiştirirseniz, iki çubuğunuz olur - farklı renklerde iki sütun. Ama aralarında hiçbir şey yok. Ve çizgi öyle bir şekilde çizilir (böyle bir özellik yapılır), bir tamponun değerlerini birbirine bağlar, ancak farklı olanları değil. Bu nedenle delikler.

Güzellik için iseniz, her iki tamponda da örtüşen son değerleri vermeyi deneyebilirsiniz. Yeni bir ara belleğe sinyal veriyorsunuz, ancak yine de bir çubuk için eski arabelleğe sinyal vermeye devam ediyorsunuz.

Ancak daha sonra böyle bir göstergeden bir Uzman Danışmana bir sinyal alırsanız, yanlışlıklar olacaktır.

Veya bir histogram, fazladan güçlük çekmeden iyi bir seçenektir. Histograma oy veriyorum.

Çok teşekkür ederim Alexey.

Şimdi kafamda bile raflardaki her şey çürüdü. Kendim yapabilirdim ama Yuri'nin sonraki tavsiyesindeki kadar kısa ve zarif değil.

 
Iurii Tokman :

bir arabelleği koşulsuz bırakın ve ikincisini koşullarla birinciye empoze edin

Belden eğiliyorum Yuri.

Bu kadar zarif ve özlü bir çözümü hayal bile edemezdim.

 
Grigori.SB :

Belden eğiliyorum Yuri.

Bu kadar zarif ve özlü bir çözümü hayal bile edemezdim.

Bunu forumda ben icat etmedim, tıpkı senin de öğrendiğin gibi
kod tabanında bir çok çözüm var ve sadece bunlar değil

 
Grigori.SB :


"Teşekkürler için teşekkürler!

 
Sorularım neden hep göz ardı ediliyor?
 
darirunu1 :
Sorularım neden hep göz ardı ediliyor?

sorulara bağlı...