2016年4月22日金曜日

[MQL超入門] その015 とりあえずやってみよう!簡単EA作成2

ではさっそく取引するコードを書いてみましょう。
・・と言いたいところですが、その前に1つお約束事があります。

本ブログ内のEA関係の記事は、注文クラスと呼んでいるクラスを使用しています。
「クラス」とは何かという説明はひとまず置いといて、EAを作成するのに必要なソースファイルがあるとだけ理解しておいてください。

ファイルの内容はこちらで公開しています。
http://mt4program.blogspot.jp/2016/04/mt4_57.html

必要なファイルは以下の2つです。
上記の記事のコードをそのままコピーし、Include/Customフォルダの下にそれぞれのファイル名で保存してください。
・TradingWrapper.mqh
・TradingDefines.mqh

準備ができたら、EAのコードを次のように変更します。
//+------------------------------------------------------------------+
//|                                                      Sample1.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#include <Custom/TradingWrapper.mqh>

input int MagicNumber = 37858260; //マジックナンバー 他のEAと当らない値を使用する。
input int MaxPosition = 1;        //最大ポジション数
input double SpreadFilter = 2;    //最大スプレット値(PIPS)

// トレード補助クラス
CTradingWrapper m_wrapper(Symbol(), MagicNumber, MaxPosition, SpreadFilter);

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
//---

//---
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
//---

}
//+------------------------------------------------------------------+

コードを変更したら、メタエディターの[コンパイル]ボタンをクリックしてみましょう。
・図015.01 コンパイルボタン

メタエディター左下の[エラー]欄に赤いびっくりマークのエラーが出た場合は、上記のファイル内容やファイル名、保存先が正しいか、または変更したコードが正しいかどうかを確認してください。

エラーが出なければ正しく準備が完了していることになりますので、先へ進みます。
ここまでではまだ取引は一切行われませんので、引き続き次のように実際に取引するコードを追加しましょう。
//+------------------------------------------------------------------+
//|                                                      Sample1.mq4 |
//|                        Copyright 2016, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#include <Custom/TradingWrapper.mqh>

input int MagicNumber = 37858260; //マジックナンバー 他のEAと当らない値を使用する。
input int MaxPosition = 1;        //最大ポジション数
input double SpreadFilter = 2;    //最大スプレット値(PIPS)

input double Lot = 0.02;          //売買ロット
input uint Slippage = 2;          //許容スリップページ(pips)
input uint StopLoss = 200;        //ストップロス
input uint TakeProfit = 200;      //利益確定

// トレード補助クラス
CTradingWrapper m_wrapper(Symbol(), MagicNumber, MaxPosition, SpreadFilter);

int counter = 0;
bool isBuy = true;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
//---

//---
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
//---
   string symbol = Symbol();
   static ENUM_TIMEFRAMES target = PERIOD_H1;
   static datetime before = 0;

   // 1時間の確定足でのみ動作
   datetime current = iTime(symbol, target, 0);   
   if( before == current )
   {
      return ;
   }
   before = current;
   
   counter++;
   if ( counter < 5 )
   {
      // 5本に1回しか処理しない
      return;
   }   
   // カウンターをリセット
   counter = 0;

   m_wrapper.RefreshPositions();
   
   bool hasPosition = ( m_wrapper.GetPositionCount() > 0 );
   if ( !hasPosition )
   {
      // ポジションを保持していなければ注文する
      int orderCmd = ( isBuy ? OP_BUY : OP_SELL );
      m_wrapper.SendOrder( orderCmd, Lot, 0, Slippage, StopLoss, TakeProfit );

      // 売/買を反転      
      isBuy = !isBuy;
   }
   else
   {
      // ポジションを保持していれば決済する
      m_wrapper.CloseOrder( 0, Slippage );
   }
}
//+------------------------------------------------------------------+

先ほどと同様にコンパイルを行い、エラーが出ないことを確認してください。

内容としては、5時間ごとに、買い→決済→売り→決済→買い→・・・と取引を繰り返すだけです。
コードの説明は後ほどしたいと思いますので、まずは結果を見てみましょう。

長くなりましたので、続きは次回に。

次の回へ


「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ MetaTraderへ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。