初心者でもわかる!!MQL言語の実践知識についてまとめてみました。
MQL言語の実践知識
MQL言語の実践知識になります。
プログラミングをある程度理解した上でMQL言語を知るとそこまで難しく感じないと思います。
では見ていきましょう。
MT4とMT5どちらで開発するべきか
MT4とMT5どちらで開発するべきかですが、まずはMT4とMT5の違いを見ましょう。
ツール名 | メリット | デメリット |
---|---|---|
MT4 | 利用している業者が多い 市販のプログラムを購入しやすい | 検証速度が遅い テストの精度が悪い |
MT5 | 検証速度が速い テストの精度が良い | MT4からの移行が難しい 国内業者を利用できない |
個人的にはMT5がオススメです。ただMT4でも問題ないので好きな方を選びましょう。
EAは4つの大枠で構成されている
EAは「事前判定」,「Entry判定」,「Exit判定」,「注文」の4つの大枠で構成されています。
4つの大枠でどのような機能や条件でEAを作りたいかを考えていくことで、
プログラミングに落とし込みやすくなります。それぞれについてご紹介します。
・Entry判定
・Exit判定
・注文方式
事前判定
事前判定とは、プログラムを動かす際に一定条件を満たした場合のみ後続処理を実行します。
例えば、証拠金が一定以上の場合のみ動くというような条件を加えたりします。
Entry判定
Entry判定は、エントリーを行うための条件判定です。
ローソク足や各指標による判定だったり、曜日や時間帯などのフィルターを考えます。
Exit判定
Exit判定は、決済を行うための条件判定です。
ローソク足やテクニカルよる判定だったり、
固定pipsによる判定、トレーリングストップによる判定などを考えます。
注文方式
注文方式とは、「成行、指値、逆指値」などを指定します。
イベントごとに呼ばれる特殊関数
イベントごとに呼ばれる特殊関数についてご紹介します。
・OnDeinit():終了処理関数
・OnTick():メイン処理関数
・OnTimer():タイマー処理関数
・OnTester():テスト処理関数
OnInit()
OnInit()は初期化処理関数です。
プログラム実行時に一度だけ呼び出される関数になります。
OnDeinit()
OnDeinit()は終了処理関数です。
プログラムをチャートから削除したタイミングで一度だけ呼び出される関数になります。
OnTick()
OnTick()はメイン処理関数です。
価格が更新されるたび度に呼び出される関数です。
EAのエントリーやエグジットの条件などの各種命令の処理を記述します。
OnTimer()
OnTimer()はタイマー処理関数です。
一定時間経過ごとに呼び出される関数になります。
OnTester()
OnTester()はテスト処理関数です。
バックテストや最適化を行う場合に呼び出される関数になります。
テクニカル指標の取得方法
テクニカル指標の取得方法ですが、MQLコミュニティに使用できるテクニカル指標は載っています。
今回はiMA(移動平均線)をベースに見てみましょう。
iMAという関数に必要な引数を渡せば移動平均線の値が取得できます。
ちなみにiMAの中身は以下のようになっています。
double iMA(
string symbol, // symbol
int timeframe, // timeframe
int ma_period, // MA averaging period
int ma_shift, // MA shift
int ma_method, // averaging method
int applied_price, // applied price
int shift // shift
);
これを例えば以下のように取得することができます。
double ma1 = iMA(NULL, 0, 13, 0, MODE_SMA, PRICE_CLOSE, 1);
iMAはどのような引数を渡すことで、どんな値が取得できるかについては以下の表にまとめました。
項目名 | 説明 | 例 |
---|---|---|
symbol | シンボル名 | 通貨ペア NULLにするとプログラムが適用されている チャートのシンボル名 |
timeframe | 時間枠 | 5分足なら5、1時間足なら60、etc 0にするとプログラムが適用されているチャートのタイムフレーム |
ma_period | 移動平均線の期間 | 25期間, 100期間, etc |
ma_shift | 移動平均線を基準から ずらす期間 | 後ほど記載 |
ma_method | 移動平均線の計算方法 | 単純移動平均線(SMA) 指数平滑移動平均線(EMA) 修正移動平均線(MMA) 加重移動平均線(WMA) |
applied_price | 適用価格(どの価格を元に計算するか) | 終値, 始値, 高値, 安値, etc |
shift | いくつ前の値を取得するか | 1本前, 2本前, etc |
テクニカル指標の関数を使う上の注意点
テクニカル指標の関数を使う上の注意点は主に3つです。
・引数と引数の間には「,(カンマ)」を入れること
・引数に変数を入れる場合は変数の型を同じにすること
・引数の順番を間違えないこと
関数に頻繁に出てくる引数
関数に頻繁に出てくる引数についてご紹介したいと思います。
・int timeframe:時間足
・int applied_price:インジケーターの数値
・int shift:インジケーターの時間をシフト
string symbol
string symbolは「通貨ペア」のことです。
大抵のインジケーターの関数はこれが1番最初にあります。
現在システムを動かしているチャートの通貨ペアの場合は「NULL」と入力しましょう。
int timeframe
int timeframeは、「時間足のこと」です。
大抵のインジケーターの関数は2番目にあります。
現在のシステムで動いている時間足で良い場合は「0」と入力しましょう。
基本的には0で良いです。
もし、個別に時間足を選択したい場合は、1分足であれば1を15分足なら15を入力します。
数字で入力する場合は、1時間足以上の場合も分で入力します。
一時間足なら60、日足なら1440になります。
int applied_price
int applied_priceは「インジケーターなどの時間足の
始値・高値・安値・終値などのどれを使って計算するかを設定する引数」です。
それぞれについては以下の表にまとめておきました。
内容 | 説明 |
PRICE_CLOSE | 終値 |
PRICE_OPEN | 始値 |
PRICE_HIGH | 高値 |
PRICE_LOW | 安値 |
PRICE_MEDIAN | (高値+安値)/2 |
PRICE_TYPICAL | (高値+安値+終値)/3 |
PRICE_WEIGHTED | (高値+安値+終値+始値)/4 |
int shift
int shiftは「インジケーターの時間をシフトする引数」です。
0であれば現在の値、1なら一つ前の足の値になります。
1時間足であれば、1と入力すれば1時間前の値になります。
.mq4ファイルと.ex4ファイルの違い
.mq4と.ex4というファイルが2つあります。
それぞれの違いについてご紹介したいと思います。
ex4ファイル:コンピュータだけが読み取ることができるファイル
.mq4ファイル
.mq4とは「人が読める形でプログラムの中身が書かれているファイル」です。
自身が使う分には構わないと思いますが、
他の人に配布する際にプログラムの中身が見られたくない場合は渡してはいけないです。
.ex4ファイル
.ex4とは「人間は読むことができずコンピュータだけが読み取ることができるファイル」です。
プログラムは見られたくない場合は.ex4にしましょう。
また、.ex4だけでもバックテストやリアル口座での運用が可能になっています。
MQL言語のEA作成の流れ
MQL言語でどのようにEAを作成するのかの大まかな流れについてご紹介したいと思います。
次回から実際にプログラミングを体験するので事前に流れを掴んでおいてください。
Step2:MetaEditor起動
Step3:プログラミング
Step4:コンパイル
Step5:バックテスト(パラメタ最適化)
Step1:MetaTrader4をダウンロード
MetaTrader4をダウンロードしましょう。
これがなければEAやインジケーター作成はできないです。
Step2:MetaEditor起動
MT4を起動した後にMetaEditorを開きましょう。
MetaEditorはMQLのプログラミングをする開発ツールになります。
Step3:プログラミング
実際にMQL言語を使ってプログラミングをします。
Step4:コンパイル
コンパイルとは、
「プログラムのソースコードをコンピューターが実行可能な機械語に翻訳する」ことです。
簡単に言えば、MQLは日本人で、PCはアメリカ人だったとしたら
コンパイルは、日本語を英語に要約してくれる翻訳さんです。
Step5:バックテスト(パラメタ最適化)
できたEAをバックテストします。
バックテストとは過去のチャートに対してEAの成績を評価するテストになります。
バックテストで良い結果が出ればある程度信頼できるEAだと言えます。
まとめ
今回の回で一応座学的なことは終了です。
次回からは実践的に手を動かしてプログラミングを体験してみましょう。
コメント