開発:MQL開発1/全体構成 | シストレの現実

シストレの現実

インフラ構築のプロが、シストレをゼロから始める記録です。
リーン・スタートアップの考えを取り込み、Expert Adviser を作っていきます。

教えるような大したものではなく、ユースケースの一つになれば幸いです。

今回から実際にMQL開発を行っていくわけですが、以前に 「Expert Advisor Builder for MetaTrader 4」でサンプルを作りました。
しかしながら、消せないコードがあったり、色々と不都合があることがわかりました。勉強不足ですみません。。。

そこで、方向転換を行います。

MetaEditorで空っぽのテンプレートを一旦作成して、Meta Trader 4 のサンプルEA「Moving Average.mq4」から良いとこ取りをしたいと思います。

まず空っぽのテンプレートを作る上で最も分かり易いサイトは下記でした。

MQL4プログラミングの扉を開けよう

この 「Hello World!」から始めよう」 が参考になります。
これで空っぽのテンプレートが作成できます。

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                                                        sysfxtry1 |
//|                                    https://github.com/sysfxtry1/ |
//+------------------------------------------------------------------+
#property copyright "sysfxtry1"
#property link      "https://github.com/sysfxtry1/"
#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()
  {
//---
  
  }
//+------------------------------------------------------------------+
ここで用意される関数は下記の3つです。
  • OnInit
  • OnDeinit
  • OnTick
それぞれの関数の意味合いは下記のサイトが詳しいです。

int OnInit(), void OnDeinit(const int reason), void OnTick() を理解しよう - MT4 EA開発・運用ブログ

他のサイトでは、MQL4では start 関数、MQL5の場合は OnTick 関数がメインの処理部分となると記載があったりします。
ですが、実際問題 MT4 でOnTickを使っても動作するようです。どうなってるのかは分からないですが・・・

これに下記の3つの関数を加えて構成したいと考えます。
CheckForOpen
ポジションのエントリータイミングをチェックする
CheckForClose
各ポジションの決済タイミング(利益確定/損切り)をチェックする
LotsOptimized
発注するポジション数を計算する
CheckMarketTrend
市場のトレンドを判断する

具体的な処理内容については、各関数を作りながら詳しく検討したいと思います。