MetaTrader 5 Python User Group - メタトレーダーでPythonを使用する方法

 

Python用のMetaTrader 5モジュールを準備中です。

Rパッケージと 同様に、今のところ、実行中のターミナルのコピーからデータを抽出する簡単な関数でテストしています。

動作確認の方法について。

  1. Python 3.7.6 x64 をhttps://www.python.org/downloads/windows/ から %PATH% パスを含めてインストールします。

  2. グラフをサポートする matplotlib パッケージを提供
    pip install matplotlib
  3. MetaTrader5パッケージのインストールを実行する
    pip install MetaTrader5
    
  4. MetaTrader 5 build 2007以降がPCにインストールされている必要があります。

  5. テストスクリプトの実行
    python metatrader5-test.py
  6. MetaTrader 5ターミナルがバックグラウンドで実行され、データが抽出され、コンソールに表示され、チャートが描画されます。



テストコード

from datetime import datetime
from MetaTrader5 import *

MT5Initialize()
MT5WaitForTerminal()

print(MT5TerminalInfo())
print(MT5Version())

ticks1 = MT5CopyTicksFrom("EURAUD", datetime(2019,1,28,13), 10000, MT5_COPY_TICKS_ALL)
ticks2 = MT5CopyTicksRange("AUDUSD", datetime(2019,1,27,13), datetime(2019,1,28,13,1), MT5_COPY_TICKS_ALL)

rates1 = MT5CopyRatesFrom("EURUSD", MT5_TIMEFRAME_M1, datetime(2019,1,28,13), 1000)
rates2 = MT5CopyRatesFromPos("EURGBP", MT5_TIMEFRAME_M1, 0, 1000)
rates3 = MT5CopyRatesRange("EURCAD", MT5_TIMEFRAME_M1, datetime(2019,1,27,13), datetime(2019,1,28,13))

MT5Shutdown()

#DATA
print('ticks1(', len(ticks1), ')')
for val in ticks1[:10]: print(val)
print('ticks2(', len(ticks2), ')')
for val in ticks2[:10]: print(val)
print('rates1(', len(rates1), ')')
for val in rates1[:10]: print(val)
print('rates2(', len(rates2), ')')
for val in rates2[:10]: print(val)
print('rates3(', len(rates3), ')')
for val in rates3[:10]: print(val)

#PLOTTING
x_time = [x.time for x in rates2]
y_open = [y.open for y in rates2]
y_close = [y.close for y in rates2]

import matplotlib.pyplot as plt

plt.plot(x_time, y_open, 'g-')
plt.plot(x_time, y_close, 'r-')

plt.show()


後ほど機能を追加し、Pythonの公開パッケージリポジトリに置くので、すぐにインストールできるようになります。

Python Releases for Windows
Python Releases for Windows
  • www.python.org
The official home of the Python Programming Language
ファイル:
 

相関行列の早描き例。

from MetaTrader5 import *
from datetime import date
import pandas as pd 
import matplotlib.pyplot as plt 

# Initializing MT5 connection 
MT5Initialize()
MT5WaitForTerminal()

print(MT5TerminalInfo())
print(MT5Version())

# Create currency watchlist for which correlation matrix is to be plotted
sym = ['EURUSD','GBPUSD','USDJPY','USDCHF','AUDUSD','GBPJPY']

# Copying data to dataframe
d = pd.DataFrame()
for i in sym:
     rates = MT5CopyRatesFromPos(i, MT5_TIMEFRAME_M1, 0, 1000)
     d[i] = [y.close for y in rates]

# Deinitializing MT5 connection
MT5Shutdown()

# Compute Percentage Change
rets = d.pct_change()

# Compute Correlation
corr = rets.corr()

# Plot correlation matrix
plt.figure(figsize=(10, 10))
plt.imshow(corr, cmap='RdYlGn', interpolation='none', aspect='auto')
plt.colorbar()
plt.xticks(range(len(corr)), corr.columns, rotation='vertical')
plt.yticks(range(len(corr)), corr.columns);
plt.suptitle('FOREX Correlations Heat Map', fontsize=15, fontweight='bold')
plt.show()


ファイル:
 

Pythonから履歴要求が来た場合、それに対応するhstとtkcはTerminalに生成されるのでしょうか?


1000個のシンボルを同時に扱う(AMPGlobalUSA-Demo)ことが可能で、それぞれについて100メガバイト相当のティックがロードされていることを理解したい。

 
どなたかご存知でしたら、Pythonで過去のデータから同様のMT5チャートを素早く作成する方法を教えてください。つまり、静止画ではなく、インタラクティブなのです。
 
fxsaber:
どなたかご存知でしたら、Pythonで過去のデータからMT5のチャートのようなものを素早く作成する方法を教えてください。つまり、静止画ではなく、インタラクティブなのです。

https://plot.ly/~pari/67/stock-chart-for-netflix-inc/#//

https://plot.ly/python/candlestick-charts/

プロットライ全般

 
Maxim Dmitrievsky:

https://plot.ly/~pari/67/stock-chart-for-netflix-inc/#//

https://plot.ly/python/candlestick-charts/

plot.ly全般。

Pythonは完全に0点です。MT5-Pythonのシンプルさ、使い勝手の良さがわかるような、モチベーションの上がる一押しをお願いしたいです。そのような接続の例があるはずですので、コードを共有してください。

とてもクールな印象です。MT5で動作するコードが欲しいです。
 
fxsaber:

私はPythonは全くのゼロです。MT5-Pythonのシンプルさと使い勝手の良さを実感できる、モチベーションの上がる一押しを希望します。そのような接続の例があるはずですので、コードを共有してください。

私はほとんどMO用で、ほとんど何もイメージしていません。最近のMOものは自然に書き換えるのは非現実的、既製品しか使えない。すなわち、私にとっての明白な動機はこれです。

 
fxsaber:

とてもクールな印象です。MT5で動作するコードが欲しいです。

は後でコーディングすることができます...実際、リンク先にはすぐに使える例があります

 
私は時々、ティックを多かれ少なかれ便利な形で素早く表示する必要があり、そのためにZoomPriceインジケータを使用しています。しかし、ビジュアライゼーションはリンクの方がずっとクールです。MT5からPythonに転送するのが非常に簡単で、クールなティックチャートが得られるとしたら、それは多くの人にとって悪い動機にはなりません。
 
fxsaber:
私は時々、ティックを手軽な形で表示する必要があり、そのためにZoomPriceインジケータを使用しています。しかし、ビジュアライゼーションはリンクの方がはるかに優れています。MT5からPythonに転送するのが非常に簡単で、ティックのかっこいいチャートが手に入るとしたら--多くの人にとって、それは悪い動機ではないでしょう。

現時点では、(引用符以外の)あらゆる情報をリアルタイムソケットで送受信することができます。唯一の制限は、テスターでまだ動作しないことです。

 
Maxim Dmitrievsky:

現時点では、(引用符以外の)あらゆる情報をリアルタイムソケットで送受信することができます。唯一の制限は、テスターでまだ動作しないことです。

残念ながら、ソースコードがなければ、この機能はただの言葉でしかないのです。非常に私は知らないし、自習のスタートはおそらくすぐに紡げる実用的なものであるべきだと思います。