前回は取引についてのプログラムを作成してみました。
それでは取引を行うとき、どのような基準で売買を決定するのでしょうか?
現在の銘柄の予想価格、ポジションがオープンしてからの利益幅、テクニカル分析、様々な情報の取得が必要となります。
今回はプログラミングを通して、主要なデータ取得方法を確認してみましょう。
取得情報 | 利用方法の例 |
現在の時間 | 指定経過時間で一度決済 |
現在のロウソク足 | 分析指標へのデータ取得 |
現在の価格 | 目的の値を判断して、決済・新規注文を実行 |
現在の時間
”時間”を管理することでどのようなことができるでしょうか?
取引時に係るスワップ等を考慮した取引期間を制限、特定の時間内のEA取引を設定(日本の株式市場オープン時間のみの取引EA)、時間というパラメータを考慮したルールに沿った取引をすること等が可能になります。
MQL5のドキュメントを参考に、”時間”を取得するプログラムを作成しましょう。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
void OnTick()
{
//— 最終ティック受信時刻
datetime start_time=TimeCurrent();
//— ローカルPC時刻
datetime local_time=TimeLocal();
//— 現在の取引サーバ時刻
datetime trade_server_time=TimeTradeServer();
Print(
” 最終ティック受信時刻 “, start_time,
” クライアント時刻: “, local_time,
” サーバー時刻: “,trade_server_time
);
}
|
ドキュメント : https://www.mql5.com/ja/docs/dateandtime |
日付と時刻 に関する関数を確認できます。 |
こちらの関数はMT4で使用できた関数と同じ関数です。同様の結果を得ることができます。
現在のチャート情報
履歴データであるチャート上のOpen/High/Low/Close情報を取得して分析指標などに適用することが可能です。
ドキュメント : https://www.mql5.com/ja/docs/series |
時系列と指標データへの取得方法が確認できます。 |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
int shift=0; //– 0,1,2,3… 0を起点とした配列数
void OnTick()
{
datetime time = iTime(Symbol(),Period(),shift);
double open = iOpen(Symbol(),Period(),shift);
double high = iHigh(Symbol(),Period(),shift);
double low = iLow(Symbol(),Period(),shift);
double close = iClose(NULL,PERIOD_CURRENT,shift);
long volume= iVolume(Symbol(),0,shift);
int bars = iBars(NULL,0);
Comment(Symbol(),“,”,EnumToString(Period()),“n”,
“Time: “ ,TimeToString(time,TIME_DATE|TIME_SECONDS),“n”,
“Open: “ ,DoubleToString(open,Digits()),“n”,
“High: “ ,DoubleToString(high,Digits()),“n”,
“Low: “ ,DoubleToString(low,Digits()),“n”,
“Close: “ ,DoubleToString(close,Digits()),“n”,
“Volume: “,IntegerToString(volume),“n”,
“Bars: “ ,IntegerToString(bars),“n”
);
}
|
こちらの関数はMT4で使用できた関数と同じ関数です。同様の結果を得ることができます。
一方MT4とは異なる点として、以下の予約関数が廃止されました。
1
2
3
4
5
6
7
8
9
|
Ask 現在表示されている銘柄のAsk値
Bars 現在チャートのバー数
Bid 現在表示されている銘柄のBid値
Close 現在表示されているチャートの各バーの終値配列
High 現在表示されているチャートの各バーの高値配列
Low 現在表示されているチャートの各バーの安値配列
Open 現在表示されているチャートの各バーの始値配列
Time 現在表示されているチャートの各バーの時間配列
Volume 現在表示されているチャートの各バーの出来高配列
|
これらの廃止された関数は、MT5上ではイベント処理関数であるOnCalculate関数 を使用する場合に、現在の値を処理するための情報としてMT4同様の方法で使用することが可能です。ただし、Indicatorのみで使用でき、EA、Scriptでは使用できませんのでご注意下さい。
※プログラム実行 – 指標及びエキスパートアドバイザーで使用出来ない関数を参照してください。 MQL5:https://www.mql5.com/ja/docs/runtime/running
現在の価格情報(Tick)
現在の価格を取得することで、注文、発注管理等を行うことができます。MetaTrader5で利用できるティック受信時間、Bid, Ask, Volumeを利用できます。
ドキュメント : https://www.mql5.com/ja/docs/constants/structures/mqltick |
現在のティック情報を取得方法を確認できます。 |
1
2
3
4
5
6
7
8
9
10
|
void OnTick()
{
MqlTick last_tick;
if(SymbolInfoTick(Symbol(),last_tick))
{
Print(last_tick.time,“: Bid = “,last_tick.bid,
” Ask = “,last_tick.ask,” Volume = “,last_tick.volume);
}
else Print(“SymbolInfoTick() failed, error = “,GetLastError());
}
|
こちらの関数はMT4と同じ関数です。同様の結果を得ることができます。
Originally posted 2019-08-12 13:29:49.