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.
Ç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.
Ç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); } //+------------------------------------------------------------------+
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
- www.mql5.com
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.
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); } //+------------------------------------------------------------------+
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.
- www.mql5.com
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)?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 ...
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
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?