自己做量化交易軟件(23)小白量化之MetaTrader5自動交易2
上一篇我們介紹了MetaTrader 5關於交易類的函數功能,這篇文章主要介紹行情獲取等方面知識。
一、獲取MetaTrader 5程序端中所有交易品種的數量。
import HP_mt5 as hmt5
# 建立與MetaTrader 5程序端的連接
if not hmt5.initialize():
print("initialize() failed, error code =",hmt5.last_error())
quit()
# 獲取交易品種的數量
symbols=hmt5.symbols_total()
if symbols>0:
print("Total symbols =",symbols)
else:
print("symbols not found")
# 斷開與MetaTrader 5程序端的連接
hmt5.shutdown()
運行結果:
Total symbols = 260
二、獲取MetaTrader 5程序端中的所有交易品種。
import HP_mt5 as hmt5
# 建立與MetaTrader 5程序端的連接
if not hmt5.initialize():
print("initialize() failed, error code =",hmt5.last_error())
quit()
# 獲取所有交易品種
symbols=hmt5.symbols_get()
print('Symbols: ', len(symbols))
count=0
# 顯示前五個交易品種
for s in symbols:
count+=1
print("{}. {}".format(count,s.name))
if count==5: break
print()
# 獲取名稱中包含RU的交易品種
ru_symbols=hmt5.symbols_get(group="*RU*")
print('len(*RU*): ', len(ru_symbols))
for s in ru_symbols:
print(s.name)
print()
# 獲取名稱中不包含USD、EUR、JPY和GBP的交易品種
group_symbols=hmt5.symbols_get(group="*,!*USD*,!*EUR*,!*JPY*,!*GBP*")
print('len(*,!*USD*,!*EUR*,!*JPY*,!*GBP*):', len(group_symbols))
for s in group_symbols:
print(s.name,":",s)
# 斷開與MetaTrader 5程序端的連接
hmt5.shutdown()
運行結果:
Symbols: 260
1. EURUSD
2. GBPUSD
3. USDCHF
4. USDJPY
5. USDCAD
len(*RU*): 3
EURUSD
USDRUB
XBRUSD
。。。後面輸出信息省略
三、獲取指定交易品種的數據。
import HP_mt5 as hmt5
# 建立與MetaTrader 5程序端的連接
if not hmt5.initialize():
print("initialize() failed, error code =",hmt5.last_error())
quit()
# 嘗試在市場報價中啓用顯示EURJPY交易品種
selected=hmt5.symbol_select("EURJPY",True)
if not selected:
print("Failed to select EURJPY")
hmt5.shutdown()
quit()
# 顯示EURJPY交易品種屬性
symbol_info=hmt5.symbol_info("EURJPY")
if symbol_info!=None:
# display the terminal data 'as is'
print(symbol_info)
print("EURJPY: spread =",symbol_info.spread," digits =",symbol_info.digits)
# display symbol properties as a list
print("Show symbol_info(\"EURJPY\")._asdict():")
symbol_info_dict = hmt5.symbol_info("EURJPY")._asdict()
for prop in symbol_info_dict:
print(" {}={}".format(prop, symbol_info_dict[prop]))
# 斷開與MetaTrader 5程序端的連接
hmt5.shutdown()
運行結果:
SymbolInfo(custom=False, chart_mode=0, select=True, visible=True, session_deals=0, session_buy_orders=0, session_sell_orders=0, volume=0, volumehigh=0, volumelow=0, time=0, digits=3, spread=0, spread_float=True, ticks_bookdepth=10, trade_calc_mode=0, trade_mode=4, start_time=0, expiration_time=0, trade_stops_level=0, trade_freeze_level=0, trade_exemode=2, swap_mode=1, swap_rollover3days=3, margin_hedged_use_leg=False, expiration_mode=15, filling_mode=2, order_mode=127, order_gtc_mode=0, option_mode=0, ...)
EURJPY: spread = 0 digits = 3
Show symbol_info("EURJPY")._asdict():
custom=False
chart_mode=0
select=True
visible=True
session_deals=0
session_buy_orders=0
session_sell_orders=0
volume=0
volumehigh=0
volumelow=0
time=0
digits=3
spread=0
spread_float=True
ticks_bookdepth=10
trade_calc_mode=0
trade_mode=4
start_time=0
expiration_time=0
trade_stops_level=0
trade_freeze_level=0
trade_exemode=2
swap_mode=1
swap_rollover3days=3
margin_hedged_use_leg=False
expiration_mode=15
filling_mode=2
order_mode=127
order_gtc_mode=0
option_mode=0
option_right=0
bid=0.0
bidhigh=0.0
bidlow=0.0
ask=0.0
askhigh=0.0
asklow=0.0
last=0.0
lasthigh=0.0
lastlow=0.0
volume_real=0.0
volumehigh_real=0.0
volumelow_real=0.0
option_strike=0.0
point=0.001
trade_tick_value=0.935182500865044
trade_tick_value_profit=0.935182500865044
trade_tick_value_loss=0.935182500865044
trade_tick_size=0.001
trade_contract_size=100000.0
trade_accrued_interest=0.0
trade_face_value=0.0
trade_liquidity_rate=0.0
volume_min=0.01
volume_max=100.0
volume_step=0.01
volume_limit=0.0
swap_long=-3.74
swap_short=-1.04
margin_initial=100000.0
margin_maintenance=0.0
session_volume=0.0
session_turnover=0.0
session_interest=0.0
session_buy_orders_volume=0.0
session_sell_orders_volume=0.0
session_open=0.0
session_close=0.0
session_aw=0.0
session_price_settlement=0.0
session_price_limit_min=0.0
session_price_limit_max=0.0
margin_hedged=0.0
price_change=0.0
price_volatility=0.0
price_theoretical=0.0
price_greeks_delta=0.0
price_greeks_theta=0.0
price_greeks_gamma=0.0
price_greeks_vega=0.0
price_greeks_rho=0.0
price_greeks_omega=0.0
price_sensitivity=0.0
basis=
category=
currency_base=EUR
currency_profit=JPY
currency_margin=EUR
bank=
description=Euro vs Japanese Yen
exchange=
formula=
isin=
name=EURJPY
page=
path=Forex\Minors\EURJPY
四、獲取行情數據及小白量化之仿通達信指標計算
import pandas as pd
from HP_formula import *
import MetaTrader5 as mt5
import HP_mt5 as hmt5
# 建立與MetaTrader 5程序端的連接
if not hmt5.initialize():
print("initialize() failed, error code =",hmt5.last_error())
quit()
'''
TIMEFRAME 是一個包含可能圖表週期值的枚舉
ID 描述
TIMEFRAME_M1 1分鐘
TIMEFRAME_M2 2 分鐘
TIMEFRAME_M3 3 分鐘
TIMEFRAME_M4 4 分鐘
TIMEFRAME_M5 5 分鐘
TIMEFRAME_M6 6 分鐘
TIMEFRAME_M10 10 分鐘
TIMEFRAME_M12 12 分鐘
TIMEFRAME_M12 15 分鐘
TIMEFRAME_M20 20 分鐘
TIMEFRAME_M30 30 分鐘
TIMEFRAME_H1 1 小時
TIMEFRAME_H2 2 小時
TIMEFRAME_H3 3 小時values
TIMEFRAME_H4 4 小時
TIMEFRAME_H6 6 小時
TIMEFRAME_H8 8 小時
TIMEFRAME_H12 12 小時
TIMEFRAME_D1 1 天
TIMEFRAME_W1 1 周
TIMEFRAME_MON1 1 個月
'''
# 在UTC時區,獲取01.10.2020開始的10個EURUSD H4柱形圖
rates = hmt5.copy_rates_from_pos("XAUUSD", mt5.TIMEFRAME_H1, 0, 2440)
df=hmt5.tohpdata(rates)
print(df)
#下面是小白仿通達信公式系統計算
#首先要對數據預處理
mydf=df.copy()
CLOSE=mydf['close']
LOW=mydf['low']
HIGH=mydf['high']
OPEN=mydf['open']
C=mydf['close']
L=mydf['low']
H=mydf['high']
O=mydf['open']
def RSI(N1=6, N2=12, N3=24):
"""
RSI 相對強弱指標
"""
LC = REF(CLOSE, 1)
RSI1 = SMA(MAX(CLOSE - LC, 0), N1, 1) / SMA(ABS(CLOSE - LC), N1, 1) * 100
RSI2 = SMA(MAX(CLOSE - LC, 0), N2, 1) / SMA(ABS(CLOSE - LC), N2, 1) * 100
RSI3 = SMA(MAX(CLOSE - LC, 0), N3, 1) / SMA(ABS(CLOSE - LC), N3, 1) * 100
return RSI1, RSI2, RSI3
#假定我們使用RSI指標
r1,r2,r3=RSI()
mydf = mydf.join(pd.Series( r1,name='RSI1'))
mydf = mydf.join(pd.Series( r2,name='RSI2'))
mydf = mydf.join(pd.Series( r3,name='RSI3'))
mydf['S80']=80 #增加上軌80軌跡線
mydf['X20']=20 #增加下軌20軌跡線
mydf=mydf.tail(100) #顯示最後100條數據線
#下面是繪線語句
mydf.S80.plot.line()
mydf.X20.plot.line()
mydf.RSI1.plot.line(legend=True)
mydf.RSI2.plot.line(legend=True)
mydf.RSI2.plot.line(legend=True)
# 斷開與MetaTrader 5程序端的連接
hmt5.shutdown()
運行結果:
time open high low close tick_volume spread real_volume date
0 2020-01-21 01:00:00 1560.88 1561.49 1559.95 1561.27 1512 2 0 2020-01-21 01:00:00
1 2020-01-21 02:00:00 1561.27 1561.96 1560.36 1560.45 2179 2 0 2020-01-21 02:00:00
2 2020-01-21 03:00:00 1560.46 1567.94 1560.03 1566.67 10579 2 0 2020-01-21 03:00:00
3 2020-01-21 04:00:00 1566.67 1568.63 1564.60 1567.01 7646 2 0 2020-01-21 04:00:00
4 2020-01-21 05:00:00 1567.00 1567.31 1565.53 1566.86 4221 2 0 2020-01-21 05:00:00
5 2020-01-21 06:00:00 1566.87 1567.75 1566.28 1566.60 2179 2 0 2020-01-21 06:00:00
顯示圖形如下:
以上文章介紹了MetaTrader5的Python方面的程序開發。MetaTrader5提供了外匯,期貨,數字幣等行情數據。讀者不難結合前面的文章,根據自己策略寫出全自動交易程序。
獨狼荷蒲qq:2886002
通通小白python量化羣:524949939
微信公衆號:獨狼股票分析