MQL4を解説してみる記事(基本構文と関数)
1. MQL4についての記事を書いてみます
久しぶりのブログ更新です。
最近は様々なEA作成ツールが登場し、誰でも簡単にEAを作れる時代になってきましたね。制作したEAの紹介ばかりでは味気ないので、今回は少し趣向を変えてみようと思います。
「儲かれば何でもOK!」という考え方の方もいるかもしれませんが、ツールを使って自動生成された基本的なプログラムを、自分で改変できるスキルは個人的には必須かと思います。また、ツクール系で完結する人でも、MQL4で出力されたコードを読み解き、どのような処理が行われているのかを理解するのも結構大事かなあと思ったりします。私も数年前まで何もわからなかったのですが、独力でわかるようにはなりましたので、自動売買やってる方は、勉強してみるのを個人的には勧めます。
といったわけで、MQL4の解説記事を書いてみることにしました。今回は初回なので、あえてあまり個別事項に対して深掘りはしてませんが、少しでもプログラムに対する理解の助けになれば幸いです。
2. MQL4プログラムの基本構造
まずざっくりなのですが、MQL4のプログラムは、だいたい基本的に以下のような流れになっています。エディターのtemplateもこんな感じですよね。
//+------------------------------------------------------------------+
//| Sample Expert Advisor |
//+------------------------------------------------------------------+
#property strict
//--- input parameters
input double LotSize = 0.1;
input int StopLoss = 50;
input int TakeProfit = 100;
//--- EAの初期化
int OnInit()
{
Print("EAが初期化されました。");
return INIT_SUCCEEDED;
}
//--- メインのトレードロジック
void OnTick()
{
double AskPrice = Ask;
double BidPrice = Bid;
// サンプルのトレードロジック(シンプルな買いエントリー)
if (OrdersTotal() == 0)
{
OrderSend(Symbol(), OP_BUY, LotSize, AskPrice, 3, AskPrice - StopLoss * Point, AskPrice + TakeProfit * Point);
}
}
まず塊の中で何をやっているのか理解することからですかね。主にEAの処理は、OnInit()
、OnTick()
などの組み込み関数を利用します。ツクール系やってる方なら見たことはあるかと思います。それぞれの意味するところは以下の通りです。
OnInit()
:EAが開始されたときに1回だけ実行される関数。OnTick()
:価格が更新されるたびに実行される関数。
ですので、認証などの立ち上げたときの処理をOnInit()の塊の中に書いていき、トレードのロジックをOnTick()の塊の中に書いていく感じです。
3. MQL4の基本文法
変数とデータ型
MQL4では、変数を定義して、値を保存していきます。それぞれ、データ型といって、格納できるデータが決まっていて、メジャーなものは以下のような感じです。
int
(整数型):int myNumber = 10;
double
(浮動小数点型):double myPrice = 1.2345;
bool
(真偽値型):bool isTrade = true;
string
(文字列型):string message = "Hello";
条件分岐とループ
実際にこれから色々条件を書いていくわけですが、プログラミング経験がある方ならわかると思いますが、C言語に似た構文で条件分岐やループを記述してくことができます。条件を分岐させてたかったらifを使ったり、
if (OrdersTotal() == 0)
{
Print("現在の注文はありません。");
}
ループ処理には for
、while
などを使用していくのですが、ここを掘り下げていくとかなり長くなるので、また追って記事にしておこうと思います。
for (int i = 0; i < 10; i++)
{
Print("ループ回数: ", i);
}
4. EA作成の基本手順
EAを作成する際は、だいたい以下の手順で進めていく方が多いと思います。今回はとりあえず、流れの紹介にとどめます。
- トレードルールの定義
- どのインジケーターを使うか?
- どういった条件でエントリー・決済するか?
- MQL4でコードを書く
- 必要な変数を定義する。
OnTick()
でトレードロジックを実装する。
- バックテストを行う
- MT4のストラテジーテスターを使って、過去データで成績を検証する。
- 最適化と改良を行う
- パラメーターを追加、調整する。
5. シンプルな移動平均線(SMA)を使ったEAの例
めちゃくちゃシンプルですが、実際に単純移動平均線(SMA)を使ったEAのコードを書いてみます。
//+------------------------------------------------------------------+
//| SMAを使ったサンプルEA |
//+------------------------------------------------------------------+
#property strict
input double LotSize = 0.1;
input int SMA_Period = 14;
//--- 初期化
int OnInit()
{
Print("SMA EAが起動しました。");
return INIT_SUCCEEDED;
}
//--- メイン処理
void OnTick()
{
double sma_value = iMA(Symbol(), 0, SMA_Period, 0, MODE_SMA, PRICE_CLOSE, 0);
if (Close[0] > sma_value && OrdersTotal() == 0)
{
OrderSend(Symbol(), OP_BUY, LotSize, Ask, 3, 0, 0);
}
}
OrderSendなどまだ解説してない関数もあるので、すべては分からないと思いますが、現在の価格がSMAを上回ったら買いエントリーを行うといった具合です。
今回はざっくりとした概要だけでしたが、MQL4の理解が向上するよう、また気が向いたときに更新していきたいと思います。
コメントを送信