k144 Personal Note

パーソナルノート・ライフログ、気の向くまま書き綴っています。

【MQL自習部屋:管理人学習メモ】MQLプログラミングを学ぶ(基礎編)

スポンサーリンク

〈記事の内容〉

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自作のための作り方講座

fxantenna.com


プログラムの記述

  • #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回実行される


ローソク足の始値、終値、安値、高値

https://upload.wikimedia.org/wikipedia/commons/9/91/Candlestick_chart_EURUSD_October_2009.PNG
Lyakhovskiy Pavel, CC BY-SA 3.0, ウィキメディア・コモンズ経由で

  • Real Body:実体、胴体
    • 黒い実体:陰線(始値 > 終値)
    • 白い実体:陽線(始値 < 終値)
  • Upper shadow:上ヒゲ
  • Lower shadow:下ヒゲ
  • Open:始値
  • Close:終値
  • Low:安値
  • High:高値

https://upload.wikimedia.org/wikipedia/commons/f/f2/Candle_definition_en.svg
Rentier, Public domain, ウィキメディア・コモンズ経由で

プログラムでの書き方

  • 高値:High[i]
  • 始値:Open[i]
  • 終値:Close[i]
  • 安値:Low[i]

i:数字、0=現在足、何本前の足かを指定できる

足が更新されたタイミングで実行する


See the Pen
xxONgdZ
by KAZUYOSHI KATANO (@k144)
on CodePen.

teratail.com


エントリー命令:OrderSend

OrderSend ( Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, "Buy", MagicNumber, 0,Blie )


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」の中のファイルを全削除