MT5ビルド1455
テスト用のインジケーターです。
#property indicator_buffers 0
#property indicator_plots 0
int OnInit(void) {return(INIT_SUCCEEDED);}
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 &TickVolume[],
const long &Volume[],
const int &Spread[]
) {
static int si_Tick = 0;
Print(++si_Tick, ": prev_calculated = ", prev_calculated);
return(rates_total);
}
1.チャート上にインジケーターを 表示させる
2.端子を閉じる
3. オープン端子
ログです。
2016.10.17 08:04:38.757 Test (USDJPY,M15) 2: prev_calculated = 100322
2016.10.17 08:04:39.060 Test (USDJPY,M15) 3: prev_calculated = 0
2016.10.17 08:04:39.837 Test (USDJPY,M15) 4: prev_calculated = 100322
2016.10.17 08:04:39.837 Test (USDJPY,M15) 5: prev_calculated = 100322
...
何か見落としているのか、それともprev_calculatedという変数を信用することができず、松葉杖をつかなければならないのか?
MT5ビルド1455
テスト用のインジケーターです。
#property indicator_buffers 0
#property indicator_plots 0
int OnInit(void) {return(INIT_SUCCEEDED);}
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 &TickVolume[],
const long &Volume[],
const int &Spread[]
) {
static int si_Tick = 0;
Print(++si_Tick, ": prev_calculated = ", prev_calculated);
return(rates_total);
}
1.チャート上にインジケーターを 表示させる
2.端子を閉じる
3. オープン端子
ログです。
2016.10.17 08:04:38.757 Test (USDJPY,M15) 2: prev_calculated = 100322
2016.10.17 08:04:39.060 Test (USDJPY,M15) 3: prev_calculated = 0
2016.10.17 08:04:39.837 Test (USDJPY,M15) 4: prev_calculated = 100322
2016.10.17 08:04:39.837 Test (USDJPY,M15) 5: prev_calculated = 100322
...
何か見落としているのか、それともprev_calculatedという変数を信用することができず、松葉杖をつかなければならないのか?
チェックサムが変更された場合、ヒストリーページングがなくても変数prev_calculatedは0にリセットできる(これはservicedeskからの大まかな回答です)。
なるほど、ありがとうございます。 だから、大工さんに...。
プログラマーの仕事は、このような事象をキャッチすることである
だから、私はプログラマーではないんです。私の仕事は違うんです。大工さん、そうですねー、『松葉杖をついて』、『イベントをキャッチしている』つもりになりますね。
そして、誇張ではなく、この変数の明言された目的があるからです。
その目的に加え、履歴の変更フラグにもなるはずで、さらに他のいくつかの変更も追跡するはずです。これらはすべて便利ですが、直接の目的である「前の呼び出しの間に処理されたバー」の数 - prev_calculatedを表示するためには使用できません。
だから、私はプログラマーではないんです。私の仕事は違うんです。大工さん、そうですねー、『松葉杖をついて』、『イベントをキャッチしている』つもりになりますね。
そして、誇張ではなく、この変数の明言された目的があるからです。
その目的に加えて、履歴の中の変更フラグ、さらにその他の変更を把握するためのものだと思われます。これらはすべて便利ですが、直接の目的である「前の呼び出しで処理されたバー」の数を表示するために使うことはできません - prev_calculated
だから、私はプログラマーではないんです。私の仕事は違うんです。大工さん、そうですねー、『松葉杖をついて』、『イベントをキャッチしている』つもりになりますね。
そして、誇張ではなく、この変数の明言された目的があるからです。
その目的に加えて、履歴の中の変更フラグ、さらにその他の変更を把握するためのものだと思われます。これらはすべて便利ですが、直接の目的である「前の呼び出しで処理された」バーの数を表示するために使用することはできません - prev_calculated
prev_calculated=0 ならば、完全な再計算を行うべきことを意味する。この場合、すべての標準指標は完全に再計算されます。
何が明確でないのか?
チェックサムは歴史の中で変化してきたと言われています。チェックサムが変わった理由を調べるより、インジケータを再計算する方が安上がりだろう。
ドキュメントには、以下のように明示的に記載されています。
OnCalculate()の戻り値と2番目の入力パラメータprev_calculatedとの関連に注意してください。関数呼び出しの prev_calculated パラメータには 、前の呼び出しで OnCalculate() が 返した 値が格納 される。これにより、この関数の前回の呼び出し以降に変更されていないバーについて、計算を繰り返すことを避けるために、カスタム・インジケータを計算するための経済的なアルゴリズムが可能になります。
そのためには、通常、現在の関数呼び出しのバーの数を含む rates_total パラメータの値を返せば十分である。OnCalculate()の最後の呼び出し以降に価格データが変更された場合(より深いヒストリがポンピングされたか、ヒストリの空白が埋められた)、入力パラメータprev_calculatedの値はターミナルによってゼロに設定 されます。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索