改めて前回の内容をおさらいをしておくと、
- Enum列挙型 は 自分でカスタマイズできるデータ型である
- Enum列挙型 は 整数型の1つである。
- Enum列挙型は定数リストを格納できるデータ型である。
- Enum列挙型の定数値は自身で自由に設定することもできる。
ということをお伝えしました。
今回は 構造体 というものについて解説していきたいと思います。
MQL4においては、構造体は「使うと便利なもの」ではありましたが、別に使わなくてもEAを作ることはできました。
しかし、MQL5 においては、構造体は発注やデータの取得などのEA制作の肝の部分にもろに関わってきますので、構造体を理解せずにEAを作ることは困難です。
裏を返せば、今回の講座記事で構造体に関する理解を深めれば、MQL5 でのEA作りにおける疑問点の多くを解決してくれる、と言っても過言ではありません。
順をおって、ゆっくりと学習していけば、そんな難しいものではありませんので、是非楽しみながら今回もリラックスして読んでいただければと思います。 ^^) _旦~~
※MQL5で自動売買プログラム作るにあたっては、MT5・メタエディターがお使いのパソコンにインストールされている必要があります。
もし、まだMT5のダウンロードが完了していない方は、
こちらからデモ口座の開設とMT5のダウンロード・インストールを完了して頂ければと思います。
構造体(structures)とは?
構造体も、Enum列挙型と同じく、複数のデータ型をリストとして持てる、自分でカスタマイズできるデータ型の1つです。
Enum列挙型と違うところは、Enum列挙型 は 整数型 の 定数しかリストとして持つことができないのに対して、構造体はどのタイプのデータ型 の 変数もリストとして持つことができます。
まずは、難しく考えず、
では構造体の作り方をみていきましょう。
※いろんな用語を「なんだっけ?」と忘れてしまった人向け↓
構造体の作り方
//「tradeSetting」という名前の構造体を作る。
struct tradeSetting
{
int slippage;
double price;
double stopLoss;
double takeProfit;
string comment;
};
構造体を作る記述は↑こんな感じになります。
- まず最初に struct というキーワードを記述。
- {}の中に必要なデータ型と変数名を記述していく。(単体の変数を作るときと同じように、1つの変数名の記述が終わったら、セミコロン(;)をつけます。この部分は、コンマで定数を区切って記述していくEnum列挙型と微妙に違うので注意)
- }の最後にもセミコロン(;)をつける。
以上の流れで記述していきます。
上記のサンプルコードの記述の意味は
「tradeSetting」という名前の構造体データ型を作り、
その中に
int型1つ、
double型3つ、
string型1つ、
の合計5つの変数(メンバー)を作った。
ということになります。
次は、この構造体をどうやって使うのか?
をみていきましょう。
構造体の使い方
構造体の使い方の基本は以下のようになります。↓
//「tradeSetting」という名前の構造体を作る。
struct tradeSetting
{
int slippage;
double price;
double stopLoss;
double takeProfit;
string comment;
};
void OnStart()
{
//構造体「tradeSetting」をデータ型にした構造体変数名(インスタンス)を「setting」にする
tradeSetting setting;
//構造体変数(インスタンス)「setting」内にある、変数値「slippage」に「20」を代入
setting.slippage=20;
//ログ出力
Print(setting.slippage);
}
OnStart関数内に、最初に作ったオリジナルの構造体データ型「tradeSetting」を記述し、この構造体変数(インスタンス)を「setting」としました。
※今回のサンプルコードで言うと、「setting」にあたる部分を インスタンスと言ったりします。インスタンスと言うのは”実体”という意味の英単語で、構造体や、後程出てくるクラスを使う際の変数名のようなものです。
構造体データ型「tradeSetting」を実際に利用させるために実体化させたものがインスタンス「setting」という訳です。
※インスタンスについては今後の講座記事第54回で再度詳しく解説しますので、もう少々お待ちください。
int型の「 slippage」、
double型の「 price」、double型の「 stopLoss」、double型の「 takeProfit」、
string型の「 comment」
という5つの変数を扱えるようになったわけです。
上記のサンプルコードでは、構造体の中の各個別変数のうち、int型の「slippage」に値「20」を代入しています。
※構造体の中の各個別変数(構造体の中の各変数のことを、よく「メンバ」といったりします)を呼び出すときには、構造体変数名(インスタンス)の後ろにドット(.)をつけて、その後に呼び出したい個別変数(メンバ)の名前を記述します。
//構造体変数(インスタンス)である「setting」内にある、変数値「slippage」に「2」を代入
setting.slippage=20;
この部分ですね↑
サンプルコードを実際にMQL5 Program Fileにしてチャートに挿入すると・・・
↑いかがでしょうか?
tradeSetting構造体を作り、settingインスタンスを生成した上で、メンバ変数slippageに「20」を代入する
以上の流れが確認できたかと思います。
動画を見てもらえるとわかりますが、インスタンスや各メンバには変数や関数と同じく、エディタのオートコンプリート機能が働くので、全部自分で入力しなくても、機能が提示する選択肢からメンバを選択することも可能です。
MQL5には定義済みの構造体(この記事の「構造体の作り方」項目で書いたような手順を、MQL5側で事前にやってくれており、構造体の名称や構造体内の個別変数(=メンバ)が出来上がっている構造体)
も多数用意されていています。
それらの定義済み構造体も頻繁に今後使っていくことになるでしょう。
(定義済み構造体についてはこの先の講座記事で取り上げていきます)
構造体の基本をここでしっかり押さえておきましょう。(*^^)v
※とりあえず構造体に関する基本的な知識はここまでで大丈夫です。というより、プログラミング初心者の方はこれだけでも結構大変だったと思います。ここでの構造体の知識を押さえておけば、この後の講座ででてくる「クラス」についても、恐れることは一切ありません。
お疲れ様でした<m(__)m>
その一方で、構造体に関してはもうすこしだけ補足したい事項もありましたので、
【超入門】MQL5 EA講座 第22.5回「構造体について補足」
という記事も用意しました。
余裕のある人だけ見てください。
「あ・・・もう無理(>_<)」
と思ったら速やかに次の
【超入門】MQL5 EA講座 第23回「タイプキャスト」【EAの作り方】
に移動してください。
22.5回と銘打っていますが番外編みたいなものです。<m(__)m>
【超入門】MQL5 EA講座 第21回「Enum列挙型」【EAの作り方】←
→【超入門】MQL5 EA講座 第23回「タイプキャスト」【EAの作り方】
・MqlTradeRequest構造体/MqlTradeResult構造体/MqlTick構造体/MqlRates構造体/MqlDateTime構造体/
コメント