При написании индикатора, который использует краткую форму вызова функции OnCalculate(), можно упустить то обстоятельство, что индикатор может рассчитываться не только на ценовых данных, но и на данных другого индикатора (встроенного или пользовательского - не имеет значения). Вы хотите улучшить индикатор, чтобы он правильно считался не только на ценовых данных, но и значениях другого индикатора? В этой статье мы по шагам пройдем все необходимые этапы такой модификации и выведем дополнительные полезные правила для правильного написания индикатора.
エキスパートアドバイザーは、別のタイムフレームでインジケータを使用します。Expert Advisor のテストでは、インジケータから間違ったデータが表示されます。
EA自体はM5で、インジケータはH4で動作します。同じタイムフレーム(M5)で呼び出された指標は、正しい値を返します。
返される値は、インジケータの値と似ていますが、価格チャートウィンドウにインジケータが適用されたときに見える実際の値とは異なります。
何が問題なのか?
インジケータ呼び出しの コード例です。
考えられる原因
- 最初の14小節のルールが尊重されない場合: インジケータでhttps://www.mql5.com/ru/articles/15。
- 現在のTFとプリセットTFの間の相関が遵守されていない(例えば、別のTF上の極値の必要値を持つバーのシリアル番号は、おそらくプリセットと異なり、その結果、高値、安値などが全く異なる) - これらはすべて、指標の特定の実現に依存します。
- もしかしたら、前のティックの古いインジケータ値がバッファに残っていて、空の値でバッファを再初期化する必要があるかもしれません。ArrayInitialize(array,EMPTY_VALUE) です。
考えられる原因
- 最初の14本のバーのルールが守られていない場合: インジケータでhttps://www.mql5.com/ru/articles/15。
- 現在のTFとプリセットTFの間の相関は観察されない(例えば、別のTFの極値の必要値を持つバーのシリアル番号は、プリセットのものと異なる必要があり、その結果、高値、安値などが異なる) - これらはすべて、指標の特定の実装に依存する。
- もしかしたら、前のティックからの古い値がインジケータに残っていて、バッファを空の値で再初期化する必要があるかもしれません。ArrayInitialize(array,EMPTY_VALUE) です。
1. 価格チャート上のすべてのバーにインジケータが描画されます。
2.ここは何も問題ない。
3.役に立たなかった
リファレンスによると、日付/時刻はこのように表現することが許されているそうです。
D'12:00:00'
datetime 型の変数に値を代入しています。
コンパイル時に警告がポップアップします。
なぜ?
日付が指定されていないため、時刻12:00:00のみが指定されています。日付のスペルはコロンではなく、フルストップです。
リファレンスにはこう書かれている。
日付(年、月、日)、時間(時、分、秒)のいずれか、またはすべてを省略することができる。数値の範囲は 1970年1月1日から3000年12月31日までです。
例
D'2004.01.01 00:00' // 新年を迎えて
D'1980.07.19 12:30:27'
D'19.07.1980 12:30:27'
D'19.07.1980 12' //新年 D'1980.07.19 12:00:00' です。
D'01.01.2004' //同上 D'01.01.2004 00:00:00'
D'12:30:27' //D'[コンパイル日] 12:30:27' に相当する。
D' '//D''【コンパイル日】00:00:00'' に相当する。
それとも、私が誤解しているのでしょうか?
EA本体はM5で、インジケータはH4で動作しています。同じタイムフレーム(M5)で呼び出された指標は、正しい値を返します。
私は、2点目を主張し続けます。
あなた自身、同じTFで正しい値が返されると書いていますね。もちろん、異なるものでは、現在のTFでは期待できない値が返されます。
返される値は、インジケーターの値と似ていますが、インジケーターを価格チャートウィンドウに取り付けたときに見える実際の値とは異なります。
もし、インジケータが1つまたは別のTFに従って正しい値を返すことができても、例えばM5でH4で表示することができない場合、同じTFでないExpert Advisorと一緒に作業するときに、返された値から何を期待できるでしょうか。
リファレンスにはこう書かれている。
日付(年、月、日)、時間(時、分、秒)のいずれか、またはすべてを省略することができる。数値の範囲は 1970年1月1日から3000年12月31日までです。
例
D'2004.01.01 00:00' // 大晦日
D'1980.07.19 12:30:27'
D'19.07.1980 12:30:27'
D'19.07.1980 12' //新年 D'1980.07.19 12:00:00' です。
D'01.01.2004' //同上 D'01.01.2004 00:00:00'
D'12:30:27' //D'[コンパイル日] 12:30:27' に相当する。
D' '//D''【コンパイル日】00:00:00'' に相当する。
それとも、私が誤解しているのでしょうか?
はいはい、ちゃんと理解しましたよ、慌てていて注意してなかったです。
どうやら元々そういうものだったようで、その後キャンセルされ、証明書の訂正はされなかったようです。
とにかく、これはヘルプの不正確さなのか、バグなのか、疑問が残ります。
Urain:
...
とにかく、これはヘルプの不正確さなのか、バグなのか、疑問が残ります。
スクリプトの一例です。
そういうことなんです。ただ、コンパイル後に警告が出るのが嫌なんです))。もしかしたら、開発者の誰かがコメントしてくれるかもしれません。いずれにせよ、ヘルプの不正確さなのか、バグなのか、疑問は残りますね。
エキスパートアドバイザーは、別のタイムフレームでインジケータを使用します。Expert Advisor のテストでは、インジケータから間違ったデータが表示されます。
EA自体はM5で、インジケータはH4で動作します。同じタイムフレーム(M5)で呼び出された指標は、正しい値を返します。
返される値は、インジケータの値と似ていますが、価格チャートウィンドウにインジケータが適用されたときに見える実際の値とは異なります。
何が問題なのか?
インジケータ呼び出しの コード例です。
AS_SERIES フラグは、多次元配列および静的配列には設定できません。
トライ
または次のようになります。