OnCalculate()とStart()の違い。 今EAを作っているのですが、エラー…

[MT4] OnCalculate()とStart()の違い。

今EAを作っているのですが、エラーが無いのにバックテストで作動しません。

エキスパートアドバイザーにて、
Init()に指標バッファの割り当てを、
OnCalculate()にインジケーターバッファの計算とインジケーターの計算、売買条件及び執行処理 を書き込んでいるのですが、これでも問題ないですか?

ひょっとして、指標バッファの割り当てやインジケーターバッファの計算(BufFastMa[i]=iMA(….,i)など)の計算は「カスタムインジケーター」でinit(), OnCalculate()で行い、
それをエキスパートアドバイザにインクルードファイルと共に呼び出し、EAには売買条件と執行処理のみ書く、
としなければいけないのでしょうか?
詳しい方教えてください。

回答1

StartはInitと同じで、プログラムを入れた時の1回しか発動しません。
EAの場合は配列の要素数を指定しなければ、Out of Arrayというエラーが、エキスパートアドバイザーの操作履歴に出るとおもいます。
なのでArrayResizeという関数を使って、要素数を指定してください。この関数はググればすぐに使い方はわかります。
そして、基本的なことですが、バッファの宣言を関数内でした場合は、その関数内でしかつかえないのです。そのため、OnCalculateでバッファの計算をするならOnCalculate内で宣言する必要があります。EAならOnTickです。

Originally posted 2019-09-09 19:01:53.

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA


Translate »