Vertikale Linie.

 
Hallo! Ich habe damit begonnen, einen Indikator zu erstellen, der eine Linie zwischen zwei Pips in der Zeit und dem Preis zieht, die Art und Weise, wie die Linie gezogen wird, ist ungefähr so:
for(int w=limit;w<rates_total;w++)
 SupportBuffer[w]=low[s1]+speeds*(w-s1);
Alles ist in Ordnung, aber manchmal können die Zeitpunkte in einer Kerze liegen, dann erhält man eine vertikale Linie. Ich verstehe, dass SupportBuffer[w] nicht vertikal ausgerichtet werden kann?
 
Nauris Zukas:
Hallo! Ich habe damit begonnen, einen Indikator zu erstellen, der eine Linie zwischen zwei Pips in der Zeit und dem Preis zieht, die Art und Weise, wie die Linie gezogen wird, ist ungefähr so:
Alles ist in Ordnung, aber manchmal können die Zeitpunkte in einer Kerze liegen, dann erhält man eine vertikale Linie. Ich nehme an, dass SupportBuffer[w] nicht vertikal ausgerichtet werden kann?

Wenn wir einen Zickzackkurs statt einer Linie verwenden, funktioniert es.

 
Alexey Viktorov:

Wenn Sie statt einer Linie ein Zickzack verwenden, funktioniert es.

Danke, ich werde versuchen, den ZigZag zu zerlegen und das Prinzip des Zeichnens einer Linie zu verstehen.

 
Alexey Viktorov:

Wenn Sie statt einer Linie einen Zickzackkurs verwenden, funktioniert es.

Der ZigZag selbst erwies sich als recht nachgiebig, so dass es nicht einfach war, ihn zu zerlegen. Aber ich habe ein einfaches Beispiel vorbereitet... Können Sie eine Funktion hinzufügen, bei der 3 Balken nach dem letzten Balken eine Linie zwischen dem Hoch und dem Tief nach Ihrem Rat Zickzack verläuft? Ich möchte das Prinzip verstehen, dann kann ich es selbst entwickeln.

#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:

Der ZigZag selbst erwies sich als recht nachgiebig, so dass es nicht einfach war, ihn zu zerlegen. Aber ich habe ein einfaches Beispiel vorbereitet... Können Sie eine Funktion hinzufügen, bei der 3 Balken nach dem letzten Balken eine Linie zwischen dem Hoch und dem Tief nach Ihrem Rat Zickzack verläuft? Ich möchte das Prinzip verstehen und kann es dann selbst entwickeln.

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


Danke, es gibt bereits eine Beschreibung und es ist ein Stil, kein Indikator :), ich werde versuchen, es herauszufinden.

 
Jede Idee, warum in OnCalculate nach dem Starten des Terminals rates_total: auf den ersten Tick 372158 und dann normal rates_total: 10001 ?
 

Die vertikale Linie hat funktioniert, aber ich kann nicht herausfinden, wie ich die Verbindungslinie zwischen den vertikalen Linien entfernen kann. Kann jemand mein Beispiel so korrigieren, dass die Verbindungslinie verschwindet?

#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:

Die vertikale Linie hat funktioniert, aber ich verstehe nicht, wie man die Verbindungslinie zwischen den vertikalen Linien entfernt. Kann jemand mein Beispiel so korrigieren, dass die Verbindungslinie verschwindet?

Nun, dann habe ich mich geirrt. Ich habe den Zweck nicht verstanden...

In diesem Fall ist es notwendig und einfacher, die grafische Zeichnung DRAW_HISTOGRAM2 zu verwenden.

Документация по 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:

Nun, dann habe ich mich geirrt. Ich habe den Zweck nicht verstanden...

In diesem Fall ist es notwendig und einfacher, die grafische Darstellung DRAW_HISTOGRAM2 zu verwenden.

Danke, ich werde es ausprobieren!

Eine weitere Frage: Zeichnet DRAW_HISTOGRAM2 nur vertikal oder kann es auch schräg (zwischen zwei Balken) zeichnen?
 
Nauris Zukas:

Danke, ich werde es ausprobieren!

Eine weitere Frage, DRAW_HISTOGRAM2 zeichnet nur vertikal oder kann es auch schräg (zwischen zwei Balken)?

Sie müssen sich entscheiden, was Sie wollen...

Wenn Sie es durcheinander bringen müssen, nur manchmal die Verbindungen zwischen den beiden vertikalen Abschnitten des Zickzacks entfernen, dann ist es besser, einen farbigen Zickzack zu nehmen und die Bedingung zu stellen, keine Farbe zuzuweisen.

Es kann nicht schaden, alle Abschnitte der Dokumentation über die grafische Darstellung zu lesen. Es würde Ihnen eine Vorstellung davon geben, was getan werden kann...