【MQL5パラダイス 第3回】データをしまう魔法の箱!「変数」をマスターしてEAに記憶力を与えよう
みなさん、こんにちは。パイナップルです。
前回の「MQL5パラダイス」第2回では、MetaEditorを立ち上げて、MT5の画面に「こんにちは、MQL5!」というメッセージを表示させる小さなスクリプトを作りましたね。 無事に文字が表示されたとき、少しだけ「おっ!」と感動していただけたのではないでしょうか。あの小さな感動こそが、プログラミング学習を長続きさせる最大のモチベーションになります。ぜひ大切にしてくださいね。
さて、第3回となる今回のテーマは、プログラミングの世界で絶対に避けては通れない、そして最高に便利な仕組みである「変数(へんすう)」についてです。
「へんすう……なんだか中学校の数学を思い出して頭が痛くなってきた」
そんな風に身構えてしまった方も、どうぞご安心ください。MQL5における変数とは、難しい数式のことではありません。一言で言ってしまえば、「データを入れておく、名前のついた魔法の箱」のことなのです。
お気に入りのコーヒー(紅茶でもいいんですが)でも手元に置いて、リラックスしながらこの「箱」の秘密を紐解いていきましょう。
なぜEAには「魔法の箱」が必要なのか?
私たちが普段トレードをしているとき、頭の中では様々な数字を処理していますよね。 「現在のドル円の価格は150.50円だな」 「今回は自信があるから、ロット数は0.5にしよう」 「許容できるスリッページは30ポイントにしておこう」
自動売買プログラム(EA)があなたの代わりにトレードを行うためにも、これらと同じように「数字や文字を記憶しておく場所」が必要になります。
しかし、コンピューターは言われたことしかできません。「さっきのロット数、覚えてるよね?」と語りかけても、場所を指定してあげないとすぐに忘れてしまいます。 そこで登場するのが「変数」です。
「ロット数」という名前の箱を用意して、そこに「0.5」という数字を入れておく。 「現在の価格」という名前の箱を用意して、価格が動くたびに中身を入れ替える。
このように、状況に合わせて中身を出し入れできる箱(変数)を使うことで、EAは相場の変化に柔軟に対応できるようになるのです。まさに、EAに「記憶力」と「臨機応変さ」を与えるための魔法の箱ですね。
覚えおくべき4つの「箱の形(データ型)」
実はこの魔法の箱、何でもかんでも一つの箱に放り込めるわけではありません。入れるデータの種類に合わせて、「箱の形(データ型)」を決めてあげる必要があります。
液体を入れるならペットボトル、書類を入れるならファイルケースを選ぶように、MQL5でもデータに合った箱を選びます。FXのプログラムを作る上で、よく使う箱の形は以下の4つだけです。とりあえずはこれだけ覚えておけば十分ですよ!
- int(イント:整数) 小数点のない、スッキリとした数字を入れる箱です。「1」や「100」や「-50」などが入ります。 FXでの使い道: マジックナンバー(EAの識別番号)、スリッページ、移動平均線の期間(14日、20日など)
- double(ダブル:小数)
小数点を含む、細かい数字を入れる箱です。「150.235」や「0.01」などが入ります。
FXでの使い道: 通貨ペアの価格(レート)、エントリーするロット数など。為替の世界は小数が命なので、この
doubleは一番よく使う大黒柱です。 - string(ストリング:文字列) 文字や文章を入れる箱です。前回使った「"こんにちは"」もこの仲間です。 FXでの使い道: 通貨ペアの名前("USDJPY")、ログに出力するメッセージ、エラーの報告など。
- bool(ブール:真偽値) 「true(真=はい)」か「false(偽=いいえ)」の2種類しか入らない、ちょっと特殊な箱です。スイッチのON/OFFのようなものだと考えてください。 FXでの使い道: 「買いシグナルは出たか?(true/false)」「今日はトレードを許可するか?(true/false)」などの判定。
実際に「箱」を作って中身を入れてみよう
箱の種類が分かったところで、実際にMQL5で変数を作ってみましょう。 前回のように、新規スクリプトを作成して、以下のコードを書いてみます。
どのような動きをするのか、まずはコードをじっくり見てみましょう。
//+------------------------------------------------------------------+
//| Hello_MQL5.mq5 |
//| Copyright 2025, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
// 1. 箱(変数)を用意して、中身を入れる
int my_slippage = 30; // スリッページ(整数)
double my_lot = 0.1; // ロット数(小数)
string my_symbol = "USDJPY"; // 通貨ペア名(文字列)
bool is_trading = true; // トレード許可(真偽値)
// 2. 箱の中身をPrint処理で出力してみる
Print("【現在の設定を確認します】");
Print("対象通貨ペア:", my_symbol);
Print("設定ロット数:", my_lot);
Print("スリッページ:", my_slippage);
}
//+------------------------------------------------------------------+
サンプルコードの解説
いかがでしょうか?なんとなく、何をしているか想像がつくのではないでしょうか。
変数を作る(専門用語で「宣言する」と言います)ときのルールは、とてもシンプルです。 「箱の形(型)」 + 「箱の名前」 = 「中身の値」; という順番で書くだけです。
例えば double my_lot = 0.1; という一文は、
「double(小数)を入れる my_lot という名前の箱を作り、その中に 0.1 という数字を入れなさい」
というMT5への命令になります。
箱の名前は、半角英数字であれば自分で好きな名前をつけることができます。my_lot でも apple_pie でも動きますが、後から見て「これは何を入れた箱だっけ?」とならないよう、中身が想像しやすい名前をつけるのが上達のコツです。
そして後半では、前回学んだ Print() 関数を使って、箱の中身をログに出力しています。
Print("設定ロット数:", my_lot); のように、カンマ(,)で区切ることで、普通の文字と箱の中身をドッキングさせて表示させることができるのです。
これをコンパイルしてMT5のチャートにポイッと投げ込むと、ツールボックスの「エキスパート」タブに、設定した数字や文字が綺麗に表示されるはずです。ぜひ、ご自身の手で数字を書き換えて、表示がどう変わるか実験してみてくださいね。
シンプルで堅牢なトレードと変数の深い関係
「わざわざ変数なんて箱を作らなくても、Print関数の中に直接 0.1 って書けばいいんじゃないの?」
鋭いですね!確かに、小さなスクリプトならそれでも動きます。数値を直接プログラムに書き込むことを、専門用語で「ハードコーディング」と呼びます。 しかし、実践的なEAを作る上で、ハードコーディングは絶対に避けるべき悪手とされています。
なぜなら、後から「ロット数を0.2に変更したいな」と思ったとき、プログラムの中に直接数字を書き込んでしまっていると、何百行もあるコードの中から「0.1」と書かれた場所を一つ一つ探し出して書き換えなければならないからです。これでは見落としによるエラー(バグ)の温床になってしまいます。
冒頭(箱の中身を入れる部分)で double my_lot = 0.1; と変数にまとめておけば、そこを1箇所修正するだけで、プログラム全体のロット数が一瞬で切り替わります。
私は常に「過剰な最適化を避け、シンプルで堅牢なトレードを」と考えています。 プログラムの構造が整理されていて、どこで何の数値を扱っているかが「変数」によって明確になっていること。これこそが、堅牢(壊れにくく、メンテナンスしやすい)なシステムを作るための絶対条件なのです。
複雑なロジックを継ぎ接ぎして作ったEAは、後からパラメーターを調整しようとしても、どこを触ればいいか分からなくなってしまいます。変数を上手に使って、風通しの良い、スッキリとした「美しいレシピ」を書くことを心がけましょう。それが結果として、相場の波にしなやかに対応できる強いEAを生み出す土台となります。
おわりに
今回は「変数」という魔法の箱について解説しました。
int(整数)、double(小数)、string(文字)、bool(スイッチ)。この4つの箱の存在を知ったことで、あなたのプログラムは様々なデータを記憶できるようになりました。
「なるほど、箱に数字を入れておくのは分かった。でも、それを使ってどうやってトレードするの?」
素晴らしい疑問です!
箱に入れた数字を本当に活かすのは、その数字を元に「判断」を下すときです。
次回は、プログラミングの醍醐味である「if文(条件分岐)」について学びます。 「もし(if)、現在の価格が移動平均線より高かったら、買う」 「もし、資金が少なくなっていたら、トレードを休む」 このように、プログラム自身に状況を判断させ、行動を変えさせる方法です。
いよいよEAの「頭脳」にあたる部分に突入していきますよ。少しずつできることが増えていくこの感覚を、ぜひ楽しんでくださいね。
それでは、次回の「MQL5パラダイス」でまたお会いしましょう。 シンプルで美しいコードが、あなたのトレードをより輝かせますように。
パイナップルでした、また!
Is it OK?