dikey çizgi.

 
Merhaba! Zaman ve fiyat olarak iki nokta arasına çizgi çekecek bir gösterge yapmaya başladım, çizgiyi çizmenin yolu şöyle bir şey:
 for ( int w=limit;w<rates_total;w++)
 SupportBuffer[w]=low[s1]+speeds*(w-s1);
Her şey yolunda, ancak bazen noktaların zamanı bir mumda olabilir, dikey bir çizgi çıkıyor. Anladığım kadarıyla SupportBuffer[w] dikey yapılamaz?
 
Nauris Zukas :
Merhaba! Zaman ve fiyat olarak iki nokta arasına çizgi çekecek bir gösterge yapmaya başladım, çizgiyi çizmenin yolu şöyle bir şey:
Her şey yolunda, ancak bazen noktaların zamanı bir mumda olabilir, dikey bir çizgi çıkıyor. Anladığım kadarıyla SupportBuffer[w] dikey yapılamaz?

Çizgi yerine zikzak kullanırsanız işe yarayacaktır.

 
Alexey Viktorov :

Çizgi yerine zikzak kullanırsanız işe yarayacaktır.

Teşekkürler, ZigZag'ı ayrıştırmaya ve çizgi çizme prensibini anlamaya çalışacağım.

 
Alexey Viktorov :

Çizgi yerine zikzak kullanırsanız işe yarayacaktır.

ZigZag'ın kendisinin oldukça karmaşık olduğu ortaya çıktı, bu yüzden onu ayrıştırmak kolay olmadı. Ama ben basit bir örnek hazırladım... Son çubuktan itibaren 3 çubukta zikzak tavsiyenize göre Yüksek ve Düşük arasında bir çizgi olacak bir fonksiyon ekleyebilir misiniz? İlkeyi anlamak istiyorum, sonra kendim geliştirebilirim.

 #property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots    1
//--- plot Support
#property indicator_label1    "Line"
#property indicator_type1    DRAW_LINE
#property indicator_color1    clrAqua
#property indicator_style1    STYLE_SOLID
#property indicator_width1    3

//--- indicator buffers
double          LineTest[];
double          HighMapBuffer[];     // highs
double          LowMapBuffer[];       // lows
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
//--- indicator buffers mapping
   SetIndexBuffer ( 0 ,LineTest, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,HighMapBuffer, INDICATOR_CALCULATIONS );
   SetIndexBuffer ( 2 ,LowMapBuffer, INDICATOR_CALCULATIONS );
   PlotIndexSetDouble ( 0 , PLOT_EMPTY_VALUE , EMPTY_VALUE );
//---
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//---
   int limit=prev_calculated;

   for ( int i2=limit;i2<rates_total;i2++) // New bar recalculate
     {
       if (limit<rates_total- 1 ) continue ; // New bar recalculate
       for ( int i= 0 ;i<rates_total;i++)
        {
         //if(i<rates_total-3 && i>rates_total-15) // H Line 3-15 bar
         //   LineTest[i]=high[rates_total-2]; // Price
         //else LineTest[i]=EMPTY_VALUE; 
         
         HighMapBuffer[i]=high[rates_total- 3 ];
         LowMapBuffer[i]=low[rates_total- 3 ];
         LineTest[i]=                     // ???
         

        }
     }
   return (rates_total);
  }
//+------------------------------------------------------------------+
 
Nauris Zukas :

ZigZag'ın kendisinin oldukça karmaşık olduğu ortaya çıktı, bu yüzden onu ayrıştırmak kolay olmadı. Ama ben basit bir örnek hazırladım... Son çubuktan itibaren 3 çubukta zikzak tavsiyenize göre Yüksek ve Düşük arasında bir çizgi olacak bir fonksiyon ekleyebilir misiniz? İlkeyi anlamak istiyorum, sonra kendim geliştirebilirim.

https://www.mql5.com/ru/docs/customind/indicators_examples/draw_zigzag

Документация по MQL5: Пользовательские индикаторы / Стили индикаторов в примерах / DRAW_ZIGZAG
Документация по MQL5: Пользовательские индикаторы / Стили индикаторов в примерах / DRAW_ZIGZAG
  • www.mql5.com
//|                                                  DRAW_ZIGZAG.mq5 | //|                        Copyright 2011, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Custom indicator initialization function                         |...
 
Taras Slobodyanik :

https://www.mql5.com/ru/docs/customind/indicators_examples/draw_zigzag


Teşekkürler, burada zaten bazı açıklamalar var ve okozalos bir gösterge değil bir stil :), anlamaya çalışacağım.

 
Neden OnCalculate'de, ilk kene 372158 ve ardından normal Rates_total: 10001 terminali Rate_total: başlatıldıktan sonra bir fikriniz var mı?
 

Dikey hatlar yapılmış çıktı ama dikey hatlar arasındaki bağlantı hattı nasıl kaldırılır anlamadım. Birisi örneğimi bağlantı hattının gitmesi için düzeltebilir mi?

 #property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots    1
//--- plot ZigZag
#property indicator_label1    "ZigZag"
#property indicator_type1    DRAW_ZIGZAG
#property indicator_color1    clrRed
#property indicator_style1    STYLE_SOLID
#property indicator_width1    10

//--- indicator buffers
double          ZigZagBuffer1[];
double          ZigZagBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
   SetIndexBuffer ( 0 ,ZigZagBuffer1, INDICATOR_DATA );
   SetIndexBuffer ( 1 ,ZigZagBuffer2, INDICATOR_DATA );

   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
   int limit=prev_calculated;
   if (prev_calculated== 0 )limit=rates_total- 1 ;

   for ( int i2=limit;i2<rates_total;i2++) // recalculate on new bar
     {

       for ( int i= 0 ;i<rates_total;i++)
        {
         if (i==rates_total- 3 || i==rates_total- 15 ) // should be VLine on 3th and 15th bar!
           {
            ZigZagBuffer1[i]=high[i];
           }
         else
           {
            ZigZagBuffer1[i]= EMPTY_VALUE ;
           }
                      
         if (i==rates_total- 3 || i==rates_total- 15 ) // should be VLine on 3th and 15th bar !
           {
            ZigZagBuffer2[i]=low[i];
           }
         else
           {
            ZigZagBuffer2[i]= EMPTY_VALUE ;
           }           
           
         if (ZigZagBuffer1[i]!= EMPTY_VALUE ) Print ( " ZigZagBuffer1[" ,i, "]: " ,ZigZagBuffer1[i]);
         if (ZigZagBuffer2[i]!= EMPTY_VALUE ) Print ( " ZigZagBuffer2[" ,i, "]: " ,ZigZagBuffer2[i]);

        }
     }
   return (rates_total);
  }
//+------------------------------------------------------------------+
 
Nauris Zukas :

Dikey hatlar yapılmış çıktı ama dikey hatlar arasındaki bağlantı hattı nasıl kaldırılır anlamadım. Birisi örneğimi bağlantı hattının gitmesi için düzeltebilir mi?

O zaman yanılmışım. Konuyu anlamadım...

Bu durumda, DRAW_HISTOGRAM2 grafik yapısını kullanmak gereklidir ve daha da kolaydır.

Документация по MQL5: Пользовательские индикаторы / Стили индикаторов в примерах / DRAW_HISTOGRAM2
Документация по MQL5: Пользовательские индикаторы / Стили индикаторов в примерах / DRAW_HISTOGRAM2
  • www.mql5.com
//|                                              DRAW_HISTOGRAM2.mq5 | //|                        Copyright 2011, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Custom indicator initialization function                         |...
 
Alexey Viktorov :

O zaman yanılmışım. Konuyu anlamadım...

Bu durumda, DRAW_HISTOGRAM2 grafik yapısını kullanmak gereklidir ve daha da kolaydır.

Teşekkürler, deneyeceğim!

Başka bir soru, DRAW_HISTOGRAM2 sadece dikey olarak mı çiziyor yoksa eğimli de olabilir mi (iki çubuk arasında)?
 
Nauris Zukas :

Teşekkürler, deneyeceğim!

Başka bir soru, DRAW_HISTOGRAM2 sadece dikey olarak mı çiziyor yoksa eğimli de olabilir mi (iki çubuk arasında)?

Neye ihtiyacınız olduğuna siz karar verin...

Karıştırmak gerekirse, sadece bazen zikzakın iki dikey bölümü arasındaki bağlantıları çıkarın, o zaman renkli bir zikzak almak ve duruma göre yerlerde renk yokluğunu atamak daha iyidir.

Ve genel olarak, grafik yapılarla ilgili belgelerin tüm bölümünü okumaktan zarar gelmez. En azından neler yapılabileceğine dair bir fikir olacak ...