MT5CopyTicksRange

指定された期間のティックをMetaTrader 5ターミナルから取得します。

MT5CopyTicksRange(
  symbol,      // 銘柄名
  from,        // ティックがリクエストされた最初の日
  to,           // ティックがリクエストされた最後の日
  flags       // リクエストされたティックの種類を定義するためのフラグの組み合わせ
  )

パラメータ

symbol

[in] 金融商品名(例: EURUSD)

from

[in] ティックがリクエストされている最初の日。「datetime」オブジェクトまたは1970年1月1日からの経過秒数として設定されます。

to

[in] ティックがリクエストされている最後の日。「datetime」オブジェクトまたは1970年1月1日からの経過秒数として設定されます。

フラグ

[in] リクエストされたティックのタイプを定義するフラグMT5_COPY_TICKS_INFO – 買い気配値および/または売り気配値が変化したティックMT5_COPY_TICKS_TRADE – LastとVolumeが変化したティック MT5_COPY_TICKS_ALL – すべてのティックフラグ値はMT5_COPY_TICKS列挙体で説明されています。

戻り値

ティックをタプル(time, bid, ask, last, flags)として返します。タプル内では、フラグ変数はMT5_TICK_FLAG列挙体のフガルの組み合わせです。

注意事項

詳細はCopyTicks関数をご覧ください。

「datetime」オブジェクトを作成する際にPythonがローカルな時間帯を使用する一方、MetaTrader 5ではティックとバー開始時間はUTC時間帯(シフトなし)で保存されます。よって。時間を使用する関数を実行するためには「datetime」はUTC時間で作成されるべきです。MetaTrader 5から取得されたデータはUTC時間を持ちますが、Pythonは、出力する際に再度ローカル時間シフトを適用します。よって、取得されたデータは表示する前に修正されるべきです。

例:

from datetime import datetime
from MetaTrader5 import *
# 表形式で得られたデータを表示するための「pandas」モジュールをインポートする
import pandas as pd
pd.set_option('display.max_columns', 500) # 表示される列の数
pd.set_option('display.width', 1500)     # 表示する表の最高幅
# 時間帯を使用するためのpytzモジュールをインポートする
import pytz
 
# MetaTrader 5ターミナルとの接続を確立する
MT5Initialize()
#MetaTrader 5ターミナルが取引サーバに接続するのを待つ
MT5WaitForTerminal()
 
# 時間帯をUTCに設定する
timezone = pytz.timezone("Etc/UTC")
# ローカル時間帯オフセットの実装を避けるために「datetime」オブジェクトをUTC時間帯で作成する
utc_from = datetime(2019, 4, 1, tzinfo=timezone)
utc_to = datetime(2019, 4, 5, tzinfo=timezone)
# request AUDUSD ticks within 01.04.2019 - 05.04.2019
ticks = MT5CopyTicksFrom("EURUSD", utc_from, utc_to, MT5_COPY_TICKS_ALL)
print("Ticks received:",len(ticks))
 
# MetaTrader 5への接続をシャットダウンする
MT5Shutdown()
# 各ティックのデータを新しい列に表示する
print("Display obtained ticks 'as is'")
count = 0
for tick in ticks:
  print(tick)
  if(count >= 10):
      break
 
# 取得されたデータからDataFrameを作成する
ticks_frame = pd.DataFrame(list(ticks),
                          columns=['time', 'bid', 'ask', 'last', 'volume', 'flags'])
# データを表示する
print("\nDisplay dataframe with ticks")
print(ticks_frame.head(10)) # Pythonがローカル時間帯でバー開始時間をオフセット付きで提供していることがわかる
 
# ローカルPCのUTC時刻からのオフセットを取得する
UTC_OFFSET_TIMEDELTA = datetime.utcnow() - datetime.now()
 
# オフセットを正面から補正する簡単な関数を作成する
def local_to_utc(dt):
  return dt + UTC_OFFSET_TIMEDELTA
 
# ticks_frameデータ枠の「time」列のオフセットを適用する
ticks_frame['time'] = ticks_frame.apply(lambda tick: local_to_utc(tick['time']), axis=1)
 
# display the data once again and make sure the tick time has changed
print("\nDisplay the dataframe after adjusting the time")
print(ticks_frame.head(10))
 
Result:
Ticks received: 243374
Display obtained ticks 'as is'
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 2, 759000), bid=0.71155, ask=0.71223, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 7, 824000), bid=0.71154, ask=0.71222, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 27, 818000), bid=0.71155, ask=0.71223, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 43, 794000), bid=0.71159, ask=0.71204, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 44, 67000), bid=0.71145, ask=0.71209, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 44, 140000), bid=0.71157, ask=0.71223, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 44, 432000), bid=0.71157, ask=0.71225, last=0.0, volume=0.0, flags=4)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 44, 872000), bid=0.71159, ask=0.71204, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 45, 164000), bid=0.71148, ask=0.7121, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 45, 244000), bid=0.71158, ask=0.71223, last=0.0, volume=0.0, flags=134)
 
Display dataframe with ticks
                    time      bid      ask  last  volume  flags
0 2019-04-01 03:02:02.759  0.71155  0.71223   0.0     0.0    134
1 2019-04-01 03:02:07.824  0.71154  0.71222   0.0     0.0    134
2 2019-04-01 03:02:27.818  0.71155  0.71223   0.0     0.0    134
3 2019-04-01 03:02:43.794  0.71159  0.71204   0.0     0.0    134
4 2019-04-01 03:02:44.067  0.71145  0.71209   0.0     0.0    134
5 2019-04-01 03:02:44.140  0.71157  0.71223   0.0     0.0    134
6 2019-04-01 03:02:44.432  0.71157  0.71225   0.0     0.0      4
7 2019-04-01 03:02:44.872  0.71159  0.71204   0.0     0.0    134
8 2019-04-01 03:02:45.164  0.71148  0.71210   0.0     0.0    134
9 2019-04-01 03:02:45.244  0.71158  0.71223   0.0     0.0    134
 
Display dataframe with ticks after adjusting the time
                    time      bid      ask  last  volume  flags
0 2019-04-01 00:02:02.759  0.71155  0.71223   0.0     0.0    134
1 2019-04-01 00:02:07.824  0.71154  0.71222   0.0     0.0    134
2 2019-04-01 00:02:27.818  0.71155  0.71223   0.0     0.0    134
3 2019-04-01 00:02:43.794  0.71159  0.71204   0.0     0.0    134
4 2019-04-01 00:02:44.067  0.71145  0.71209   0.0     0.0    134
5 2019-04-01 00:02:44.140  0.71157  0.71223   0.0     0.0    134
6 2019-04-01 00:02:44.432  0.71157  0.71225   0.0     0.0      4
7 2019-04-01 00:02:44.872  0.71159  0.71204   0.0     0.0    134
8 2019-04-01 00:02:45.164  0.71148  0.71210   0.0     0.0    134
9 2019-04-01 00:02:45.244  0.71158  0.71223   0.0     0.0    134

参照

CopyRatesMT5CopyRatesFromPosMT5CopyRatesRangeMT5CopyTicksFromMT5CopyTicksRange