python读取mt4数据_手把手教你使用Python进行数据获取和作图

最近在学习Python3做数据分析。就尝试用COT和汇率数据来练习一下。毕竟不实际找个东西做一下碰不到问题,也学不会啊。

话不多说,目标就是(1)抓取网络的COT数据,(2)结合MT4导出的汇率数据,(3)来绘制一张关联图,看看COT和实盘外汇汇率有啥影响。

最后的效果是这样的。

准备工作:

使用工具是Python3。不过一般会使用conda3的安装包进行安装。一些库都会安装进来。

绘制蜡烛图需要mplfinance。使用下面方式直接安装。

抓取COT数据。

(注意,每周六公布周二的数据,有3天左右的延迟)

(注意后面2020是年份,可根据实际需要修改)

实际网上的COT数据是这样的。对,这就是CSV数据,简单。历史数据和最新数据的格式就差个header。

接下来结合代码进行说明。

import pandas as pd

import matplotlib.pyplot as plt

import numpy as np

# mpl_finance会有警告信息,可无视。

import mpl_finance as mpf

url_new = ‘https://www.cftc.gov/dea/newcot/FinFutWk.txt’

url_old = ‘https://www.cftc.gov/files/dea/history/fut_fin_txt_2020.zip’

df_new = pd.read_csv(

filepath_or_buffer=url_new,

header=None,

)

df_old = pd.read_csv(

filepath_or_buffer=url_old,

)

# df_new没头部,使用历史数据的头部填充

df_new.columns=df_old.columns

数据进入pandas的dataframe后,就可以进行清理合并等操作了。

df = df_old.combine_first(df_new)

titles = {

“Market_and_Exchange_Names”: “Market_and_Exchange_Names”,

“As_of_Date_In_Form_YYMMDD”: “As_of_Date”,

“Report_Date_as_YYYY-MM-DD”: “Report_Date”,

“Lev_Money_Positions_Long_All”: “LL”,

“Lev_Money_Positions_Short_All”: “LS”,

}

items = {

“EURO FX – CHICAGO MERCANTILE EXCHANGE”: “EURUSD”,

}

df2 = df[titles.keys()]

df3 = df2.rename(columns=titles)

df3[‘DATE’] = df3[‘Report_Date’]

df3[‘COT_NAME’] = df3[‘Market_and_Exchange_Names’].map(items)

df3[‘LL-LS’] = df3[‘LL’] – df3[‘LS’]

df3[‘LL+LS’] = df3[‘LL’] + df3[‘LS’]

df_cot = df3.dropna()

df_cot_cut = df_cot[(df_cot[‘DATE’] >= ‘2020’) & (df_cot[‘DATE’]

进行清理后数据是这样的。数据的含义就不解释了。

2.获取汇率数据

为了方便,直接从MT4软件的日线数据导出的CSV文件进行读取。读者可自行考虑获取汇率数据。这里假设导入文件是EURUSD1440.csv。

df = pd.read_csv(

filepath_or_buffer=’EURUSD1440.csv’,

header=None,

)

cols = [‘D’, ‘T’, ‘Open’, ‘High’, ‘Low’, ‘Close’, ‘Volume’]

df.columns = cols

df[‘DATE’] = df[‘D’].str.replace(‘.’, ‘-‘)

df[‘COT_NAME’] = ‘EURUSD’

df_d1 = df.drop([‘D’, ‘T’, ‘Volume’], axis=1)

df_d1_cut = df_d1[(df_d1[‘DATE’] >= ‘2020’) & (df_d1[‘DATE’]

进行清理后数据是这样的。数据的含义就不解释了。

3.合并COT和日线数据

df_merge = pd.merge(df_d1_cut, df_cot_cut, on=[‘COT_NAME’, ‘DATE’], how=’outer’)

df_merge.fillna(0, inplace=True)

合并后的数据是这样的。

4.绘制图表

fig, axes = plt.subplots(3, 1, sharex=True, gridspec_kw={‘height_ratios’: [4, 1, 1]})

plt.subplots_adjust(wspace=0)

mpf.candlestick2_ochl(axes[0], df_merge[‘Open’], df_merge[‘Close’], df_merge[‘High’], df_merge[‘Low’],

width=0.5, colorup=’g’, colordown=’r’, alpha=0.6)

bar_width = 0.3

x1 = np.arange(len(df_merge[‘DATE’]))

x2 = np.arange(len(df_merge[‘DATE’]))

axes[1].bar(x1, df_merge[‘LL-LS’], width=bar_width, color=’g’)

axes[2].bar(x2, df_merge[‘LL+LS’], width=bar_width, color=’b’)

axes[2].set_xticks(range(0, len(df_merge[‘DATE’])))

axes[2].set_xticklabels(df_merge[‘DATE’].str[2:], rotation=90, fontsize=’xx-small’)

axes[0].set_title(“EURUSD [‘LL-LS’,’LL+LS’]”)

axes[0].grid(which=’both’)

axes[1].grid(which=’both’)

axes[2].grid(which=’both’)

fig.tight_layout()

plt.show()

最后效果是这样的。

5.结论

通过抓取COT数据和日线数据合并清理并绘制成图表,有助于直观的理解两组数据的关联性。

通过实践学习了Python3的pandas库的数据处理方式和matplotlib库的绘图方式。整段代码不长,建议读者实际去操作一下,碰到问题再去网上查找方法,这样对于学习Python是很有帮助的。

以上。

文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树首页概览208256 人正在系统学习中 相关资源:wax_tasks:使用蜡Wa处理收集数据的实用程序任务-其它代码类资源…

来源:weixin_39892019

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2020年10月19日
下一篇 2020年10月19日

相关推荐