Pythonとの統合のためのMetaTraderモジュール

MT5Initialize

MetaTrader 5ターミナルとの接続を確立します。

MT5Initialize(
path=None      // MetaTrader 5ターミナルのEXEファイルへのパス
)

パラメータ

path=None

[in]  metatrader.exeまたはmetatrader64.exeファイルへのパス。パスが指定されていない場合、モジュールは自分自身で実行可能ファイルを見つけようとします。

戻り値

MetaTrader 5ターミナルに接続できた場合は true、それ以外の場合は false

注意事項

MT5Initialize()呼び出しを実行するときには、必要に応じて、MetaTrader 5ターミナルが起動して接続を確立します。

例:

from datetime import datetime
from MetaTrader5 import *

# MetaTrader 5ターミナルとの接続を確立する
MT5Initialize()
# MetaTrader 5ターミナルが取引サーバに接続するのを待つ
MT5WaitForTerminal()
# 接続状態、サーバー名、取引口座に関するデータを表示する
print(MT5TerminalInfo())
# MetaTrader 5バージョンについてのデータを表示する
print(MT5Version())
# MetaTrader 5ターミナルへの接続をシャットダウンする
MT5Shutdown()

参照

MT5Shutdown、MT5WaitForTerminal、MT5TerminalInfo、 MT5Version

MT5Shutdown

MetaTrader 5ターミナルへの以前に確立された接続を閉じます。

MT5Shutdown()

戻り値

なし

例:

from datetime import datetime
from MetaTrader5 import *

# MetaTrader 5ターミナルとの接続を確立する
MT5Initialize()
# MetaTrader 5ターミナルが取引サーバに接続するのを待つ
MT5WaitForTerminal()
# 接続状態、サーバー名、取引口座に関するデータを表示する
print(MT5TerminalInfo())
# MetaTrader 5バージョンについてのデータを表示する
print(MT5Version())
# MetaTrader 5ターミナルへの接続をシャットダウンする
MT5Shutdown()

参照

MT5Initialize、MT5WaitForTerminal、MT5TerminalInfo、 MT5Version

MT5TerminalInfo

接続されているMetaTrader 5ターミナルのステータスとパラメータを取得します。

MT5TerminalInfo()

戻り値

接続状態、取引サーバ名、取引口座番号を返します。

注意事項

値は3つの値のタプルとして返されます。

種類

説明

値の例

integer

取引サーバへの接続状態: 0 – 接続なし、1 – ターミナルは接続されているが、取引環境はまだ同期されていない、2 – ターミナルが取引サーバーに接続されている

2

string

取引サーバ名

‘MetaQuotes-Demo’

string

取引口座(ログイン)インデックス

‘15185779’

例:

from datetime import datetime
from MetaTrader5 import *

# MetaTrader 5ターミナルとの接続を確立する
MT5Initialize()
# MetaTrader 5ターミナルが取引サーバに接続するのを待つ
MT5WaitForTerminal()
# 接続状態、サーバー名、取引口座に関するデータを表示する
print(MT5TerminalInfo())
# MetaTrader 5バージョンについてのデータを表示する
print(MT5Version())
# MetaTrader 5ターミナルへの接続をシャットダウンする
MT5Shutdown()
結果:
>>> from datetime import datetime
>>> from MetaTrader5 import *
>>> MT5Initialize()
True
>>> MT5WaitForTerminal()
True
>>> print(MT5TerminalInfo())
[2, ‘MetaQuotesDemo‘, ‘16167573‘]
>>> print(MT5Version())
[500, 2009, ‘15 Mar 2019‘]
>>> MT5Shutdown()
True

参照

MT5Initialize、MT5WaitForTerminal、MT5Shutdown、 MT5Version

MT5Version

MetaTrader 5ターミナルバージョンを返します。

MT5Version()

戻り値

MetaTrader 5のターミナルバージョン、ビルドおよびリリース日を返します。

注意事項

MT5Version()関数は、接続状態、取引サーバアドレス、取引口座番号をタプルとして返します。

注意事項

値は3つの値のタプルとして返されます。

種類

説明

値の例

integer

MetaTrader 5ターミナルバージョン

500

string

ビルド

‘2007’

string

ビルドリリース日

’25 Feb 2019′

例:

from datetime import datetime
from MetaTrader5 import *

# MetaTrader 5ターミナルとの接続を確立する
MT5Initialize()
# MetaTrader 5ターミナルが取引サーバに接続するのを待つ
MT5WaitForTerminal()
# 接続状態、サーバー名、取引口座に関するデータを表示する
print(MT5TerminalInfo())
# MetaTrader 5バージョンについてのデータを表示する
print(MT5Version())
# MetaTrader 5ターミナルへの接続をシャットダウンする
MT5Shutdown()
結果:
>>> from datetime import datetime
>>> from MetaTrader5 import *
>>> MT5Initialize()
True
>>> MT5WaitForTerminal()
True
>>> print(MT5TerminalInfo())
[2, ‘MetaQuotesDemo‘, ‘16167573‘]
>>> print(MT5Version())
[500, 2009, ‘15 Mar 2019‘]
>>> MT5Shutdown()
True

参照

MT5Initialize、MT5WaitForTerminal、MT5Shutdown、 MT5TerminalInfo

MT5WaitForTerminal

MetaTrader 5ターミナルが取引サーバに接続するのを待ちます。

MT5WaitForTerminal()

戻り値

MetaTrader 5ターミナルが取引サーバに接続されている場合は true、それ以外の場合は false

注意事項

MT5Version()関数は、接続状態、取引サーバアドレス、取引口座番号をタプルとして返します。

注意事項

待機時間は1分です。接続状態を確認するにはMT5WaitForTerminal()の後にMT5TerminalInfo()が呼び出されるべきです。

例:

from datetime import datetime
from MetaTrader5 import *

# MetaTrader 5ターミナルとの接続を確立する
MT5Initialize()
# MetaTrader 5ターミナルが取引サーバに接続するのを待つ
MT5WaitForTerminal()
# 接続状態、サーバー名、取引口座に関するデータを表示する
print(MT5TerminalInfo())
# MetaTrader 5バージョンについてのデータを表示する
print(MT5Version())
# MetaTrader 5ターミナルへの接続をシャットダウンする
MT5Shutdown()

参照

MT5Initialize、MT5TerminalInfo、MT5Version、 MT5Shutdown

MT5CopyRatesFrom

指定された日以降のバーをMetaTrader 5ターミナルから取得します。

MT5CopyRatesFrom(
symbol,      // 銘柄名
timeframe,    // 時間枠
from,        // 初めにバーが開いた日
count        // バー数
)

パラメータ

symbol

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

timeframe

[in] バーがリクエストされている時間枠で、MT5_TIMEFRAME列挙からの値で設定されます

from

[in]  リクエストされたサンプルの1番目のバーが開いた日で、「datetime」オブジェクトまたは1970年1月1日からの経過秒数として設定されます。

count

[in] 受信するバーの数

戻り値

バーをタプル(time, open, high, low, close, tick_volume, spread, real_volume)として返します

注意事項

詳細はCopyRates()関数をご覧ください。

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

MT5_TIMEFRAME は可能なチャート期間値の列挙です。

ID

説明

MT5_TIMEFRAME_M1

1分

MT5_TIMEFRAME_M2

2分

MT5_TIMEFRAME_M3

3分

MT5_TIMEFRAME_M4

4分

MT5_TIMEFRAME_M5

5分

MT5_TIMEFRAME_M6

6分

MT5_TIMEFRAME_M10

10分

MT5_TIMEFRAME_M12

12分

MT5_TIMEFRAME_M12

15分

MT5_TIMEFRAME_M20

20分

MT5_TIMEFRAME_M30

30分

MT5_TIMEFRAME_H1

1 時間

MT5_TIMEFRAME_H2

2時間

MT5_TIMEFRAME_H3

3時間

MT5_TIMEFRAME_H4

4時間

MT5_TIMEFRAME_H6

6時間

MT5_TIMEFRAME_H8

8時間

MT5_TIMEFRAME_H12

12時間

MT5_TIMEFRAME_D1

1日

MT5_TIMEFRAME_W1

1週間

MT5_TIMEFRAME_MON1

1 ヶ月

 

例:

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, 5, tzinfo=timezone)
# 01.04.2019 UTC以降の10のEURUSD H4バーを取得する
rates = MT5CopyRatesFrom(“EURUSD”, MT5_TIMEFRAME_H4, utc_from, 10)

# MetaTrader 5ターミナルへの接続をシャットダウンする
MT5Shutdown()
# 取得したデータの各要素を新しい行に表示する
print(“Display obtained data ‘as is'”)
for rate in rates:
print(rate)

# 取得したデータからDataFrameを作成する
rates_frame = pd.DataFrame(list(rates),
columns=[‘time‘, ‘open‘, ‘low‘, ‘high‘, ‘close‘, ‘tick_volume‘, ‘spread‘, ‘real_volume‘])
# データを表示する
print(“\nDisplay dataframe with data”)
print(rates_frame) # Pythonがローカル時間帯でバー開始時間をオフセット付きで提供していることがわかる

# ローカルPCのUTC時刻からのオフセットを取得する
UTC_OFFSET_TIMEDELTA = datetime.utcnow() – datetime.now()

# オフセットを正面から補正する簡単な関数を作成する
def local_to_utc(dt):
return dt + UTC_OFFSET_TIMEDELTA

# rates_frameデータフレームの「time」列にオフセットを適用する
rates_frame[‘time‘] = rates_frame.apply(lambda rate: local_to_utc(rate[‘time‘]), axis=1)

# もう一度データを表示し、H4ローソク足の開始時間が4の倍数になっていることを確認する
print(“\nDisplay the dataframe after adjusting the time”)
print(rates_frame)

結果:
Display obtained data ‘as is’
MT5Rate(time=datetime.datetime(2019, 4, 3, 15, 0), open=1.12431, low=1.12543, high=1.12335, close=1.12341, tick_volume=11735, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 3, 19, 0), open=1.12339, low=1.12487, high=1.12247, close=1.12439, tick_volume=15241, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 3, 23, 0), open=1.12439, low=1.12478, high=1.12311, close=1.12312, tick_volume=4973, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 3, 0), open=1.12324, low=1.12472, high=1.12318, close=1.1244, tick_volume=3099, spread=4, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 7, 0), open=1.1244, low=1.12451, high=1.12364, close=1.12406, tick_volume=3304, spread=4, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 11, 0), open=1.12406, low=1.12472, high=1.12302, close=1.12313, tick_volume=10119, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 15, 0), open=1.12313, low=1.12359, high=1.12122, close=1.12171, tick_volume=15098, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 19, 0), open=1.12171, low=1.12246, high=1.12056, close=1.12188, tick_volume=15369, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 23, 0), open=1.12187, low=1.12265, high=1.1213, close=1.12191, tick_volume=5156, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 5, 3, 0), open=1.12199, low=1.12286, high=1.1217, close=1.1222, tick_volume=3903, spread=4, real_volume=0)

Display dataframe with data
time     open     low     high   close tick_volume spread real_volume
0 20190403 15:00:00 1.12431 1.12543 1.12335 1.12341       11735       8           0
1 20190403 19:00:00 1.12339 1.12487 1.12247 1.12439       15241       8           0
2 20190403 23:00:00 1.12439 1.12478 1.12311 1.12312         4973       8           0
3 20190404 03:00:00 1.12324 1.12472 1.12318 1.12440         3099       4           0
4 20190404 07:00:00 1.12440 1.12451 1.12364 1.12406         3304       4           0
5 20190404 11:00:00 1.12406 1.12472 1.12302 1.12313       10119       8           0
6 20190404 15:00:00 1.12313 1.12359 1.12122 1.12171       15098       8           0
7 20190404 19:00:00 1.12171 1.12246 1.12056 1.12188       15369       8           0
8 20190404 23:00:00 1.12187 1.12265 1.12130 1.12191         5156       8           0
9 20190405 03:00:00 1.12200 1.12286 1.12170 1.12220         3903       4           0

Display dataframe after adjusting the candle open time
time     open     low     high   close tick_volume spread real_volume
0 20190403 12:00:00 1.12431 1.12543 1.12335 1.12341       11735       8           0
1 20190403 16:00:00 1.12339 1.12487 1.12247 1.12439       15241       8           0
2 20190403 20:00:00 1.12439 1.12478 1.12311 1.12312         4973       8           0
3 20190404 00:00:00 1.12324 1.12472 1.12318 1.12440         3099       4           0
4 20190404 04:00:00 1.12440 1.12451 1.12364 1.12406         3304       4           0
5 20190404 08:00:00 1.12406 1.12472 1.12302 1.12313       10119       8           0
6 20190404 12:00:00 1.12313 1.12359 1.12122 1.12171       15098       8           0
7 20190404 16:00:00 1.12171 1.12246 1.12056 1.12188       15369       8           0
8 20190404 20:00:00 1.12187 1.12265 1.12130 1.12191         5156       8           0
9 20190405 00:00:00 1.12200 1.12286 1.12170 1.12220         3903       4           0

参照

CopyRates、MT5CopyRatesFromPos、MT5CopyRatesRange、 MT5CopyTicksFrom、MT5CopyTicksRange

MT5CopyRatesFromPos

指定されたインデックス以降のバーをMetaTrader 5ターミナルから取得します。

MT5CopyRatesFromPos(
symbol,      // 銘柄名
timeframe,    // 時間枠
start_pos,   // 初めのバーのインデックス
count        // バー数
)

パラメータ

symbol

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

timeframe

[in] バーがリクエストされている時間枠で、MT5_TIMEFRAME列挙からの値で設定されます

start_pos

[in]  データがリクエストされているバーの初めのインデックス。バーは現在から過去へ番号付けられるので、現在のバーは「ゼロバー」である

count

[in] 受信するバーの数

戻り値

バーをタプル(time, open, high, low, close, tick_volume, spread, real_volume)として返します

注意事項

詳細はCopyRates()関数をご覧ください。

例:

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)     # 表示する表の最高幅

# MetaTrader 5ターミナルとの接続を確立する
MT5Initialize()
# MetaTrader 5ターミナルが取引サーバに接続するのを待つ
MT5WaitForTerminal()

# 今日の10のGBPUSD D1バーを取得する
rates = MT5CopyRatesFrom(“GBPUSD”, MT5_TIMEFRAME_D1, 0, 10)

# MetaTrader 5ターミナルへの接続をシャットダウンする
MT5Shutdown()
# 取得したデータの各要素を新しい行に表示する
print(“Display obtained data ‘as is'”)
for rate in rates:
print(rate)

# 取得したデータからDataFrameを作成する
rates_frame = pd.DataFrame(list(rates),
columns=[‘time‘, ‘open‘, ‘low‘, ‘high‘, ‘close‘, ‘tick_volume‘, ‘spread‘, ‘real_volume‘])
# データを表示する
print(“\nDisplay dataframe with data”)
print(rates_frame) # Pythonがローカル時間帯でバー開始時間をオフセット付きで提供していることがわかる

# ローカルPCのUTC時刻からのオフセットを取得する
UTC_OFFSET_TIMEDELTA = datetime.utcnow() – datetime.now()

# オフセットを正面から補正する簡単な関数を作成する
def local_to_utc(dt):
return dt + UTC_OFFSET_TIMEDELTA

# rates_frameデータフレームの「time」列にオフセットを適用する
rates_frame[‘time‘] = rates_frame.apply(lambda rate: local_to_utc(rate[‘time‘]), axis=1)

# もう一度データを表示し、D1ローソク足の開始時間が00:00であることを確認する
print(“\nDisplay dataframe after adjusting the candle open time “)
print(rates_frame)

結果:
Display obtained data ‘as is’
MT5Rate(time=datetime.datetime(2019, 4, 3, 15, 0), open=1.12431, low=1.12543, high=1.12335, close=1.12341, tick_volume=11735, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 3, 19, 0), open=1.12339, low=1.12487, high=1.12247, close=1.12439, tick_volume=15241, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 3, 23, 0), open=1.12439, low=1.12478, high=1.12311, close=1.12312, tick_volume=4973, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 3, 0), open=1.12324, low=1.12472, high=1.12318, close=1.1244, tick_volume=3099, spread=4, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 7, 0), open=1.1244, low=1.12451, high=1.12364, close=1.12406, tick_volume=3304, spread=4, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 11, 0), open=1.12406, low=1.12472, high=1.12302, close=1.12313, tick_volume=10119, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 15, 0), open=1.12313, low=1.12359, high=1.12122, close=1.12171, tick_volume=15098, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 19, 0), open=1.12171, low=1.12246, high=1.12056, close=1.12188, tick_volume=15369, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 4, 23, 0), open=1.12187, low=1.12265, high=1.1213, close=1.12191, tick_volume=5156, spread=8, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 5, 3, 0), open=1.12199, low=1.12286, high=1.1217, close=1.1222, tick_volume=3903, spread=4, real_volume=0)

Display dataframe with data
time     open     low     high   close tick_volume spread real_volume
0 20190403 15:00:00 1.12431 1.12543 1.12335 1.12341       11735       8           0
1 20190403 19:00:00 1.12339 1.12487 1.12247 1.12439       15241       8           0
2 20190403 23:00:00 1.12439 1.12478 1.12311 1.12312         4973       8           0
3 20190404 03:00:00 1.12324 1.12472 1.12318 1.12440         3099       4           0
4 20190404 07:00:00 1.12440 1.12451 1.12364 1.12406         3304       4           0
5 20190404 11:00:00 1.12406 1.12472 1.12302 1.12313       10119       8           0
6 20190404 15:00:00 1.12313 1.12359 1.12122 1.12171       15098       8           0
7 20190404 19:00:00 1.12171 1.12246 1.12056 1.12188       15369       8           0
8 20190404 23:00:00 1.12187 1.12265 1.12130 1.12191         5156       8           0
9 20190405 03:00:00 1.12200 1.12286 1.12170 1.12220         3903       4           0

Display dataframe after adjusting the candle open time
time     open     low     high   close tick_volume spread real_volume
0 20190403 12:00:00 1.12431 1.12543 1.12335 1.12341       11735       8           0
1 20190403 16:00:00 1.12339 1.12487 1.12247 1.12439       15241       8           0
2 20190403 20:00:00 1.12439 1.12478 1.12311 1.12312         4973       8           0
3 20190404 00:00:00 1.12324 1.12472 1.12318 1.12440         3099       4           0
4 20190404 04:00:00 1.12440 1.12451 1.12364 1.12406         3304       4           0
5 20190404 08:00:00 1.12406 1.12472 1.12302 1.12313       10119       8           0
6 20190404 12:00:00 1.12313 1.12359 1.12122 1.12171       15098       8           0
7 20190404 16:00:00 1.12171 1.12246 1.12056 1.12188       15369       8           0
8 20190404 20:00:00 1.12187 1.12265 1.12130 1.12191         5156       8           0
9 20190405 00:00:00 1.12200 1.12286 1.12170 1.12220         3903       4           0

参照

CopyRates、MT5CopyRatesFrom、MT5CopyRatesRange、 MT5CopyTicksFrom、MT5CopyTicksRange

MT5CopyRatesRange

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

MT5CopyRatesRange(
symbol,      // 銘柄名
timeframe,    // 時間枠
date_from,   // バーがリクエストされている最初の日
date_to       // バーがリクエストされている最後の日
)

パラメータ

symbol

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

timeframe

[in] バーがリクエストされている時間枠で、MT5_TIMEFRAME列挙からの値で設定されます

date_from

[in] バーがリクエストされている最初の日。「datetime」オブジェクトまたは1970年1月1日からの経過秒数として設定されます。開始時間 >= date_fromのバーが返されます。

date_to

[in] バーがリクエストされている最後の日。「datetime」オブジェクトまたは1970年1月1日からの経過秒数として設定されます。開始時間 <= date_toのバーが返されます。

戻り値

バーをタプル(time, open, high, low, close, tick_volume, spread, real_volume)として返します

注意事項

詳細はCopyRates()関数をご覧ください。

「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)     # 表示する表の最高幅

# MetaTrader 5ターミナルへの接続を確立する
MT5Initialize()
#MetaTrader 5ターミナルが取引サーバーに接続するのを待つ
MT5WaitForTerminal()

# 時間帯をUTCに設定する
timezone = pytz.timezone(“Etc/UTC”)
# ローカル時間帯オフセットの実装を避けるために「datetime」オブジェクトをUTC時間帯で作成する
utc_from = datetime(2019, 4, 5, tzinfo=timezone)
utc_to = datetime(2019, 4, 5, hour = 13, tzinfo=timezone)
# 01.04.2019 UTC以降の10のバーをEURPLN M5から取得する
rates = MT5CopyRatesFrom(“EURPLN”, MT5_TIMEFRAME_M5, utc_from, utc_to)

# MetaTrader 5への接続をシャットダウンする
MT5Shutdown()
# 取得したデータの各要素を新しい行に表示する
print(“Display obtained data ‘as is'”)
for rate in rates:
print(rate)

# 取得されたデータからDataFrameを作成する
rates_frame = pd.DataFrame(list(rates),
columns=[‘time‘, ‘open‘, ‘low‘, ‘high‘, ‘close‘, ‘tick_volume‘, ‘spread‘, ‘real_volume‘])
# display data
print(“\nDisplay dataframe with data”)
print(rates_frame) # we can see that Python provides bar open time in the local time zone with an offset

# ローカルPCのUTC時刻からのオフセットを取得する
UTC_OFFSET_TIMEDELTA = datetime.utcnow() – datetime.now()

# オフセットを正面から補正する簡単な関数を作成する
def local_to_utc(dt):
return dt + UTC_OFFSET_TIMEDELTA
 
# rates_frameデータフレームの「time」列にオフセットを適用する
rates_frame[‘time‘] = rates_frame.apply(lambda rate: local_to_utc(rate[‘time‘]), axis=1)

# もう一度データを表示し、開始時間が変更されたことを確認する
print(“\nDisplay the dataframe after adjusting the time”)
print(rates_frame)

Result:
Display obtained data ‘as is’
MT5Rate(time=datetime.datetime(2019, 4, 1, 3, 30), open=4.2988, low=4.2993, high=4.2986, close=4.2989, tick_volume=853, spread=540, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 3, 35), open=4.2989, low=4.2989, high=4.2989, close=4.2989, tick_volume=1, spread=630, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 3, 40), open=4.2989, low=4.2991, high=4.2987, close=4.2989, tick_volume=10, spread=560, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 3, 45), open=4.2989, low=4.2989, high=4.2989, close=4.2989, tick_volume=2, spread=600, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 3, 50), open=4.2989, low=4.2989, high=4.2989, close=4.2989, tick_volume=4, spread=640, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 3, 55), open=4.2989, low=4.2989, high=4.2989, close=4.2989, tick_volume=4, spread=640, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 4, 0), open=4.2989, low=4.2995, high=4.29872, close=4.2994, tick_volume=40, spread=500, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 4, 5), open=4.2995, low=4.2998, high=4.299, close=4.2998, tick_volume=38, spread=440, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 4, 10), open=4.2998, low=4.2998, high=4.2991, close=4.2992, tick_volume=35, spread=440, real_volume=0)
MT5Rate(time=datetime.datetime(2019, 4, 1, 4, 15), open=4.2992, low=4.2995, high=4.2989, close=4.2993, tick_volume=379, spread=500, real_volume=0)

Display the first 10 values from the dataframe
time    open     low     high   close  tick_volume  spread  real_volume
0 2019-04-01 03:30:00  4.2988  4.2993  4.29860  4.2989          853     540            0
1 2019-04-01 03:35:00  4.2989  4.2989  4.29890  4.2989            1     630            0
2 2019-04-01 03:40:00  4.2989  4.2991  4.29870  4.2989           10     560            0
3 2019-04-01 03:45:00  4.2989  4.2989  4.29890  4.2989            2     600            0
4 2019-04-01 03:50:00  4.2989  4.2989  4.29890  4.2989            4     640            0
5 2019-04-01 03:55:00  4.2989  4.2989  4.29890  4.2989            4     640            0
6 2019-04-01 04:00:00  4.2989  4.2995  4.29872  4.2994           40     500            0
7 2019-04-01 04:05:00  4.2995  4.2998  4.29900  4.2998           38     440            0
8 2019-04-01 04:10:00  4.2998  4.2998  4.29910  4.2992           35     440            0
9 2019-04-01 04:15:00  4.2992  4.2995  4.29890  4.2993          379     500            0

Display the first 10 values from the dataframe after adjusting the time
time    open     low     high   close  tick_volume  spread  real_volume
0 2019-04-01 00:30:00  4.2988  4.2993  4.29860  4.2989          853     540            0
1 2019-04-01 00:35:00  4.2989  4.2989  4.29890  4.2989            1     630            0
2 2019-04-01 00:40:00  4.2989  4.2991  4.29870  4.2989           10     560            0
3 2019-04-01 00:45:00  4.2989  4.2989  4.29890  4.2989            2     600            0
4 2019-04-01 00:50:00  4.2989  4.2989  4.29890  4.2989            4     640            0
5 2019-04-01 00:55:00  4.2989  4.2989  4.29890  4.2989            4     640            0
6 2019-04-01 01:00:00  4.2989  4.2995  4.29872  4.2994           40     500            0
7 2019-04-01 01:05:00  4.2995  4.2998  4.29900  4.2998           38     440            0
8 2019-04-01 01:10:00  4.2998  4.2998  4.29910  4.2992           35     440            0
9 2019-04-01 01:15:00  4.2992  4.2995  4.29890  4.2993          379     500            0

参照

CopyRates、MT5CopyRatesFrom、MT5CopyRatesRange、 MT5CopyTicksFrom、MT5CopyTicksRange

MT5CopyTicksFrom

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

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

パラメータ

symbol

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

from

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

count

[in] 受信するティックの数。

フラグ

[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は、出力する際に再度ローカル時間シフトを適用します。よって、取得されたデータは表示する前に修正されるべきです。

MT5_COPY_TICKSは、MT5CopyTicksFrom()およびMT5CopyTicksRange()関数を使用してリクエストできるティックの種類を定義します。

ID

説明

MT5_COPY_TICKS_ALL

すべてのティック

MT5_COPY_TICKS_INFO

買い気配値および/または売り気配値の変化を含むティック

MT5_COPY_TICKS_TRADE

Lastおよび/またはVolume価格の変化を含むティック

MT5_TICK_FLAG はティックの可能なフラグを定義します。これえらのフラグはMT5CopyTicksFrom()およびMT5CopyTicksRange()関数で取得されるティックを描写するために使用されます。

ID

説明

MT5_TICK_FLAG_BID

売り気配値が変化した

MT5_TICK_FLAG_ASK

買い気配値が変化した

MT5_TICK_FLAG_LAST

Last価格が変化した

MT5_TICK_FLAG_VOLUME

出来高が変化した

MT5_TICK_FLAG_BUY

最後の買値が変化した

MT5_TICK_FLAG_SELL

最後の売値が変化した

 

例:

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&qquot;)
# ローカル時間帯オフセットの実装を避けるために「datetime」オブジェクトをUTC時間帯で作成する
utc_from = datetime(2019, 4, 1, tzinfo=timezone)
# 01.04.2019 UTC以降の100 000のEURUSDティックをリクエストする
ticks = MT5CopyTicksFrom(“EURUSD”, utc_from, 100000, 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: 100000
Display obtained ticks ‘as is’
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 5, 745000), bid=1.12258, ask=1.12339, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 26, 155000), bid=1.12260, ask=1.12339, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 26, 497000), bid=1.12272, ask=1.12339, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 34, 327000), bid=1.12268, ask=1.12336, last=0.0, volume=0.0, flags=134)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 35, 61000), bid=1.12268, ask=1.12339, last=0.0, volume=0.0, flags=4)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 35, 369000), bid=1.12258, ask=1.12339, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 40, 577000), bid=1.12258, ask=1.12336, last=0.0, volume=0.0, flags=4)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 46, 494000), bid=1.1225, ask=1.12336, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 47, 288000), bid=1.12248, ask=1.12336, last=0.0, volume=0.0, flags=130)
MT5Tick(time=datetime.datetime(2019, 4, 1, 3, 2, 56, 114000), bid=1.1225, ask=1.12336, last=0.0, volume=0.0, flags=130)

Display dataframe with ticks
time      bid      ask  last  volume  flags
0 2019-04-01 03:02:05.745  1.12258  1.12339   0.0     0.0    134
1 2019-04-01 03:02:26.155  1.12261  1.12339   0.0     0.0    130
2 2019-04-01 03:02:26.497  1.12272  1.12339   0.0     0.0    130
3 2019-04-01 03:02:34.327  1.12268  1.12336   0.0     0.0    134
4 2019-04-01 03:02:35.061  1.12268  1.12339   0.0     0.0      4
5 2019-04-01 03:02:35.369  1.12258  1.12339   0.0     0.0    130
6 2019-04-01 03:02:40.577  1.12258  1.12336   0.0     0.0      4
7 2019-04-01 03:02:46.494  1.12250  1.12336   0.0     0.0    130
8 2019-04-01 03:02:47.288  1.12248  1.12336   0.0     0.0    130
9 2019-04-01 03:02:56.114  1.12250  1.12336   0.0     0.0    130

Display dataframe with ticks after adjusting the time
time      bid      ask  last  volume  flags
0 2019-04-01 00:02:05.745  1.12258  1.12339   0.0     0.0    134
1 2019-04-01 00:02:26.155  1.12261  1.12339   0.0     0.0    130
2 2019-04-01 00:02:26.497  1.12272  1.12339   0.0     0.0    130
3 2019-04-01 00:02:34.327  1.12268  1.12336   0.0     0.0    134
4 2019-04-01 00:02:35.061  1.12268  1.12339   0.0     0.0      4
5 2019-04-01 00:02:35.369  1.12258  1.12339   0.0     0.0    130
6 2019-04-01 00:02:40.577  1.12258  1.12336   0.0     0.0      4
7 2019-04-01 00:02:46.494  1.12250  1.12336   0.0     0.0    130
8 2019-04-01 00:02:47.288  1.12248  1.12336   0.0     0.0    130
9 2019-04-01 00:02:56.114  1.12250  1.12336   0.0     0.0    130

参照

CopyRates、MT5CopyRatesFromPos、MT5CopyRatesRange、 MT5CopyTicksFrom、MT5CopyTicksRange

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

参照

CopyRates、MT5CopyRatesFromPos、MT5CopyRatesRange、 MT5CopyTicksFrom、MT5CopyTicksRange

Originally posted 2019-07-30 09:48:34.

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA


You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">