MQL4、MQL5に関する初心者からの質問、アルゴリズムやコードに関するヘルプ、ディスカッションなど。 - ページ 1483

 
Alexey Viktorov:

時刻と価格をピクセル単位のXY座標に変換することに注意

行価を読み込んでピクセルに変換し、X座標はそのままに Y 軸の座標を「テキストマーク」オブジェクトに 割り当てます。

この機能にはずっと注目していたのですが、経験が浅いのでどうしたらいいか分かりませんでした。ありがとうございます、コードに統合してみます。

 
Aleksei Stepanenko:

Line And Text Indicator Ver 1

インジケータは、テキストをその行に追従して移動させます。入力パラメータに行名を挿入する。

ありがとうございます。これも面白いレイアウトですね。ChartTimePriceToXY()を理解したら、ぜひ取り出してみたいと思います。

 

何が問題なのか、教えてください。

   for(int i=rates_total-prev_calculated-2;i>=0;i--)
     {
      ADRBuffer1[i]=High[i];
      if(High[i]<ADRBuffer1[i+1])
      ADRBuffer1[i]=ADRBuffer1[i+1];
      ADRBuffer2[i]=Low[i];
      if(Low[i]>ADRBuffer2[i+1])
      ADRBuffer2[i]=ADRBuffer2[i+1];
     }

ローは引き分け、ハイは嫌がる...。

 
MakarFX:

何が問題なのか、教えてください。

ローは引き分け、ハイは嫌がる...。

初回実行時のADRBuffer1[i+1]は何に相当するのでしょうか?おそらく、High[i]よりもゴミが多い。

 
Alexey Viktorov:

初回実行時のADRBuffer1[i+1]は何に相当するのでしょうか?おそらく、High[i]よりもゴミが多いのでしょう。

修正方法とLowが正常に描画される理由を教えてください。

全てのコード

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrDimGray
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrCrimson
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1
#property indicator_type3   DRAW_LINE
#property indicator_color3  clrTeal
#property indicator_style3  STYLE_SOLID
#property indicator_width3  1
//--- indicator buffers
double   ADRBuffer0[];
double   ADRBuffer1[];
double   ADRBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   IndicatorDigits(Digits);
//--- indicator buffers mapping
   SetIndexBuffer(0,ADRBuffer0,INDICATOR_DATA);
   SetIndexBuffer(1,ADRBuffer1,INDICATOR_DATA);
   SetIndexBuffer(2,ADRBuffer2,INDICATOR_DATA);
   SetIndexLabel(0,"ADR");
   SetIndexLabel(1,"ADR1");
   SetIndexLabel(2,"ADR2");
//---
   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[])
  {
//---
   if((rates_total-prev_calculated-2)<=0)return(0);
   for(int i=rates_total-prev_calculated-2;i>=0;i--)
     {
      ADRBuffer1[i]=High[i];
      if(High[i]<ADRBuffer1[i+1])
      ADRBuffer1[i]=ADRBuffer1[i+1];
      ADRBuffer2[i]=Low[i];
      if(Low[i]>ADRBuffer2[i+1])
      ADRBuffer2[i]=ADRBuffer2[i+1];
     }
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
MakarFX:

ローが正常に描画される理由と修正方法を教えてください。

コードの全体像

コンストラクションの数は必ず宣言しなければならない。そして、prev_calculate == 0を条件に、バッファの初期化を0にして書き込んでみてください。

 
Alexey Viktorov:

建造物の数を申告することが義務付けられています。

これが何を意味するのか、残念ながら私にはよくわかりません。

Alexey Viktorov:

また、prev_calculate == 0を条件に、バッファの初期化をゼロで書いてみてください。

役に立たなかった(

 
MakarFX:

私は残念ながら、その意味を理解していません。

役に立たなかった(


if( prev_calculated == 0 ) {
   ADRBuffer1[rates_total-1] = High[rates_total-1];
   ADRBuffer2[rates_total-1] = Low[rates_total-1]
}

for(int i=rates_total-prev_calculated-2;i>=0;i--)
{
...
}
 
MakarFX:

私は残念ながら、その意味を理解していません。

役に立たなかった(

#property indicator_plots   3

デフォルトは1です。また、工事件数を公表しても解決しない場合は、選択肢Bに進みます。

 
PapaYozh:


ありがとうございます、助かりました...ちゃんとしてなかったです)))