現在までのステップで、
- エントリーの確認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などを入手した事がないので流行りや常識などは存じませんが、
今のところこの構文を肉盛り、武装強化しても困ったことはありません。
次のステップからはエントリーロジックについてサンプルを交えながら紹介していきます。