English

MQL5の書き方(for MQL4デザイナー)

 

構造体の理解と作成方法

構造体

構造体(struct)は、異なるデータ型を一つの単位としてまとめ、管理するためのプログラム要素です。これを利用すると、コードが整然とし、読みやすくなります。構造体を一度定義すると、プログラム内で何度でも利用することができ、データの整合性を保つのに役立ちます。MQL5では、MqlTickやMqlDateTimeのような事前定義された構造体も提供されており、プログラマはこれらを利用してさまざまなタスクを簡単に行うことができます。また、OrderSend()関数に関連するパラメーターは構造体を用いて指定されるため、MQL5でコーディングするために構造体の理解は必須となります。

MQL5には多くの列挙型が定義されており、
有名なものでは時間軸を表す'PERIOD_M1'や色を示す'clrRed'などがあります。
また、新たに列挙型を作成することも可能です。

構造体の宣言と利用

構造体の定義

struct 構造体名 {
データ型① メンバー①;
データ型② メンバー②;
//…(必要に応じて他のメンバーを追加)

構造体を定義します。ここで、「データ型①」、「データ型②」はメンバー変数のデータ型を表し、「メンバー名①」、「メンバー名②」はそれぞれのメンバー変数の名前を表します。構造体内の各メンバーは異なるデータ型を持つことができ、それぞれのメンバー変数は独立しています。これにより、異なる種類のデータを一つの変数で管理することが可能となります。

使用例

//構造体の定義
struct Rate
{
double bid;
ulong vol;
};
//構造体変数の宣言
Rate USDJPY;
//値の取得
USDJPY.bid=iClose("USDJPY.ps01",PERIOD_CURRENT,0);
USDJPY.vol=iVolume("USDJPY.ps01",PERIOD_CURRENT,0);
//値の確認
Print("USDJPY bid: ",USDJPY.bid);// 147.455
Print("USDJPY vol: ",USDJPY.vol);// 22
//メモリのクリア
ZeroMemory(USDJPY);
//値の確認
Print("USDJPY bid: ",USDJPY.bid);//0.0
Print("USDJPY vol: ",USDJPY.vol);//0

解説
構造体の定義
Rateという名前の構造体を定義し、それにはbid(double型)とvol(ulong型)という二つのメンバー変数が含まれます。

構造体変数の宣言
Rate構造体型のUSDJPYという変数を宣言します。

値の代入
iClose()関数を用いて現在のバーの終値(bid価格)を取得し、USDJPY.bidに設定します。同様に、iVolume()関数を用いて現在のバーの取引量を取得し、USDJPY.volに設定します。

値の確認
代入した値をPrint()関数で出力して内容を確認します。現在のレート147.455とティックボリューム22が表示されます。

メモリのクリア
ZeroMemory関数を用いてUSDJPY構造体変数のメモリをクリアし、すべてのメンバー変数を初期値(0)にリセットします。

値の確認
クリアした値をPrint()関数で出力して内容を確認します。両方とも0が表示されます。

定義済み構造体
MQL5には定義済みの構造体があります。日付と時刻に関する構造体MqlDateTimeの使用と値の代入例を解説します。

MqlDateTimeのメンバー

struct MqlDateTime
{
int year; // 年
int mon; // 月
int day; // 日
int hour; // 時間
int min; // 分
int sec; // 秒
int day_of_week; // 曜日(月曜: 1~土曜: 6 )
int day_of_year; // 年の経過日数
};

使用例

//構造体変数の宣言
MqlDateTime Now;
//構造体変数に現在の時刻を代入
TimeCurrent(Now);
//値の確認
Print(Now.sec);

解説
構造体変数の宣言
MqlDateTime型の新しい変数Nowを宣言しています。この変数は後で現在の日時を保持するために使用します。

//構造体変数に現在の時刻を代入
TimeCurrent()関数は現在のサーバー時間を取得し、それをNow変数に代入しています。この関数は、引数として提供されたMqlDateTime型の変数に日時情報を設定します。
値の確認
最後に、Print()関数を使用してNow変数のsecメンバー(現在の秒数)を表示しています。

構造体を使うことで、異なるデータ型を一つの単位として効率的にまとめ、管理することができます。これにより、コードの整理とデータの整合性が保たれ、プログラムの信頼性と可読性が向上します。MQL5でコーディングするには構造体の理解が不可欠です。構造体を積極的に使用し理解を深めることで理論だけでなく、実用的な適用方法を習得してください。

 

執筆者
林貴晴

林 貴晴(AMSER株式会社代表取締役)

内資系薬品会社で約10年勤務の後、
外資系製薬会社(現IQVIA及びGSK)で合計約10年を勤務
その後EA AMSERを開発し、その成績を評価され、株式会社ゴゴジャンの部長として抜擢。
現在はAMSER株式会社代表取締役、株式会社トリロジー他で役員を兼任。