時間指定オーダーとは?
時間指定オーダーは、その名の通り、特定の時間になったら注文を出す回路を組み込むことです。
FXにおいては、各市場ごとに特徴があり、
例えば相場が活性化して、ボラティリティが高まる時間帯を狙ってトレンドフォローのエントリーしたり、
その逆にボラティリティが低下して凪相場になりやすい時間帯を見計らって逆張りエントリーをしたりと、
その特徴を考慮したトレンド戦略を練ることはある程度FX取引経験がある人にとっては周知のことでしょう。
今回の記事では、そんな簡単な時間指定オーダーを実現させるMQL5の記述を紹介します。
時間指定オーダー記述のロードマップ
以下の手順でコードを記述していきます
標準ライブラリのトレードファイルをインクルードし、CTradeクラスのオブジェクトを宣言
発注回路をOnTick関数内に簡単に組み込むために、Trade.mqhをインクルードして、CTradeクラスのインスタンスを生成します。
#include <Trade\Trade.mqh>
//標準ライブラリーのトレードファイルを使えるようにする
CTrade trade;
// CTradeクラスのインスタンスを宣言
※インスタンスについては下記の記事をご参照ください。
OnTick()内に、日時データの取得、発注命令を記述
日時データはTimeCurrent関数を使ってサーバー時間情報を取得しています。
※日時データについては下記の記事群もご参照ください。
・MQL5 EA講座 第16回「データ型その6 datetime型」
・MQL5 EA講座 第116回「DateTime型を使って、日時データを操作する時の基本的な考え方」
- MQL5 EA講座 第117回「MqlDateTime構造体について」
- MQL5 EA講座 第118回「特定の日時を簡単に生成できる関数を実装する」
- MQL5 EA講座 第119回「トレードタイマークラスを実装する-その1-」
もしローカル時間を取得したい場合は、TimeLocal関数を利用してください。
TimeToString関数を使って、日時データを文字列情報に変換し、
その情報をStringSubstr関数に読み取らせます。
今回は「ノーポジションで、読み取った文字列情報が15:00なら、買い注文を出す」
という回路を組み込みました。
★注意:以下のソースコードには発注回路が含まれています。
ソースコードの内容を試されるときは、必ずストラテジーテスターのバックテストモードか、
デモ口座お試しいただくようお願いします。
void OnTick()
{
//現在値(買い)情報の取得と正規化
double AskInfo=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
//サーバー時間情報を取得
datetime timeInfo=TimeCurrent();
//日時情報を文字列情報に変換(表示方式は○○時:○○分方式)
string hoursAndMinutesInfo =TimeToString(timeInfo,TIME_MINUTES);
//ノーポジションで、読み取った文字列情報が15:00なら
if(PositionsTotal()<1 &&StringSubstr(hoursAndMinutesInfo,0)=="15:00")
{
//買い注文を出す
trade.Buy(0.01,NULL,AskInfo,AskInfo-100*_Point,AskInfo+100*_Point);
}//if(PositionsTotal()<1 &&StringSubstr(hoursAndMinutesInfo,0)=="15:00")
//コメント出力
Comment(hoursAndMinutesInfo);
}//void OnTick()
全体のプログラムコード
全体のプログラムコードは以下のようになります。
#property copyright "MQL5ssei"
#property link "https://mqlinvestmentlab.com/"
#property strict
//+-----------------------------
#include <Trade\Trade.mqh>
//標準ライブラリーのトレードファイルを使えるようにする
CTrade trade;
// CTradeクラスのインスタンスを宣言
void OnTick()
{
//現在値(買い)情報の取得と正規化
double AskInfo=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
//サーバー時間情報を取得
datetime timeInfo=TimeCurrent();
//日時情報を文字列情報に変換(表示方式は○○時:○○分方式)
string hoursAndMinutesInfo =TimeToString(timeInfo,TIME_MINUTES);
//ノーポジションで、読み取った文字列情報が15:00なら
if(PositionsTotal()<1 &&StringSubstr(hoursAndMinutesInfo,0)=="15:00")
{
//買い注文を出す
trade.Buy(0.01,NULL,AskInfo,AskInfo-100*_Point,AskInfo+100*_Point);
}//if(PositionsTotal()<1 &&StringSubstr(hoursAndMinutesInfo,0)=="15:00")
//コメント出力
Comment(hoursAndMinutesInfo);
}//void OnTick()
サンプルコードの挙動は以下のようになります。
左上のコメント表示が15:00になったらエントリーします。
最後まで読んでいただきありがとうございました。<(_ _)>
<参照>
TimeCurrent関数/TimeToString関数/UNIXタイム/タイムスタンプ/datetime型/iTime関数/StringToTime関数/ENUM_TIMEFRAMES/TimeToStruct関数/GetTickCount関数/MqlDateTime構造体/タイムゾーン/TimeDaylightSavings関数/TimeGMT関数/TimeGMTOffset関数/TimeLocal関数/夏時間/ローカル時間/サーバー時間
★注意再掲:コード内には発注記述が入っています。
ソースコードの内容を試されるときは、必ずストラテジーテスターのバックテストモードか、
デモ口座お試しいただくようお願いします。
リアル口座に導入するといきなりポジションを持ってしまいます。ソースコードを利用されたことによって金銭的被害を被られたとしても当方では責任を負うことができません。
詳しくは免責事項をご確認ください。
※当サイトでは、プログラミング経験ゼロの方でも、プログラミングの基礎から学べる
をメインコンテンツとして展開しています。
第0回から、順を追って勉強していけばプログラミングの経験がなくてもMQL5を使って、MT5用のEAが作れるように書いています。最初は難しいと感じるかもしれませんが、繰り返し勉強していく事で自然とスキルが身についていくはずです。興味ある方は是非ご覧ください。
———————————————————————————-
コメント