記事"MQL5をプログラミングの基礎: ターミナルのグローバル変数"についてのディスカッション - ページ 3

 
Dmitry Fedoseev:
グローバル 変数の接頭辞で解決できる。
接頭辞によって解決することはできますが、いい解決策とは言えません :-( ユニークな接頭辞を生成するという問題があり、F3による変数のレビューではめちゃくちゃです...本当に変数には名前空間が欠けています。DC、account、account、chart...から接頭辞を生成しなければならず、名前の長さには制限があることを忘れてはならない。)
 

初心者には良い記事だ。

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は シミュレーション中に時間通りに値を取得しますか?

 
Admiral Thrawn:

ストラテジー・テスト中にグローバル変数は機能しますか?

例えば、インジケータがGVに値を保存し、EAがそれを読み取る場合、Strategy Testerは 時間通りにシミュレーション中に値を取得しますか?

はい。

 
"コンピュータの電源が突然切れると、グローバル変数が消えてしまう可能性がある"

mt5 terminal bild 2361 を閉じた後、グローバル変数が 消えました。 GlobalVariablesFlush() は、2つの異なる MT5 ターミナルで実行されます。ナンセンスです。ターミナルは/portableキーで起動していますが、もしかしてこれが原因でしょうか?

手で作ってみたり、ターミナルを開いたり閉じたりしてみましたが、保存されているようです。自動最適化の結果をグローバルに書き込ませたが、これは非常に長いプロセスだ。つまり、それほど信頼できる保存方法ではないのだ。構造体を通してグローバル変数をファイルに書き込む手順を追加しなければならないだろう。

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
 
Konstantin Efremov:

mt5 terminal bild 2361 を閉じた後、グローバル変数が 消えました。 GlobalVariablesFlush() は、2つの異なる MT5 ターミナルで実行されます。ナンセンスです。ターミナルは /portable キーで起動します。

手で作ってみたり、ターミナルを開いたり閉じたりしてみましたが、保存されているようです。自動最適化の結果をグローバルに書き込ませたが、これは非常に長いプロセスだ。 つまり、それほど信頼できる保存方法ではないのだ。構造体を通してグローバル変数をファイルに書き込む手順を追加しなければならないだろう。

ターミナルかテスターか?MT5では違います。

 
Dmitry Fedoseev:

ターミナルですか、それともテスターですか?MT5では違いがあります。

ターミナルで。

一般的には以下の方法で解決しました。Expert Advisorの自動最適化を扱うクラスで、グローバル変数を作成する他に、各通貨ペアのファイルに同じデータを書き込んでいます(クラスは再計算のためだけに呼び出されるため、どのような場合でもデータを更新する必要があるため、予備ファイルはクラスを起動するたびに削除されます)。ファイルは通常のテキストファイルで、ファイル名は Expert Advisor の特定のインスタンス用にコード化されています。初期化中、EA はファイルから最適化データを読み込み、グローバル変数を 作成または更新する機能を呼び出します。

また、テスターはグローバル変数のインスタンスを独自に作成するため、ファイルをバックアップし、ストラテジーテスターで実行する際に使用することができるため便利です(ファイルは当然、ターミナルの共通フォルダにあります)。

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
 
私はそれをすべて読んだ、それは素晴らしい利点ですが、最後の部分は少し複雑です、一時的な変数はまだ有用である私はEAの取引パネルを持っている、パネルはトレイリングストップ機能を開くためのボタンを含む、一時的な変数は、変数の値を記憶することができ、その後、私は元のボタンのステータスを取得し、それを再描画することができますサイクルを切り替える あなたの記事に感謝します!
 

こんにちは、ドミトリー、

あなたの記事が数年前のものであることは承知していますが、何か共有できればと思い、質問させていただきました!

Tempグローバル変数の使い道が見つからないとおっしゃっていますが、私はまさにそれを必要とするものを開発しています。 私は、グローバル変数を通してIO Completion Portハンドルを共有する方法を、特にクラッシュ時や通常の再起動時に実装しようと頭を悩ませていました。 私はWindows IO Completion Portsを使用したオーダー処理システムを設計しています。MQL5からWin32スレッドを作成できるため、IOCPサーバーを作成しながらスレッドプールを作成することはできません;

  1. IOCPサーバーを作成し、スレッドを作成する代わりに、IOCPハンドルをグローバルVarに保存します。
  2. その後、ワーカースレッドとして動作する他のサービスを少なくとも2つ開き、グローバル変数からIOCPハンドルを読み取り、IOCPに登録する。

端末が再起動した場合、異常であろうとなかろうと、そのIOCPハンドルは端末の起動時に消えていてほしい。その方が実装がすっきりします。

グローバル変数の速度と信頼性はどうなのでしょうか?

素晴らしい記事をありがとう、

シェップ


 
これは、PythonとMLQ EAの間でデータを送受信するためにPython統合に必要なものです。そうすればPythonで開発したEAをStrategy Testerでテストすることができます。