Bonjour, j'ai commencé à faire un indicateur qui va dessiner une ligne entre deux pips dans le temps et le prix, la façon dont la ligne est dessinée est comme ceci :
Tout va bien, mais parfois les points de temps peuvent être dans une seule bougie, vous obtenez une ligne verticale. Je suppose que le SupportBuffer[w] ne peut pas être rendu vertical ?
Si on utilise un zigzag au lieu d'une ligne, ça marche.
Si vous utilisez un zigzag au lieu d'une ligne, ça marche.
Merci, je vais essayer de démonter le ZigZag et de comprendre le principe du tracé d'une ligne.
Si vous utilisez un zigzag au lieu d'une ligne, cela fonctionnera.
Le ZigZag lui-même s'est avéré être assez souple, il n'a donc pas été facile à démonter. Mais j'ai préparé un exemple simple... Pouvez-vous ajouter une fonction, où sur 3 barres à partir de la dernière barre il y aura une ligne entre le haut et le bas selon votre conseil zigzag ? Je voudrais comprendre le principe, et ensuite je pourrai le développer moi-même.
#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); } //+------------------------------------------------------------------+
Le ZigZag lui-même s'est avéré être assez souple, il n'a donc pas été facile à démonter. Mais j'ai préparé un exemple simple... Pouvez-vous ajouter une fonction, où sur 3 barres à partir de la dernière barre il y aura une ligne entre le haut et le bas selon votre conseil zigzag ? J'aimerais comprendre le principe et ensuite je pourrai le développer moi-même.
https://www.mql5.com/ru/docs/customind/indicators_examples/draw_zigzag
- www.mql5.com
https://www.mql5.com/ru/docs/customind/indicators_examples/draw_zigzag
Merci, il y a déjà une description et c'est un style, pas un indicateur :), je vais essayer de trouver une solution.
La ligne verticale a fonctionné, mais je ne comprends pas comment supprimer la ligne de liaison entre les lignes verticales. Quelqu'un peut-il corriger mon exemple pour que la ligne de liaison disparaisse ?
#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 ligne verticale a fonctionné, mais je ne comprends pas comment supprimer la ligne de liaison entre les lignes verticales. Quelqu'un peut-il corriger mon exemple pour que la ligne de liaison disparaisse ?
Eh bien, j'avais tort alors. Je n'ai pas compris le but...
Dans ce cas il est nécessaire, et plus facile, d'utiliser le dessin graphique DRAW_HISTOGRAM2
- www.mql5.com
Eh bien, j'avais tort alors. Je n'ai pas compris le but...
Dans ce cas, il est nécessaire, et plus facile, d'utiliser le tracé graphique DRAW_HISTOGRAM2
Merci, je vais essayer !
Autre question, DRAW_HISTOGRAM2 dessine-t-il uniquement verticalement ou peut-il également dessiner obliquement (entre deux barres) ?Merci, je vais essayer !
Autre question, DRAW_HISTOGRAM2 ne dessine que verticalement ou peut-il également dessiner en pente (entre deux barres) ?Vous devez décider ce que vous voulez...
Si vous avez besoin de mélanger les choses, de supprimer parfois les connexions entre les deux sections verticales du zigzag, il est préférable de prendre un zigzag coloré et de placer la condition d'attribuer aucune couleur.
Il ne serait pas inutile de lire toute la section de la documentation relative au tracé graphique. Cela vous donnerait une idée de ce qui peut être fait...
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Tout va bien, mais parfois les points de temps peuvent être dans une seule bougie, vous obtenez une ligne verticale. Je comprends que le SupportBuffer[w] ne peut pas être rendu vertical ?