線ではなく、ジグザグにするとうまくいきます。
ありがとうございます。ZigZagを分解して、線を引く原理を理解しようと思います。
線ではなく、ジグザグにするとうまくいきます。
ジグザグ自体はかなりコンプリーションが高いことがわかったので、分解は容易ではありませんでした。でも、簡単な例を用意しましたので...。最後のバーから3つのバーで、アドバイスのジグザグに従って高値と安値を結ぶ線を表示する機能を追加できますか?原理を理解した上で、自分で開発できるようになりたいですね。
#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); } //+------------------------------------------------------------------+
ジグザグ自体はかなりコンプリーションが高いことがわかったので、分解は容易ではありませんでした。でも、簡単な例を用意しましたので...。最後のバーから3つのバーで、アドバイスのジグザグに従って高値と安値を結ぶ線を表示する機能を追加できますか?原理を理解した上で、自分で開発できるようになりたいです。
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
ありがとうございます!すでに記述があり、インジケーターではなくスタイルなんですね :) 頑張って考えてみます。
縦線はうまくいったのですが、縦線と縦線の間の連結線を消す方法がよくわかりません。どなたか、接続線が消えるように、私の例を修正していただけませんか?
#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); } //+------------------------------------------------------------------+
縦線はうまくいったのですが、縦線と縦線の間の連結線を消す方法がよくわかりません。どなたか、接続線が消えるように、私の例を修正していただけませんか?
そうか、あの時、私は間違っていたんだ。目的がよくわからなかった...。
この場合、グラフィカルな図面 DRAW_HISTOGRAM2 を使用することが必要であり、容易である。
- www.mql5.com
そうか、あの時、私は間違っていたんだ。目的がよくわからなかった...。
この場合、DRAW_HISTOGRAM2 グラフィカルプロッターを 使用することが必要であり、また簡単である。
ありがとうございます!試してみます。
もう一つの質問ですが、DRAW_HISTOGRAM2は垂直方向にしか描画しないのですか、それとも斜め方向(2本のバーの間)にも描画できるのですか?ありがとうございます!試してみます。
もう一つの質問ですが、DRAW_HISTOGRAM2は垂直方向にのみ描画するのですか、それとも傾斜(2本の棒の間)も描画できるのですか?何が欲しいか、自分で決めて...。
混ぜる必要がある場合、時々だけジグザグの2つの垂直部分の接続を削除する場合は、色の付いたジグザグを取り、色を割り当てない条件を配置する方がよいでしょう。
グラフィックプロットに関する すべてのドキュメントセクションを読んでおいて損はないでしょう。何ができるかのヒントが得られると思うのですが...。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
すべて順調ですが、時々、タイムポイントが1つのキャンドルになることがあり、縦線が 表示されます。SupportBuffer[w]は縦にできないとのことですが?