MT4からMT5への乗り換えの問題。正確には、MT5で一部のアルゴリズムをerrなしで実行できないことです。 - ページ 4

 
Eugeni Neumoin:

OnCalculate()に問題はありません。GUI全体はOnChartEvent()を通して動作します。GUIには400以上のボタンが用意されています。一部のボタンは、タイムスリップと一切連動しません。関数OnCalculate()とOnTrade()は次のティックまで待つことができます。これは心理的に目立たない。そして、OnChartEvent()ではもっと複雑です。ここには人間の心理が絡んでいます。 番組利用者がGUIボタンを押す。そして、彼/彼女は自分の望む反応を得ることができません。相手の反応は?そのひとつが、同じボタンをもう一度押すという反応です。多くのボタンを2度押しすると、そのボタンでつながっている機能が無効化されるようにしました。他の方法でボタンアクションを無効にする、という提案を期待します。しかし、MT4用の同じプログラムがあります。そこでは正常に動作しています。MT4はグラフィカル・インターフェースとのインタラクションのアルゴリズムが1つであるのに対し、MT5は異なるものであることがわかります。このような同一プログラムの動作は、リジェクトの原因になるだけです。

MT5に翻訳するときに似たようなことをしました - OnChartEvent()からの終了を有効にしたのです。嘘はつきたくない、だからGUIは死んでいく一方だったんだ。

また、私の場合、OnTimer()でのタイムスリリーの参照は5分後に発生します。2分後にやります。どうなるのか確認してみます。

Artem、あなたの提案は以前にも役に立ちました。

いいえ、グラフィックスを扱うロジックを変更する提案はありません。

  1. 時系列への適用は少なくとも2分に1回行う必要があります - この場合のみ、常に最新であることが保証されます。I.e.、マルチで...のインジケータを使用する場合、この部分はデフォルトでなければなりません。
  2. MQL5では、MQL4とは異なり、一度に更新できるすべてのグラフィカル・オブジェクトで必要な操作を行った後に、CartRedraw()を使用してチャートの変更を表示する必要があります - 1つの要素を変更するたびにチャートを更新する必要はありません。自分のことを理解してもらえたかどうか。例えば、ユーザがボタンをクリックし、追加で何かを描画する場合、例えば複数の要素からなるテーブルオブジェクトを描画する場合、すべての要素を描画し、その後にグラフを一旦更新する必要があります。単一オブジェクトの各描画要素の後に更新しないこと。
    ユーザーがボタンをクリックしても何も表示されない場合、実際にはすべてがそこにあり、グラフだけがまだ更新されていない可能性があります(ティックが到着したときにのみ更新されます)。
 
Artyom Trishkin:

クロスプラットフォームのコードは同じように動作するはずです。

ただ一つ改善点を挙げるとすれば、必要な時系列がまだない場合、そのデータでグラフを作成することができないことです。この場合、データが利用可能になる瞬間を待ち、その間はボタンを非アクティブにする必要があります。例えば、Windowsのインターフェースと同様に、ボタンに対して何もアクションがない場合は、ボタンをグレーアウトさせるようにします。このロジックは両プラットフォームに存在させることができるので、コードに差はありません。

 

OnChartEvent()などの大きなブロックを抜けるときにChartRedraw()がトリガーされるようにしているのですが。だから、この機能には何の問題もない。

ツールチップについて。数字や記号をクリックすれば、すべてがうまくいくことを示す指標のようなものです。

数字や記号をクリックした場合は、OnChartEvent() -CHARTEVENT_OBJECT_CLICK のいずれかの要素がトリガーされる必要があります。 ツールチップが表示されない場合はトリガーされません。なぜそうなるのか、その理由を知りたい。 CHARTEVENT_OBJECT_CLICK動作 しない。

そして、タイムスリップへのアクセスも注視していきたいと思います。

 
Eugeni Neumoin:

OnChartEvent()などの大きなブロックを抜けるときにChartRedraw()がトリガーされるようにしているのですが。だから、この機能には何の問題もない。

ツールチップについて。数字や記号をクリックすれば、すべてがうまくいくことを示す指標のようなものです。

数字や記号をクリックすると、OnChartEvent() -CHARTEVENT_OBJECT_CLICK のいずれかの要素がトリガーされる必要があります。 ツールチップが表示されない場合はトリガーされません。なぜそうなるのか、その理由を知りたい。 CHARTEVENT_OBJECT_CLICK動作 しない。

そして、タイムスリップへのアクセスも注視していきたいと思います。

グラフイベントハンドラの最初のほうで、sparamパラメータを記録してください。 オブジェクトのクリックイベント(id==CHARTEVENT_OBJECT_CLICK)があれば、ログにsparamを出力するように、出力を制限し始めます。そうして、少しずつ原因に迫っていくのです。

 
Artyom Trishkin:

グラフイベントハンドラの最初のほうで、sparamパラメータを記録してください。オブジェクトのクリックイベント(id==CHARTEVENT_OBJECT_CLICK)があれば、ログにsparamを出力するように制限を開始します。そうして、少しずつ原因に迫っていくのです。

それこそ、全部デバッグしたんですよ。そして、コードではOnChartEvent() のデバッグ用のビットが常にコメント付きで存在します。 でも、ありがとうございます。そのようにさせていただきます。原因を探ってみる。
 

番号と記号のバインディングの問題を避けるために、OBJPROP_ZORDERで番号と記号の優先度を上げる必要があります。

それがなくてもMT4で動作します。ただ、念のためMT4で優先度を上げておきました。しかも、数字よりも波動記号の優先順位が高かった。

整理してみました。

私は2分後にすべての時系列を変更しようとしています。このタスクの最もスムーズなパフォーマンスのために、さまざまなバリエーションを選択しています。

プロセスが開始されました...

 
Eugeni Neumoin:

番号と記号のバインディングの問題を避けるために、OBJPROP_ZORDERで番号と記号の優先度を上げる必要があります。

それがなくてもMT4で動作します。ただ、念のためMT4で優先度を上げておきました。しかも、数字よりも波動記号の優先順位が高かった。

整理してみました。

私は2分後にすべての時系列を変更しようとしています。このタスクの最もスムーズなパフォーマンスのために、さまざまなバリエーションを選択しています。

プロセスが開始されました...

滑らかさは関係ありません :)
ただ、少なくとも2分に1回はすべての動作中のTFにアクセスする必要があります。だいたい90秒に1回のペースでアクセスしています。トレーダーによってアクセスする時間を分散させ、一度に引っ張らないようにすることができます。しかし、それぞれ最低でも2分に1回はアクセスする必要があります。
 
Artyom Trishkin:
ここでは、滑らかさはオプションではありません :)
少なくとも2分に1回、すべての動作中のCFにアクセスすればよいのです。だいたい90秒に1回は電話しています。トラフィックごとにアクセス時間を分散させることができるので、一度に全部を引っ張る必要はありません。しかし、それぞれ最低でも2分に1回はアクセスする必要があります。

ブレーキがある。

でも、今あるもので我慢するしかないんです。

巨大さを抱くことは不可能である)。

 
Artyom Trishkin:
ここでは、滑らかさはオプションではありません :)
少なくとも2分に1回、すべての動作中のCFにアクセスすればよいのです。だいたい90秒に1回は電話しています。トラフィックごとにアクセス時間を分散させることができるので、一度に全部を引っ張る必要はありません。しかし、それぞれ最低でも2分に1回はアクセスする必要があります。

分離することは不可能です。少なくとも1つの取引が更新されていない場合、インジケータはいくつかのグラフィカルな構造を不正確にすることがあります。

一方、OnCalculateとOnChartEventの前に、タイムスリリーの有無を確認しました。提案したとおりです。

時系列の更新や時系列の有無の確認で、動作が極端に遅くなる。

まだ時系列アクセスが中断される。最初の投稿でブランチを作成するときに言ったように。このことから、プログラムによる時系列の更新が必要であることが確認された。

これが最初の1枚です。

2番目。なぜ、すべての開発者が、わざわざ時系列へのアクセスを整理しなければならないのでしょうか?

なぜ、この手間を省くような「仕組み」が追加されていないのでしょうか?

この手間を必要とする人がいれば、今あるものを使うことを誰も禁じたりはしない。また、時系列への普遍的な代替アクセスがあってもいいと思う人には、そうしたアクセスは開発者が作った方がいいと思います。

MT4からMT5へのプログラムの翻訳を依頼されたことが何度かあります。してきました。翻訳には満足していない。でも、ダウンロードした以上、文句はない。もしかしたら、満足しているのかもしれません。それはどうでしょう。

私の方からも補足させていただきます。時系列へのアクセスを最適化する実験をやめてしまった。これは非生産的な時間の使い方です。もっと面白いことがあるはずだ。興味のある方は、MT5で作業してみましょう。MT5で噛み砕けるのは気配値履歴だけ。NSの指導に使用する。

 
Eugeni Neumoin:

一方、OnCalculate関数とOnChartEvent関数の前に、時系列の可用性チェックを行いました。提案したとおりです。

時系列の更新や時系列の有無の確認で、動作が重くなる。

1分半ごとにタイマーをかけて行うというのが提案されました。すべてのティックの 前ではなく、また確実にチャートイベントの前でもありません。

MT5でのタイムスケールへのアクセスは、本当に理想的ではありません。しかし、言い訳を探すのではなく、問題を解決する必要があるのなら、それは可能なのです。