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.
Se usi uno zigzag invece di una linea, funziona.
Grazie, cercherò di smontare lo ZigZag e capire il principio di tracciare una linea.
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); } //+------------------------------------------------------------------+
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](https://c.mql5.com/36/21/dokumentaciya-po-mql5-polzovatelskie.png)
- www.mql5.com
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.
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); } //+------------------------------------------------------------------+
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](https://c.mql5.com/36/21/dokumentaciya-po-mql5-polzovatelskie__1.png)
- www.mql5.com
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)?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...
![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
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?