期货量化交易软件:时间序列挖掘使用Python制作带有趋势标记的数据集(2)

本文讲述了如何将MetaTrader5(MT5)API获取的numpy数组数据转换为pandasDataFrame,以便于进行时间序列分析,包括日期格式调整和趋势检测,使用了pytrendseries库进行趋势识别并可视化。
摘要由CSDN通过智能技术生成

数据格式转换

虽然赫兹量化已经从客户那里获得了数据,但数据格式不是我们需要的。数据是“numpy.ndarray”,如下所示:

"[(1692368100, 1893.51, 1893.97,1893.08,1893.88,548, 35, 0) (1692369000, 1893.88, 1894.51, 1893.41, 1894.51, 665, 35, 0) (1692369900, 1894.5, 1894.91, 1893.25, 1893.62, 755, 35, 0) (1692370800, 1893.68, 1894.7 , 1893.16, 1893.49, 1108, 35, 0) (1692371700, 1893.5 , 1893.63, 1889.43, 1889.81, 1979, 35, 0) (1692372600, 1889.81, 1891.23, 1888.51, 1891.04, 2100, 35, 0) (1692373500, 1891.04, 1891.3 , 1889.75, 1890.07, 1597, 35, 0) (1692374400, 1890.11, 1894.03, 1889.2, 1893.57, 2083, 35, 0) (1692375300, 1893.62, 1894.94, 1892.97, 1894.25, 1692, 35, 0) (1692376200, 1894.25, 1894.88, 1890.72, 1894.66, 2880, 35, 0) (1692377100, 1894.67, 1896.69, 1892.47, 1893.68, 2930, 35, 0) ...(1693822500, 1943.97, 1944.28, 1943.24, 1943.31, 883, 35, 0) (1693823400, 1943.25, 1944.13, 1942.95, 1943.4 , 873, 35, 0) (1693824300, 1943.4, 1944.07, 1943.31, 1943.64, 691, 35, 0) (1693825200, 1943.73, 1943.97, 1943.73, 1943.85, 22, 35, 0)]"

因此,让我们使用pandas进行转换,添加的代码用绿色标记:

 
 

# Copyright 2021, MetaQuotes Ltd. # https://www.mql5.com import MetaTrader5 as mt import pandas as pd if not mt.initialize("D:\\Project\\mt\\MT5\\terminal64.exe"): print('initialize() failed!') else: print(mt.version()) sb=mt.symbols_total() rts=None if sb > 0: rts=mt.copy_rates_from_pos("GOLD_micro",mt.TIMEFRAME_M15,0,1000) mt.shutdown() rts_fm=pd.DataFrame(rts)

现在再次查看数据格式,如下所示:

 
 

print(rts_fm.head(10))

添加图片注释,不超过 140 字(可选)

输入数据必须是pandas的。DataFrame格式包含一列作为观测数据(float或int格式),因此我们必须将数据处理为pytrendseries要求的格式,如下所示:

 
 

td_data=rts_fm[['time','close']].set_index('time')

让赫兹量化看看前10行数据是什么样子的:

 
 

print(td_data.head(10))

添加图片注释,不超过 140 字(可选)

注意:“td_data”不是我们最后的数据样式,它只是我们获取数据趋势的过渡产品。

现在,赫兹量化的数据是完全可用的,但为了后续操作,最好将我们的日期格式转换为数据帧,因此我们应该在“td_data=rts_fom[['time','close']].set_index('time')”之前添加以下代码:

 
 

rts_fm['time']=pd.to_datetime(rts_fm['time'], unit='s')

我们的输出将如下所示:

time

close

2023-08-18 20:45:00

1888.82000

2023-08-18 21:00:00

1887.53000

2023-08-18 21:15:00

1888.10000

2023-08-18 21:30:00

1888.98000

2023-08-18 21:45:00

1888.37000

2023-08-18 22:00:00

1887.51000

2023-08-18 22:15:00

1888.21000

2023-08-18 22:30:00

1888.73000

2023-08-18 22:45:00

1889.12000

2023-08-18 23:00:00

1889.20000

本节的完整代码:

 
 

# Copyright 2021, MetaQuotes Ltd. # https://www.mql5.com import MetaTrader5 as mt import pandas as pd if not mt.initialize("D:\\Project\\mt\\MT5\\terminal64.exe"): print('initialize() failed!') else: print(mt.version()) sb=mt.symbols_total() rts=None if sb > 0: rts=mt.copy_rates_from_pos("GOLD_micro",mt.TIMEFRAME_M15,0,1000) mt.shutdown() rts_fm=pd.DataFrame(rts) rts_fm['time']=pd.to_datetime(rts_fm['time'], unit='s') td_data=rts_fm[['time','close']].set_index('time') print(td_data.head(10))

添加图片注释,不超过 140 字(可选)

标注数据

1. 获取趋势数据

首先导入“pytrendseries”包:

 
 

import pytrendseries as pts

赫兹量化使用“pts.detecttrend()”函数来查找趋势,然后为该函数定义“td”变量,该参数有两个选项-“downtrend”或“uptrend”:

 
 

td='downtrend' # or "uptrend"

我们需要另一个参数“wd”作为趋势的最大周期:

 
 

wd=120

还有一个参数可以定义,也可以不定义,但我个人认为最好定义它,这个参数指定了趋势的最小周期:

 
 

limit=6

现在我们可以将参数填充到函数中以获得趋势:

 
 

trends=pts.detecttrend(td_data,trend=td,limit=limit,window=wd)

然后检查结果:

 
 

print(trends.head(15))

from

to

price0

price1

index_from

index_to

time_span

drawdown

1

2023-08-21 01:00:00

2023-08-21 02:15:00

1890.36000

1889.24000

13

18

5

0.00059

2

2023-08-21 03:15:00

2023-08-21 04:45:00

1890.61000

1885.28000

22

28

6

0.00282

3

2023-08-21 08:00:00

2023-08-21 13:15:00

1893.30000

1886.86000

41

62

21

0.00340

4

2023-08-21 15:45:00

2023-08-21 17:30:00

1896.99000

1886.16000

72

79

7

0.00571

5

2023-08-21 20:30:00

2023-08-21 22:30:00

1894.77000

1894.12000

91

99

8

0.00034

6

2023-08-22 04:15:00

2023-08-22 05:45:00

1896.19000

1894.31000

118

124

6

0.00099

7

2023-08-22 06:15:00

2023-08-22 07:45:00

1896.59000

1893.80000

126

132

6

0.00147

8

2023-08-22 13:00:00

2023-08-22 16:45:00

1903.38000

1890.17000

153

168

15

0.00694

9

2023-08-22 19:00:00

2023-08-22 21:15:00

1898.08000

1896.25000

177

186

9

0.00096

10

2023-08-23 04:45:00

2023-08-23 06:00:00

1901.46000

1900.25000

212

217

5

0.00064

11

2023-08-23 11:30:00

2023-08-23 13:30:00

1904.84000

1901.42000

239

247

8

0.00180

12

2023-08-23 19:45:00

2023-08-23 23:30:00

1919.61000

1915.05000

272

287

15

0.00238

13

2023-08-24 09:30:00

2023-08-25 09:45:00

1921.91000

1912.93000

323

416

93

0.00467

14

2023-08-25 15:00:00

2023-08-25 16:30:00

1919.88000

1913.30000

437

443

6

0.00343

15

2023-08-28 04:15:00

2023-08-28 07:15:00

1916.92000

1915.07000

486

498

12

0.00097

您还可以通过函数“pts.vizplot.plot_trend()”得到结果图:

 
 

pts.vizplot.plot_trend(td_data,trends)

添加图片注释,不超过 140 字(可选)

同样,我们可以通过代码来查看上升趋势:

 
 

td="uptrend" wd=120 limit=6 trends=pts.detecttrend(td_data,trend=td,limit=limit,window=wd) print(trends.head(15)) pts.vizplot.plot_trend(td_data,trends)

  • 19
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值