縦線。

 
こんにちは!時間と価格の2pipsの間に線を引くインジケータを作り始めたのですが、線の引き方はだいたいこんな感じです。
for(int w=limit;w<rates_total;w++)
 SupportBuffer[w]=low[s1]+speeds*(w-s1);
すべて順調ですが、時々、タイムポイントが1つのキャンドルになることがあり、縦線が 表示されます。SupportBuffer[w]は縦にできないとのことですが?
 
Nauris Zukas:
こんにちは!時間と価格の2pipsの間に線を引くインジケーターを作り始めました!線の引き方は以下のような感じです。
すべて順調ですが、時々、タイムポイントが1つのロウソクになることがあり、縦線が 出ます。SupportBuffer[w]を縦にすることはできないのですね。

線ではなくジグザグにすると、うまくいくんです。

 
Alexey Viktorov:

線ではなく、ジグザグにするとうまくいきます。

ありがとうございます。ZigZagを分解して、線を引く原理を理解しようと思います。

 
Alexey Viktorov:

線ではなく、ジグザグにするとうまくいきます。

ジグザグ自体はかなりコンプリーションが高いことがわかったので、分解は容易ではありませんでした。でも、簡単な例を用意しましたので...。最後のバーから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);
  }
//+------------------------------------------------------------------+
 
Nauris Zukas:

ジグザグ自体はかなりコンプリーションが高いことがわかったので、分解は容易ではありませんでした。でも、簡単な例を用意しましたので...。最後のバーから3つのバーで、アドバイスのジグザグに従って高値と安値を結ぶ線を表示する機能を追加できますか?原理を理解した上で、自分で開発できるようになりたいです。

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


ありがとうございます!すでに記述があり、インジケーターではなくスタイルなんですね :) 頑張って考えてみます。

 
端末を起動 した後のOnCalculateで、最初のティックで372158、その後通常のrate_total: 10001の理由は何かありますか?
 

縦線はうまくいったのですが、縦線と縦線の間の連結線を消す方法がよくわかりません。どなたか、接続線が消えるように、私の例を修正していただけませんか?

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

縦線はうまくいったのですが、縦線と縦線の間の連結線を消す方法がよくわかりません。どなたか、接続線が消えるように、私の例を修正していただけませんか?

そうか、あの時、私は間違っていたんだ。目的がよくわからなかった...。

この場合、グラフィカルな図面 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:

そうか、あの時、私は間違っていたんだ。目的がよくわからなかった...。

この場合、DRAW_HISTOGRAM2 グラフィカルプロッターを 使用することが必要であり、また簡単である。

ありがとうございます!試してみます。

もう一つの質問ですが、DRAW_HISTOGRAM2は垂直方向にしか描画しないのですか、それとも斜め方向(2本のバーの間)にも描画できるのですか?
 
Nauris Zukas:

ありがとうございます!試してみます。

もう一つの質問ですが、DRAW_HISTOGRAM2は垂直方向にのみ描画するのですか、それとも傾斜(2本の棒の間)も描画できるのですか?

何が欲しいか、自分で決めて...。

混ぜる必要がある場合、時々だけジグザグの2つの垂直部分の接続を削除する場合は、色の付いたジグザグを取り、色を割り当てない条件を配置する方がよいでしょう。

グラフィックプロットに関する すべてのドキュメントセクションを読んでおいて損はないでしょう。何ができるかのヒントが得られると思うのですが...。

理由: