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

 

新しい記事 MQL5 プログラミングの基礎:ターミナルのグローバル変数 はパブリッシュされました:

本稿はターミナルのグローバル変数の処理を助けるオブジェクト作成のための MQL5 言語オブジェクト指向機能を明らかにします。実用例として私はプログラム段階実装のためのコントロールポイントとしてグローバル変数が使用される場合を考察します。

MQL4/5 環境では、興味深いインスツルメント-クライアントターミナルのグローバル変数 、があります。それによりターミナルの全プログラムについて共有データストレージ領域を作成することができます。その上、この領域のライフタイムはテーミナルのクローズを停止させることはありません。本稿ではオブジェクト指向プログラミングツールによってターミナルのグローバル変数とは何であるのか明確な考えを得ます。

本稿では以降、特に指定のない限り、クライアントターミナルのグローバル変数を『グローバル変数』と呼びます。


1. グローバル変数、関数

プログラマーとしての視点からは、グローバル変数はトレーディングターミナルの動作中プログラムすべてにとって使用可能な名前付メモリ領域を言いま す。初心者のプログラマーは同時に動作している複数ターミナルがある場合、それらはすべてクローバル関数のために独自の独立したメモリスペースを有しま す。それらは重なることはありません。

言語開発者はドキュメンテーションで、グローバル変数を処理するためには11個の関数が使用される、と特定します。

理論は MQL4 教本の『グローバル変数』 セクションにあります。

次のセクションで私は、セットのタスクを実装するためにオブジェクト指向プログラミングインスツルメントを使用します。

図8 フラグシーケンス処理パターン

作者: Dennis Kirichenko

 

機能について 理解を深めようと、この記事を読みました。グローバル変数の作成や変更は取引環境にどのような影響を与えるのでしょうか?

グローバル変数の数値が何を表しているのか説明できますか?

しばらく前からターミナルのグローバル変数について調べ、理解しようとしていますが、まだその使い方や効果を理解していません。可能であれば、グローバル変数の作成が私の取引口座の残高にどのようにプラスの結果をもたらすか、簡単な例を教えていただけませんか?

ありがとうございました。

よろしくお願いします、

デール

 
### 前提 - 実装したいこと

まず使用するライブラリファイル2を下記リンクよりご確認ください。



課題

MetaQuotes 社が提供する為替取引ツールである MT4 / MT5 において、外部 txt ファイルのグローバル変数(通称グローバル変数)を読み書きしたい。


状態:

状態:下記参考ページに記載されているCGlobalVar.mqhクラスとCGlobalVarList.mqhクラスを使って実装したい。

(具体的には、CGLobalVarListクラスのSave()/Load()メソッドを使ってグローバル変数の書き込み/読み込みを行います)

基本的にWindows API(HANDLE CeateFile W ()など)は使用しない。Д.).


操作ファイルの格納位置:

操作先ファイルのデフォルト位置は、このクラスの指定に従う。

/ ファイル

または

FileOpen()の引数にFILE_COMMONを指定した場合に格納される。

C:\ を指定した場合に格納されます。

のいずれか。


作成したファイル:

実験用サンプルとして、簡単なスクリプトファイルを2つ作成。

WriteGlobalParameters.mq4。

и

ReadGlobalParameters.mq4。

によって作成された。


備考

グローバル変数を他の端末と共有することだけが目的であれば、共有メモリを使う方法などを考えることができます。ただし、今回は外部 txt ファイルを使用する方法のみを考えてください。


② エクスポート側のファイル(WriteGlobalParamaeters.mq 4)は、MQLの組み込み関数GlobalVariablesTotal()、GlobalVariableName()、GlobalVariableGet()、GlobalVariableTime()を使い、Save(HANDLE)は使わず WriteFile()関数を使って書きます(↓)。

For (int i = GlobalVariablesTotal () - 1; i> = 0; i -){

string gName = GlobalVariableName (i);

if (this.CheckGlobalVar (gName)) continue;

double gValue = GlobalVariableGet (gName);

datetime gTime = GlobalVariableTime (gName);

WriteFile (hFile, gName, gValue, gTime);

}, 変数のリストを指定されたディレクトリのtxtファイルに書き込むことは可能でした。

しかし、上記のGlobalVariable関数群の場合、書き出すことはできても、グローバルリード変数やターミナル変数のリストに追加することができないため、そのままになっています。


#### エラーメッセージ

WriteGlobalParameters.mq 4 Side:

2018.05.26 22:34:45.283 WriteGlobalParameters EURUSD、M1:uninit理由0

2018.05.26 22: 34: 45.283 WriteGlobalParameters EURUSD, M1: ファイル保存エラー

2018.05.26 22: 34: 45.282 WriteGlobalParameters EURUSD, M1: ポインタ作成エラー


ReadGlobalParameters.mq 4 Side:

2018.05.26 22: 43: 08.397 ReadGlobalParameters EURUSD, M1: 不明確な理由 0

2018.05.26 22:43:08.397 ReadGlobalParameters EURUSD、M1:ポインタ作成エラー


* 上記のエラーメッセージから

ポインタの仕様の不備とファイル操作の不備により、意図した操作が失敗していることは明らかです、

以下のコードのどこに問題があるのか不明なので、この点について(不明瞭な理由0も含めて)お話ししたいと思います。


MQL4/MQL5.

WriteGlobalParameters.mq4>。

//+------------------------------------------------------------------+

//| WriteGlobalParameters.mq4 |.

//| Copyright 2018, MetaQuotes Software Corp.

//|https://www.mql5.com|

//+------------------------------------------------------------------+

#プロパティ copyright "Copyright 2018, MetaQuotes Software Corp."

#property link"https://www.mql5.com"

#property バージョン "1.00"

#include <ArraysList.mqh>

<CGlobalVar.mqh> をインクルードする。

<CGlobalVarList.mqh> をインクルードする。

//+------------------------------------------------------------------+

//| スクリプトプログラム開始関数

//+------------------------------------------------------------------+

void OnStart(){

//ファイル名

string FileName="Write";

string FileType="txt";

string file=FileName+". "+FileType;


//ポインタ

CGlobalVarList *list = new CGlobalVarList;

if(list!=NULL){

Print("ポインタ作成エラー");

}


//ハンドル

int hFile;

hFile=FileOpen(file,FILE_WRITE|FILE_COMMON); //FILE_CSV|FILE_UNICODE


if(hFile>=0){

if(!list.Save(hFile)){

Print("ファイル保存エラー");

リストを削除します;

FileClose(hFile);

}

//閉じる

FileClose(hFile);

}

//ポインタを解放する

リストを削除します;

}

==========================================================================

ReadGlobalParameters.mq4> を参照してください。

//+------------------------------------------------------------------+

//| ReadGlobalParameters.mq4 |.

//| Copyright 2018, MetaQuotes Software Corp.

//|https://www.mql5.com|

//+------------------------------------------------------------------+

#プロパティ copyright "Copyright 2018, MetaQuotes Software Corp."

#property link"https://www.mql5.com"

#property バージョン "1.00"

#include <ArraysList.mqh>

<CGlobalVar.mqh> をインクルードする。

<CGlobalVarList.mqh> をインクルードする。

//+------------------------------------------------------------------+

//| スクリプトプログラム開始関数

//+------------------------------------------------------------------+

void OnStart(){

//ファイル名

string FileName="Read";

string FileType="txt";

string file=FileName+". "+FileType;


//ポインタ

CGlobalVarList *list = new CGlobalVarList;

if(list!=NULL){

Print("ポインタ作成エラー");

}


//ハンドル

int hFile;

hFile=FileOpen(file,FILE_READ|FILE_COMMON); //FILE_CSV|FILE_UNICODE


if(hFile>=0){

if(!list.Load(hFile)){

Print("ファイル・ロード・エラー");

リストを削除します;

FileClose(hFile);

}

//閉じる

FileClose(hFile);

}

//ポインタを解放する

リストを削除します;

}


### 試してみた

MT4を起動し、端末のグローバル変数リストに任意の名前と数値(ココでは簡単に0.0か1.0)を登録する。

(時間は登録時に自動で設定されるので設定しない)。


================================================== ===============

まず、Write GlobalParameters.mq4 側から---。


⓪ の設定で WriteGlobalParameters.mq4 をチャートに適用します。

→ 正常に動作すれば、上記で指定したディレクトリにファイルが作成され、グローバル変数情報を入力する必要があります。


ディレクトリ(C: ㊤User ㊤ Name ㊤ AppData ㊤ Roaming ㊤ MetaQuotes ㊤ Terminal ㊤ Common ㊤ Files ㊤)を確認、

指定した「Write.txt」が作成されましたが、ファイルサイズは0キロバイトです。

→ 開くと、当然、グローバル変数の名前も値も入力されていない。


================================================== ================

次はReadGlobalParameters.mq 4側 ---。


2.と同じディレクトリに任意の名前と数値のグローバル変数を読み込む "Read.txt "ファイルを作成しました。

(名前・数値・タイムスタンプを分割(不特定)と分割タブ(FileOpen()で"◆t "を指定)の2種類を作成しテストした))


④ ①と同様、ReadGlobalParameters.mq4をチャートに適用しても、上記エラーメッセージとターミナル上のグローバル変数リストのオープンも空でした。


================================================== ================

備考

念のため、FileOpen()関数にデフォルトで設定されているFILE_CSV、FILE_UNICODE、FILE_BIN、FILE_ANSIでも同様の実験を行いましたが、結果は変わりませんでした。

Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • www.mql5.com
The Synchronized Charts script allows comparing bars of different symbols or different periods of the same symbol. Attach the script to a chart and move bars or change the scale, all opened chart will move synchronously with the current one. The bars on different charts aligned to the border according to their open time. CreateGridOrdersTune A...
 

現在、 グローバル変数はダブルのみです。

key:valueのペアのような要素を持つCMapオブジェクトを使いたい。

あるいは、配列やリストを使うこともできます。 あるいは、配列やリストをグローバル変数として使う。


あるいは、メモリへのポインタを グローバル変数として 使う