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

 

MT5チャートに描画すると、ローソク足ではなく矢印が、チャートにずれたように任意の場所に配置される不具合が確認された




#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window

#property strict

#property indicator_buffers 1 
#property indicator_plots   1
 
#property indicator_label1  "Arrows" 
#property indicator_type1   DRAW_ARROW 
#property indicator_color1  clrGreen 
#property indicator_width1  1

double Buf_0[];

int OnInit()
  {

   SetIndexBuffer(0,Buf_0,INDICATOR_DATA);
   PlotIndexSetInteger(0,PLOT_ARROW,233);
   
   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[])
  {
   
   for (int i=0; i<rates_total; i++)
      {
   
      Buf_0[i]=iLow(_Symbol, _Period,i);
      }
   return(rates_total);
  }

 
psyman:

MT5チャートに描画すると、ローソク足ではなく矢印がチャートにずれたように任意の場所に配置される不具合を発見。




1.ALREADYのインジケータがローアレイになっている。適用する必要があります。

2.可視化を最高速度で実行する必要はありません。

3.コードはひどく不具合があります -すべてのティックに すべてのバーを通過するためです。

 
Vladimir Karputov:

1.インジケータはALREADYがLow配列です。適用してください。

2.ビジュアライゼーションを最高速度で実行する必要はありません。

3.コードはひどく不具合があります -すべてのティックに すべてのバーを通過するためです。

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[])
  {
   ArrayInitialize(Buf_0,EMPTY_VALUE);

   for (int i=0; i<rates_total; i++)
      {
   
      Buf_0[i]=iLow(_Symbol, _Period,i);
      }
   return(rates_total);
  }
 
Vladimir Karputov:

1.ALREADYのインジケータがローアレイになっている。適用してください。

2.ビジュアライゼーションを最高速度で実行する必要はありません。

3.コードはひどく不具合があります - すべてのティックに すべてのバーを通過するからです。

ここではコードを掲載せず、パースを簡略化するために最もシンプルなものを書きました。

何が問題なのか、最高速度のことがよくわからないのですが、詳しく教えてください。

 
Vitaly Muzichenko:

Vitaly、初期化がなぜかうまくいかない。PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0) と書いてみましたが、これもうまくいきません :(

 
psyman:

ここではコードを掲載せず、パースを簡略化するために最もシンプルなものを書きました。

何が悪いのか詳しく教えてくれ、最高速度が不明だ。

一歩ずつ修正し始める。例えば、まず修理する。

インジケータはすでに低配列になっています。適用する必要があります。

 
Buf_0[i]=iLow(_Symbol, _Period,i);

iLow は series true、Buf_0 は false、low[] も false として動作します。つまり、この場合の0番目の要素はrates_total-1(ミラーリングされたもの)になる

例えば、1枚を反転させる必要があります。

Buf_0[i]=iLow(_Symbol, _Period,rates_total-1-i);
 
psyman:

MT5チャートに描画すると、ローソク足ではなく矢印がチャートにずれたように任意の場所に配置される不具合を発見。



ピノキオのリンゴのなぞを知れば、この問題に必ず役立つはずです。私は詳しく覚えていないので、誰かが誤りなく再話するのを待つことにしよう。

 
Igor Zakharov:

iLow は series true、Buf_0 は false、low[] も false として動作します。つまり、この場合の0番目の要素はrates_total-1(ミラーリングされたもの)になる

例えば、1枚を反転させる必要があります。

これがインジケーターだ!OnCalculateには すでに配列があります。

                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[]

なぜiXXXXの関数をインジケータに詰め込む必要があるのか?

 
Vladimir Karputov:

これがインジケーターだ!OnCalculateはすでに配列を持っています。

なぜ、iXXXXXXの関数をインジケータに入れるのですか?

どうすればいいのでしょうか?質問者がiLow()を使ったということは、それが必要だということです。もしかしたら、知覚しやすいのかもしれないし、入力変数を通じて別の記号や時間枠に対応するつもりなのかもしれない(覚えていない、4つでコピーライトが あるのだろうか)。

追記:5に関する質問は四天王寺スレッドで行いました。見落としていました、悔やんでいます。でも、答えはやっぱり同じ。