完成したバーと現在のバーで指標値が異なる

同僚、

同じmq4コードを持つ2つのインディケータがチャート上で異なる絵を作り出す理由を教えてください。もっと正確に言えば、2本の線(1本はリアルタイムで描かれ、もう1本は完成したバーを計算することによって作られる)のための指標開発の方法論は同じでしょうか?これが私が持っているスクリーンショットです。

dev.webie.ru.fox.mtw.ru/.chucha/trading/JMA-unsync.png

アクアライン – この指標は2日間実行されていて、2日前からドロップされて変更されずに残った。そのプロパティを更新したり、パラメータを変更したり、再コンパイルしたりしなかったので、アルゴリズムを中断する理由はありませんでした。紫色の線は同じ指標(コピー)ですが、今はチャートにドロップされています。 2行が異なり始めるのは、Aqua JMAがすべての受信ティック でMT4からstart()コールバックを受信し始めた瞬間です。

所見:単純な指標からの線には違いがありません(移動平均など)。気象庁の路線は違います。 RSXのように、10小節前に入ったティックに応じて行をずっと後ろに変え、飛び回り始めるような「独特の」開発がいくつかあります。そしてどのように修正すればよいのか理解できません。

問題の再現方法:

1.指標のコードをダウンロードし、MT4用のよく知られているフォルダーにJMA.mq4として置きます。
www.abysse.co.jp/mt4/indicators/JMA [i].mq4
(またはこちらhttp://www.abysse.co.jp/mt4/indicator_name_j.html >> "JMA square_bracket i square_bracket.mq4")

2.この指標のコピーを作成し、このコピーにJMA2.mq4という名前を付けます。

3.新しいチャートを作成する(すべて削除してきれいにする)には、チャートにJMA.mq4をドロップします。

4. 2日待って、同じチャートにJMA2.mq4 をドロップします。

違いを見てください。

6.あなたはどんなエキスパートアドバイザーのためにも最適化を始めることができます(目盛りのモデル化による視覚的テスト)。テストを開始し、一時停止し、最初のJMAをドロップし、一時停止を解除し、20小節を表示させ、もう一度一時停止し、2番目のJMAをドロップします。

私は、「現実のバーと完成した過去のバーとで引かれた線が変わらないようにするには、どうすればインジケーターを作成すればよいのでしょうか?」という私の質問に対する答えを考えます。ここにどこかにある必要があります。

1. MT4は時々割り込んでチャート上に「更新待ち」をアナウンスするので、インディケーターメソッドの呼び出しで正確に何が起こるかは文書化されていません。 MT4はinit()を呼び出しますか? MT4はstart()を呼び出しますか?いつ? MT4はstart()をすべての小節に対して1回呼び出すのですか、それとも "update"のために変更された各小節に対して個別にstart ()を呼び出すのですか?その場合、解決策は次のとおりです。

2.指標はバーの完成中に収集されたボラティリティで開発されます。完成した小節の場合はstart()が1回呼び出されますが、現在の小節の場合はstart()が入ってくるティックごとに呼び出されます(引用符の変更)。そのため、ある時点で、完了していないbarに対して複数のstart()が呼び出されてグリッチが発生したため、どこかに余分なものが収集されます。その場合の解決策はこちらです。

ご提案ありがとうございます。


ほとんどの指標は状態変数を維持しません。現在の値は、前後のバーにのみ依存します。

気象庁には状態変数があります。ダニの順番はそれらに影響します。新しいインディケータには順序がありません、それはOHLCだけを知っています。最終的には新しいものが古いものに収束しますが、それには時間がかかります。

違いが見られたら、右クリック/更新するか、時間枠を変更して元に戻します。それから、両 方とも同じになります。


WHRoederありがとう、答えがそれほど単純だったかどうか私は尋ねないでしょう:)
さて、私は自分がポジションを開くかどうかを決める前に画面をクリックすることができます。
しかし、Expert Adviser内でJMAを使用するのは魅力的ではありませんか?… Expert Adviser内からインジケーター値を更新する方法は?
この場合、私はそれが手動の更新なしでそれが同じ行/値@バーを表示するようにするために状態依存のインディケータの外観/チェック/変更に必要な方法を必要とします。
または、常に同じことを示すインジケーターの書き方 – 最初からどの変数またはどのような種類のアルゴリズムを避けるべきか。

各バーの最初の目盛りで、出力バッファに一度だけ値を入れるインディケータを開発しました(サンプルが必要ですか?…)。
それでも、問題は存在し、変数ウォッチウィンドウには1つの値が表示され、EAからの出力 には同じインジケータの他の値が表示されます。
EAではインディケータがゼロ状態からインスタンス化され、init() – start()呼び出しの順序が異なることを知っています。そのためインディケータ関数の呼び出しに関してMT4側から正確に何が起こるかを知る必要があります。これはMT4 APIの誤用や、誤ったインディケータ値の取得の最も一般的なケースです。

Roshさん、私の話が聞こえたら答えてください。




5996: https://www.mql5.com/en/forum/126223


Originally posted 2019-08-04 05:52:21.

Translate »