The GlobalVariableTemp() function creates a temporary global variable (that exists till the terminal is stopped). In a few years that I develop EAs on MQL5, I have never faced the need for such a variable. Moreover, the very concept of a temporary global variable contradicts the basic principle of their application — long-term data storage not affected by the terminal relaunches.
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
グローバル 変数の接頭辞で解決できる。
初心者には良い記事だ。
The GlobalVariableTemp() function creates a temporary global variable (that exists till the terminal is stopped). In a few years that I develop EAs on MQL5, I have never faced the need for such a variable. Moreover, the very concept of a temporary global variable contradicts the basic principle of their application — long-term data storage not affected by the terminal relaunches.
ターミナルのグローバル変数の使い方はそれだけではありません。異なるEAやインジケーター間の情報交換にも使えます。そのような場合、データをメモリ上にのみ保持し、ターミナルの再起動で保持しないようにすることも可能です。
ミューテックスの部分は非常に興味深いのですが、1つ質問と意見があります。
OnTick()関数の実行中にチャートからEAが削除され、Mutex_Release()関数が実行されないことがあります。
どのようにしてEAが削除され、Mutex_Release()関数が実行されないのでしょうか?通常の方法(チャートを閉じる、EAを削除する、ターミナルを閉じる)でチャートからEAを削除した場合、実行フローが停止することはありません。何か見落としているのでしょうか?
つまり、Mutex_Release() が実行されない唯一の方法は、「ハード」ストップ、電源やハードウェアの故障などです。
グローバル変数はストラテジーテスト中に機能しますか?
例えば、インジケータがGVに値を保存し、EAがそれを読み取る場合、Strategy Testerは シミュレーション中に時間通りに値を取得しますか?
ストラテジー・テスト中にグローバル変数は機能しますか?
例えば、インジケータがGVに値を保存し、EAがそれを読み取る場合、Strategy Testerは 時間通りにシミュレーション中に値を取得しますか?
はい。
"コンピュータの電源が突然切れると、グローバル変数が消えてしまう可能性がある"mt5 terminal bild 2361 を閉じた後、グローバル変数が 消えました。 GlobalVariablesFlush() は、2つの異なる MT5 ターミナルで実行されます。ナンセンスです。ターミナルは/portableキーで起動していますが、もしかしてこれが原因でしょうか?
手で作ってみたり、ターミナルを開いたり閉じたりしてみましたが、保存されているようです。自動最適化の結果をグローバルに書き込ませたが、これは非常に長いプロセスだ。つまり、それほど信頼できる保存方法ではないのだ。構造体を通してグローバル変数をファイルに書き込む手順を追加しなければならないだろう。
mt5 terminal bild 2361 を閉じた後、グローバル変数が 消えました。 GlobalVariablesFlush() は、2つの異なる MT5 ターミナルで実行されます。ナンセンスです。ターミナルは /portable キーで起動します。
手で作ってみたり、ターミナルを開いたり閉じたりしてみましたが、保存されているようです。自動最適化の結果をグローバルに書き込ませたが、これは非常に長いプロセスだ。 つまり、それほど信頼できる保存方法ではないのだ。構造体を通してグローバル変数をファイルに書き込む手順を追加しなければならないだろう。
ターミナルかテスターか?MT5では違います。
ターミナルですか、それともテスターですか?MT5では違いがあります。
ターミナルで。
一般的には以下の方法で解決しました。Expert Advisorの自動最適化を扱うクラスで、グローバル変数を作成する他に、各通貨ペアのファイルに同じデータを書き込んでいます(クラスは再計算のためだけに呼び出されるため、どのような場合でもデータを更新する必要があるため、予備ファイルはクラスを起動するたびに削除されます)。ファイルは通常のテキストファイルで、ファイル名は Expert Advisor の特定のインスタンス用にコード化されています。初期化中、EA はファイルから最適化データを読み込み、グローバル変数を 作成または更新する機能を呼び出します。
また、テスターはグローバル変数のインスタンスを独自に作成するため、ファイルをバックアップし、ストラテジーテスターで実行する際に使用することができるため便利です(ファイルは当然、ターミナルの共通フォルダにあります)。
こんにちは、ドミトリー、
あなたの記事が数年前のものであることは承知していますが、何か共有できればと思い、質問させていただきました!
Tempグローバル変数の使い道が見つからないとおっしゃっていますが、私はまさにそれを必要とするものを開発しています。 私は、グローバル変数を通してIO Completion Portハンドルを共有する方法を、特にクラッシュ時や通常の再起動時に実装しようと頭を悩ませていました。 私はWindows IO Completion Portsを使用したオーダー処理システムを設計しています。MQL5からWin32スレッドを作成できるため、IOCPサーバーを作成しながらスレッドプールを作成することはできません;
端末が再起動した場合、異常であろうとなかろうと、そのIOCPハンドルは端末の起動時に消えていてほしい。その方が実装がすっきりします。
グローバル変数の速度と信頼性はどうなのでしょうか?
素晴らしい記事をありがとう、
シェップ
新しい記事MQL5プログラミングの基礎:ターミナルのグローバル変数を 公開しました:
著者ドミトリー・フェドセーエフ