〈記事の内容〉
MQLプログラミングの学習用として参照している書籍
プログラムは価格が動くごとに動作する
- 土曜日、日曜日は市場が休みのためプログラムは動かない
記号の使い方
- 「//」はプログラムを無効にする(コメント行)
- /※
複数行まとめてコメントにする
※/
- /※
- 実行文の終わりには必ず「;」
- 「( )」でグループ化
- 「” ”」の中にあるものは文字列として認識する
- 「, 」は項目を区切る
- 複数の実行分をまとめるには「{ }」
プログラムは半角英数で記述
大文字と小文字を区別する
四則演算
記号 | 名前 | 意 味 |
---|---|---|
+ | 足し算 | (A+B):AとBを足し算 |
ー | 引き算 | (A-B):AからBを引き算 |
* | 掛け算 | (A*B):AとBを掛け算 |
/ | 割り算 | (A/B):AをBで割り算 |
等号、不等号
記号 | 表記 | 意 味 |
---|---|---|
= | A=B | AにBを代入 |
== | A==B | AとBは等しい |
!= | A!=B | AとBは等しくない |
< | A<B | AはBよりも小さい |
<= | A<=B | AはB以下 |
> | A>B | AはBよりも大きい |
>= | A>=B | AはB以上 |
計算方法
- ex)x=1+2;
- 左辺:演算結果を代入
- 右辺:演算条件を記述
変数の設定
- 変数に整数を入れる
int x ;
int x = 0 ;
- 変数に小数を含む数字を入れる
double y ;
double y = 0.0 ;
- 変数に文字列を入れる
string z ;
string z = "メタトレーダー4" ;
- bool型変数「true」か「false」の2択
input bool MM_MODE = true;
- 変数の配列を作る:複数の変数を一気に宣言する
int abc[3];
- 何れの変数も初期値を設定することができる。(文字列は「”」で括る)
- 変数名はa〜z、A〜Z、0〜9、アンダーラインの組み合わせで好きな名前が付けられる。
- 変数の設定は、プログラムの一番上に記述する。
ローカル変数
- ブロックの中で宣言されている変数
- 関数内
- ネストしたブロック下
- ローカル変数はブロックを抜けるとリセットされる→値が毎回リセットされる
グローバル変数
- ブロックの外で宣言されている変数
- 別のブロックと変数を共有したい場合に使用する
- プログラム内のどこからでも使える
- 使用は最小限にとどめる
- グローバル変数はティックが更新されてもリセットされない→値を保持できる
input(パラメータ用変数)
- ユーザーがパラメータを入力・設定できるようにする
- 変数の前に「input」をつける
input int MagicNumber = 12345;
入門者のEA自作のための作り方講座
プログラムの記述
- #property
- #property copyright "Copyright 2021, MetaQuotes Software Corp." ← コピーライト表示
- #property link "https://www.mql5.com" ← リンクを貼れる
- #property version "1.00" ← バージョン設定
- #property strict ← コンパイル時にプログラムの文法を厳しく(strict)チェック
- OnInit():EA実行時の最初に一度だけ実行
- OnDeinit():EAの終了時に一度だけ実行
- OnTick():メインプログラムを書くところ→ティック更新毎(相場に値動きがある毎)に実行
- 「ティック」とは相場の1回の動きのこと:0.1pipsでも動いたらティックが動いたことになり、この処理が1回実行される
ローソク足の始値、終値、安値、高値
Lyakhovskiy Pavel, CC BY-SA 3.0, ウィキメディア・コモンズ経由で
- Real Body:実体、胴体
- 黒い実体:陰線(始値 > 終値)
- 白い実体:陽線(始値 < 終値)
- Upper shadow:上ヒゲ
- Lower shadow:下ヒゲ
- Open:始値
- Close:終値
- Low:安値
- High:高値
Rentier, Public domain, ウィキメディア・コモンズ経由で
プログラムでの書き方
- 高値:High[i]
- 始値:Open[i]
- 終値:Close[i]
- 安値:Low[i]
i:数字、0=現在足、何本前の足かを指定できる
足が更新されたタイミングで実行する
See the Pen
xxONgdZ by KAZUYOSHI KATANO (@k144)
on CodePen.
エントリー命令:OrderSend
MQLプログラミング実習
WARIZAN
//+------------------------------------------------------------------+
//| warizan.mq4 |
//| Copyright 2021, MetaQuotes Software Corp. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "割り算テストプログラム"
#property link "https://k144.hatenablog.com/entry/2019/10/27/185525#WARIZAN"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
int A = 5;
int B = 2;
int C = A / B;
double D = A / B;
double AD = 5;
double BD = 2;
double CD = AD / BD;
Print ("C = ", C);
Print ("D = ", D);
Print ("CD = ", CD);
}
//+------------------------------------------------------------------+
バックテスト
バックテスト用ファイルは定期的に削除する
- 「tester」→「history」の中のファイルを全削除
- 「tester」→「logs」の中のファイルを全削除