前回は取引についてのプログラムを作成してみました。
それでは取引を行うとき、どのような基準で売買を決定するのでしょうか?
現在の銘柄の予想価格、ポジションがオープンしてからの利益幅、テクニカル分析、様々な情報の取得が必要となります。
今回はプログラミングを通して、主要なデータ取得方法を確認してみましょう。
取得情報 | 利用方法の例 |
現在の時間 | 指定経過時間で一度決済 |
現在のロウソク足 | 分析指標へのデータ取得 |
現在の価格 | 目的の値を判断して、決済・新規注文を実行 |
現在の時間
”時間”を管理することでどのようなことができるでしょうか?
取引時に係るスワップ等を考慮した取引期間を制限、特定の時間内の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と同じ関数です。同様の結果を得ることができます。
今回は簡単なデータ取得の話となりましたが、必要なデータを思いついたとき、MQL5.comにアクセスして検索をすることで、色々な関数、コードサンプルを見つけ、開発を進めやすくなるようになっています。
今後もMQL5のサイトでは日々新しく、便利な情報を更新していきます。
- 投稿タグ
- MQL5