Python实现基于动态时间规整的股市交易策略测试

本文介绍了一种基于Python和动态时间规整(DTW)的股市交易策略,通过对比沪深300历史数据进行交易决策。策略以每日涨跌率构建时间序列,寻找相似序列并进行模拟交易,最终用夏普比率评估策略效果,结果显示策略优于固定买卖的基准策略。
摘要由CSDN通过智能技术生成

Python实现基于动态时间规整的股市交易策略测试

一、策略简介

该项目采用Python语言,利用动态时间规整算法对沪深300市场构建一种交易策略,并采用夏普比率来对该策略模拟交易的结果进行评估。

本项目只是对交易策略的初探,不涉及投资组合、风险缓释和资金管理等等,也不被视为任何类型的投资建议!欢迎相关专业人士指教。

二、策略原理

动态时间规整是一种衡量两段时间序列的相似度的算法,具体运算细节这里不多赘述。

我们将过去一段时间的沪深300每日涨跌率(当天收盘价与前一天收盘价相比)按照特定天数分成若干个时间序列,并设置持有时间。

为描述方便,商定:在时间序列结尾买入,过了持有时间后卖出,算作一次完整“交易”。

该策略会将正在被测试的时期与过去的若干已知时间序列进行动态时间规整并找到相似度高的时间序列,若这些时间序列的“交易”得到了正收益,我们就期望在现时期进行一次“交易”。

三、代码实现

使用到的库:

import pandas as pd
import matplotlib.pyplot as plt

from fastdtw import fastdtw
from scipy.spatial.distance import euclidean
import numpy as np
import math

pandas和numpy帮助我们进行数据处理,plt用来画图,fastdtw用来进行动态时间规整。

spy = pd.read_csv('300.csv')
spy = spy.set_index(['Date'])
spy_c = spy['Close']

读取沪深300从2005年到2021年的历史数据,并取出收盘价数据。可以画个图看一下:
在这里插入图片描述
分别设置三个参量:时间序列的长度,持有天数,判定相似度高的阈值。

tlen = 5
hold = 7
thre = 5

计算每日涨跌率并按照tlen分成若干时间序列,并计算每个时间序列对应的一次完整“交易”的回报。将两者放入tseries中:

tseries = []
for i in range(tlen,len(spy_c)-hold-1,tlen):
    pctc = spy_c.iloc[i-tlen:i].pct_change()[1:].values*100
    res = (spy_c[i+hold+1] - spy_c[i])/spy_c[i] * 100
    tseries.append((pctc,res))

对每个序列都与其他序列依次计算相似度,并保存两个序列的“交易”回报。dist越低代表相似度越高。
然后清理掉以下情况的数据:

  1. 相似度为0,即相同的两个序列。
  2. 两个序列太近,中间还没超过一个完整的持有周期。
  3. 距离超过阈值,即相似度过低的两个序列。
  4. 第一个序列的“交易”回报为负。
def dtw_dist(x, y):
    distance, path = fastdtw(x, y, dist=euclidean)
    return distance

dist_pairs = []
for i in range(len(tseries)):
    for j in range(len(tseries)):
        dist = dtw_dist(tseries[i][
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值