Step5 【MQL4】基本構文コードを書いてみよう

現在までのステップで、

  • エントリーの確認OrderSelect()
  • 決済の記述OrderClose()
  • エントリーの記述OrderSend()

までを学べたと思います。


新規作成から記述箇所まで確認しよう

早速コードエディタを起動して新規作成してみましょう。

新規作成から下の画像を見ながら進めていきましょう

ここまできたらあとはコードを記述していきます。

記述箇所は”void OnTick() { ナミカッコのなか }”に基本的に書き込んでいきます。


以下のコードを転記してみよう

コピペでも良いですが、まずは自身で記述してみましょう。

//+------------------------------------------------------------------+
//|                                                      FirstEA.mq4 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
int myPosition;
int EntryLogic;
int CloseLogic;
input int slip = 5;
double EntryLot = 0.01;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick()
{
//---ここにコードを書いていく
//各数値を初期化
   myPosition = 0;
   EntryLogic = 0;
   CloseLogic = 0;
//ポジション確認とクローズ計算
   for(int i = OrdersTotal() - 1; i >=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS,MODE_TRADES)==true)
      {
         if(OrderType() == OP_BUY )
         {
            myPosition = 1; //LongPosition
            if( CloseLogic > 0 )
            {
               bool closeResult = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), slip, Green);
            }
         }
         else if(OrderType() == OP_SELL )
         {
            myPosition = -1; //ShortPosition
            if( CloseLogic < 0 )
            {
               bool closeResult = OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), slip, Green);
            }
         }
      }
   }
//エントリーロジック
   if( myPosition == 0 )
   {
      if( EntryLogic > 0 )
      {
         bool orderResult = OrderSend(Symbol(), OP_BUY, EntryLot,Ask, slip,0,0, "Long", 0, 0, Blue);
         if(!orderResult)
         {
            Print("OrderSend failed with error code: ", GetLastError());
         }
         else myPosition = 1;
      }
      if( EntryLogic < 0 )
      {
         bool orderResult = OrderSend(Symbol(), OP_BUY, EntryLot,Bid, slip,0,0, "Short", 0, 0, Blue);
         if(!orderResult)
         {
            Print("OrderSend failed with error code: ", GetLastError());
         }
         else myPosition = -1;
      }
   }
} //void OnTick End
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+

void OnTickの前の不要な行を削除して、グローバル変数をいくつか置いていますのでそちらも忘れずに転記してください。

コンパイルをクリックしてエラーが下段に表示されなければOKです。

今までのステップで見てきたコードを基本構造の順に起こしただけの簡単なものになります。

コードの流れを説明します。

OnTickでは価格が変動するたびにコードを走らせます。

説明
マイポジション、エントリーロジック、クローズロジックを初期化(0を代入)

保有ポジションを確認
 ロングならマイポジションに1
  クローズロジックが1ならロング決済
 ショートならマイポジションに-1を代入
  クローズロジックが-1ならショート決済

マイポジションが0ならエントリーロジックに進む
 エントリーロジックが1ならロングエントリー
 エントリーロジックが-1ならショートエントリー

これが私が考える基本構文になります。

配布EAや有料 EAなどを入手した事がないので流行りや常識などは存じませんが、

今のところこの構文を肉盛り、武装強化しても困ったことはありません。

次のステップからはエントリーロジックについてサンプルを交えながら紹介していきます。

つづくStep6【MQL4】1時間足の20SMAを基にエントリーロジックを設定する方法

タイトルとURLをコピーしました