MT4上で自在なEAを作るのに必要なプログラミング言語はMQL4です。
その自由度は高く、痒いところに手が届くような関数も存在し、MQL4で記述することができます。
今回紹介するのはprint関数です。
print関数とはどのようなものかを紹介し、その基本的な記述方法や引数、使い方について解説します。
これらを知れば、意外な場面でも役立つことの多いprint関数を理解できるでしょう。
目次
Print関数とは
print関数は、エキスパート画面にログの表示をするために必要な関数です。
エキスパート画面とは、MT4のメイン画面下に表示される情報を指します。
時間とメッセージが表示され、何年何月何日の何時何分何秒にどんな操作が行われたかといった情報が表示される画面です。
ここにはログと呼ばれる操作の履歴や様々な情報が表示されます。そして、MQL4のprint関数はエキスパート画面を表示させ、履歴などの情報をプリントするために必要な関数です。
より具体的な説明としては、ターミナル画面にあるエキスパートタブ(エキスパート画面)に任意で設定したデータをメッセージとして出力する関数と言えます。
つまり、print関数を使用しないとターミナル画面に欲しい情報が表示されないことを意味します。
そんなprint関数の基本的な書き方について、次の項目で解説しましょう。
Print関数の書き方
print関数の基本的な書き方は次のとおりです。
void Print(①, ...)
()内に表示させたい情報を記述することでターミナル画面に様々な情報が表示できます。
代表的な例として次のような表示が可能です。
- メッセージ
- 変数の値
- 文字と変数の値を合わせた表示
- 計算結果
- 計算式を含めた計算結果
まず、メッセージを表示させる記述例を紹介します。
Print("これは見本です。");
日本語で表示させることができるため、任意の文章を入力できます。
次に、変数の値を表示させる例として、変数aの値を表示させましょう。
Print(a);
3つ目は文字と変数の値(サンプルとして「a」)を合わせた表示です。次のような記述が可能です。
Print("aの値= ", a);
この場合、「aの値=」という表示と共に変数aの値が表示されます。
計算も可能で、次のような計算式を入力すると計算結果が表示されます。
Print(2 + 2);
これにより、ターミナル画面には計算結果の「4」が表示されます。
最後に、計算式と計算結果の「4」を表示します。
Print("2 + 2 = ", 2 + 2);
Print関数の戻り値
print関数には戻り値がありません。
これは他の一般的なMQL4の関数とは異なります。
Print関数の引数
print関数の引数は1個以上、64個以下の数を設定することができます。
void Print(①, ...)
引数にはargumentがあります。
これはカンマ(,)で区切られた複数の引数を渡すためのものです。
また、上記の…は最大で64個まで利用できる特徴があります。
記述例も紹介します。
void Print(
argument, // 最初の値
... // 他の値
);
Print関数の使い方
ここまで戻り値や引数について解説しましたが、理解しづらいと感じる方もいるかもしれません。
そこで、具体的なサンプルコードと出力方法について、print関数の使い方を解説します。
サンプルコード
まず、サンプルコードを紹介しましょう。
以下は、ターミナル画面に通貨名、売値、時間、そして青色で表示するサンプルコードです。
#property strict
void OnInit() {
string b = "C'0, 0, 255'"; // 青を10進数で表示したもの
Print("通貨ペア名:", Symbol(), " 売値:", Bid, " ローカル時間:", TimeLocal(), " カラー:", (color)b);
}
print関数自体はシンプルですが、引数()内の設定には様々なオプションがあり、応用が求められることもあります。
上記のサンプルコードで使用した引数をリストアップします。
- 通貨ペア名: Symbol()
- 売値: Bid ※買値を表示したい場合はAsk
- ローカル時間: TimeLocal() ※「現地時刻」の年、月、日、時、分、秒。グリニッジ標準時における値はgmtime()
- カラー: (color)b ※b(ブルー)を指定
Print関数の出力方法
次に、MQL4のPrint関数の出力方法について、ログ出力を例に解説します。
以下の例では、移動平均の期間を指定してターミナル画面に出力します。
input uint MAPeriod = 14; // 移動平均の期間
void OnTick() { Print("移動平均の期間=", IntegerToString(MAPeriod)); }
これにより、パラメーターで指定された移動平均の期間がログに出力されます。
重要なポイントは、print関数の前にOnTick関数を配置していることです。
「void OnTick()」はロウソク足が変動するたびに実行されるイベント関数であり、変動があった瞬間にprint関数で出力されます。
また、以下の方法による出力についても説明します。
- メタエディターでEA(エキスパートアドバイザー)を新規作成
- プログラムを入力
- コンパイル
- MT4上でバックテストを実行
MT4を起動し、新規作成から「エキスパートアドバイザー(EA)」を選択します。
EAの名前を任意に付けることができます。
EAファイルが作成されたら、プログラムコードを入力していきます。
以下は、変数aの値を「a」として表示するプログラムの例です。
int a = 0;
int OnInit() { Print("変数aの値は ", a, "です。");
return (INIT_SUCCEEDED);
}
ファイルをコンパイルし、MT4上でバックテストを実行すると出力されます。
Print関数で出力されたのデータ確認方法
最後に、print関数で出力されたデータの確認方法について解説します。
- 操作履歴タグでの確認方法
- ログファイルでの確認方法
操作履歴タグでの確認
まずは、操作履歴タブを使用した確認方法です。
MT4を起動し、操作履歴タブを選択します。
操作履歴タブを選択すると、print関数で出力されたデータが表示されます。
先ほどのプログラムの場合、以下のように表示されます。
2023.10.11.20:05:50.916 変数aの値は0です。※0は変数aの値
データは新しい順に表示されます。
ログファイルでの確認
print関数はログファイルにも出力することができます。
ログファイルでの確認方法は以下の手順です。
- MT4のフォルダを探します。
- ログファイルをダブルクリックします。
- メモ帳で表示されます。
まず、MT4がインストールされているフォルダにアクセスします。
MT4の「ファイル」から「データフォルダ」を選択します。
開いたフォルダの中に「tester」というフォルダがありますので、これをダブルクリックします。
「tester」フォルダ内には「logs」というフォルダがあります。
ログファイルはこのフォルダに保存されています。
ログファイルをダブルクリックすると、Windowsの場合はメモ帳が起動し、print関数のログデータが表示されます。
以上が基本的なデータの確認手順です。
コメントを残す