MQL4

リペイントをなくすためのMQL4

前回、リペイントについてお伝えしたので、今回は起こってしまう原因や対策方法などについてお伝えします。

なくす・・・というか、そのインジがリペイントありきで作ってる可能性もあるので、使い方しっかり理解して上手に取り込みたいですネw

リペイントが起こってしまう原因例

前の記事にも少しだけ書いたのだけれど、リペイントが起こる主な原因は

  1. アローの消し忘れ
  2. MTFで下位足が確定してしまった後、上位足が水準から外れてしまった時

この二つだと思っています。

いわずもがな、①はナイ。

顔洗って出直してこいってやつです(笑)

これがリペイントインジ原因の一つ。

もう一つはMTFのケース。

これがちょっとややこしいんだけれど・・・伝えてみますネ。

MQLのコードの書き方は(人によって色々違っている部分もあるけれど)、チャート上に表示されているローソク足の本数分を、ドロップした最初1回だけ全部見て計算していきます。

その後、ティック更新の度に全ローソク足を見て不要な再計算をすると激重インジになってしまうため、最初に一度すべてを計算した後は最新足のみを見るコードを書くのが一般的な書き方。

 for(int i = limit; i >= 0; i– )

※limitの定義の仕方による

お気づきですか?

MTFの場合、下位足が確定した後でも上位足はまだ確定してませんよね?

最新足しか見ないコードの書き方だと、上位足の条件を確認しないので、出したアローを消せないコードになってしまっているのです。

なので、何も意識せずにMTFのコードを書いてしまうと、当たり前にリペイントが起こるインジになってしまうのです。

・・・伝わったかな(^ ^;

リペイントをなくす方法

ではどうしたらリペイントをしないようにできるのでしょう?

①の場合は、コードのフロー的に、例えばRSIで考えると

if( RSI_Now > RSI_High ){ SellSignal };
else if( RSI_Now < RSI_Low ){ Buy Signal };
else{ NoSignal };

かなり簡略化して書いているので、このままでは使えませんが・・・
3行目の意味合いのコードを書き加える。

又はこの条件を見る前に、一旦アローを消して条件を見る。

など、人によって表現方法は違ってくるけれど、1度出たアローを消したくない!という場合を除いては、どこかに「条件から外れたらアローを消す」コードを書いていれば大丈夫。

そしてMTFの場合。

最初1回だけ全部計算して、2回目以降は最新足のみ

というフローを

2回目以降は上位足の数値を計算するのに必要なローソク足の本数分を算出し、その分だけ遡ってループ

させるというフローにするのです。

まとめ:それでもリペイントはなくせない

上記の方法で「確定してたはずのアローが消える」という意味でのリペイントは無くなるのですが、例えば現行足条件のロジックだったり、MTFでの対策をした場合は上位足が確定するまでは、アローが出たり消えたりします。

これをリペイントと表現されるかたもいらっしゃるのだけれど、BOなどロジックである程度のスピードが求められる投資方法だとリペイントなしインジは遅くなってしまい、使えないロジックになる事もけっこうあります。

リペイントは悪!とするのではなく、ロジック的にできるだけ早い方がいい場合や、表示したり消えたりしてもいいと判断した場合は、それを理解した上でインジを作ったり、利用しましょう。


友だち追加

LINE登録者限定でBO勝率インジや
便利系インジ配布していきます。
またFXのインジも今後作成していく予定です。
LINE登録者には利益になるよう考えていきます!!