Linea verticale.

 
Ciao, ho iniziato a fare un indicatore che disegnerà una linea tra due pip nel tempo e nel prezzo, il modo in cui la linea è disegnata è approssimativamente come questo:
for(int w=limit;w<rates_total;w++)
 SupportBuffer[w]=low[s1]+speeds*(w-s1);
Tutto va bene, ma a volte i punti di tempo possono essere in una candela, si ottiene una linea verticale. Ho capito che SupportBuffer[w] non può essere reso verticale?
 
Nauris Zukas:
Ciao, ho iniziato a fare un indicatore che disegnerà una linea tra due pip nel tempo e nel prezzo, il modo in cui la linea è disegnata è approssimativamente come questo:
Tutto va bene, ma a volte i punti di tempo possono essere in una candela, si ottiene una linea verticale. Immagino che SupportBuffer[w] non possa essere reso verticale?

Se usiamo uno zigzag invece di una linea, funziona.

 
Alexey Viktorov:

Se usi uno zigzag invece di una linea, funziona.

Grazie, cercherò di smontare lo ZigZag e capire il principio di tracciare una linea.

 
Alexey Viktorov:

Se usi uno zigzag invece di una linea, funzionerà.

Lo ZigZag stesso si è rivelato essere abbastanza flessibile, quindi non è stato facile da smontare. Ma ho preparato un semplice esempio... Puoi aggiungere una funzione, dove su 3 barre dall'ultima barra ci sarà una linea tra l'alto e il basso secondo il tuo consiglio zigzag? Vorrei capire il principio, e poi sarò in grado di svilupparlo io stesso.

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

Lo ZigZag stesso si è rivelato essere abbastanza flessibile, quindi non è stato facile da smontare. Ma ho preparato un semplice esempio... Potete aggiungere una funzione, dove su 3 barre dall'ultima barra ci sarà una linea tra l'alto e il basso secondo il vostro consiglio zigzag? Vorrei capire il principio e poi sarò in grado di svilupparlo io stesso.

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


Grazie, c'è già qualche descrizione ed è uno stile, non un indicatore :), cercherò di capirlo.

 
Qualche idea sul perché in OnCalculate dopo l'avvio del terminale rates_total: sul primo tick 372158 e poi rates_total normale: 10001 ?
 

La linea verticale ha funzionato, ma non capisco come rimuovere la linea di collegamento tra le linee verticali. Qualcuno può correggere il mio esempio in modo che la linea di collegamento scompaia?

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

La linea verticale ha funzionato, ma non capisco come rimuovere la linea di collegamento tra le linee verticali. Qualcuno può correggere il mio esempio in modo che la linea di collegamento scompaia?

Beh, allora mi sbagliavo. Non ho capito lo scopo...

In questo caso è necessario, e più facile, usare il disegno grafico DRAW_HISTOGRAM2

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

Beh, allora mi sbagliavo. Non ho capito lo scopo...

In questo caso è necessario, e più facile, usare il plottaggio grafico DRAW_HISTOGRAM2

Grazie, farò una prova!

Un'altra domanda, DRAW_HISTOGRAM2 disegna solo verticalmente o può anche disegnare obliquamente (tra due barre)?
 
Nauris Zukas:

Grazie, farò una prova!

Un'altra domanda, DRAW_HISTOGRAM2 disegna solo verticalmente o può anche inclinarsi (tra due barre)?

Dovrai decidere cosa vuoi...

Se hai bisogno di mescolare, solo a volte rimuovi i collegamenti tra le due sezioni verticali dello zigzag, allora è meglio prendere uno zigzag colorato e mettere la condizione di non assegnare alcun colore.

Non sarebbe male leggere tutta la sezione della documentazione sul tracciato grafico. Ti darebbe un'idea di quello che si può fare...