费雪变换+价量趋势:优化量化交易的最新策略(内含源代码)

作者:老余捞鱼

原创不易,转载请标明出处及原作者。

写在前面的话:最近我们团队研发了一种基于费雪变换和量价趋势(PVT)优化量化交易的策略,而这套方法能带来显著的超额收益。经过参数调整和历史数据回测,这套策略在特斯拉股票上实现了五年近19倍的回报,远超单纯持有特斯拉股票的13倍收益。这让我更加坚信,通过科学的分析和技术指标,我们完全可以在市场中发现隐藏的机会并从中获利。想知道具体怎么操作吗?继续往下看吧!

一、策略解读

费雪变换+量价趋势(PVT)的核心思想是利用先进的算法指标捕捉市场动量和交易量,从而帮助量化交易做出更好的决策。

1.1 什么是费雪变换?

费雪变换(Fisher Transform)是一种用于技术分析的数学工具,旨在将价格数据转换为更易于分析的形式。它通过将价格的相对变化映射到一个标准化的范围内,使得交易者能够更好地识别超买或超卖的市场状态。费雪变换常用于股票、外汇和其他金融市场的交易策略中。其公式如下:

费雪变换在股市的主要应用:

  • 超买和超卖信号:通过分析费雪变换的值,交易者可以识别市场的超买或超卖状态。当费雪变换的值达到某个阈值时,可能表明市场已经过度反应,交易者可以考虑反向操作。
  • 趋势识别:费雪变换可以帮助交易者识别价格趋势的变化。当费雪变换的值发生显著变化时,可能预示着趋势的反转或持续。
  • 信号过滤:结合其他技术指标,费雪变换可以作为信号过滤器,帮助交易者提高交易决策的准确性。

费雪变换是一种强大的工具,能够帮助交易者更好地理解市场动态。通过将价格数据转换为标准化的形式,交易者可以更容易地识别潜在的交易机会。费雪变换并不是完美的,它需要接下来讲解的量价趋势进一步完善整体策略。

1.2 什么是量价趋势(PVT)?

量价趋势(Price Volume Trend,简称PVT)是一种技术分析指标,旨在通过结合价格和交易量的变化来帮助投资者判断市场趋势。PVT指标通过将价格变动与交易量相结合,提供了一种更为全面的市场动态视角,帮助投资者识别潜在的买入或卖出信号。

PVT的计算方法

当天PVT = 前一天PVT + 当天交易量 × (当天收盘价 - 前一天收盘价) / 前一天收盘价

PVT的计算过程为:

  • 确定基准值:通常以第一天的收盘价为基准。
  • 计算每日PVT变化
    • 如果当天的收盘价高于前一天的收盘价,PVT增加当天的交易量。
    • 如果当天的收盘价低于前一天的收盘价,PVT减少当天的交易量。
    • 如果收盘价没有变化,则PVT保持不变。
  • 累加PVT值:将每日的PVT变化累加,得到当前的PVT值。

PVT的主要应用

  • 趋势确认:当PVT与价格走势一致时,表明当前趋势可能会持续。例如,价格上涨且PVT也上涨,说明买盘强劲,趋势有可能继续。
  • 趋势反转信号:当PVT与价格走势出现背离时,可能预示着趋势反转的信号。例如,价格上涨但PVT下降,可能表明买盘力量减弱,趋势可能会反转。
  • 交易决策:投资者可以根据PVT的变化来制定买入或卖出的策略,尤其是在关键支撑和阻力位附近。

量价趋势(PVT)是一种有效的技术分析工具,能够帮助投资者更好地理解市场动态。通过结合费雪变换处理过的价格和交易量的变化,PVT不仅可以确认当前趋势,还可以提供潜在的反转信号。

二、策略开发

接下来我们将通过代码开发实现上面的策略。主要功能是:通过优化PVT和Fisher变换的参数,找到一个最佳的股票交易策略,并使用历史数据进行回测和可视化

这段代码主要用于股票数据的分析和策略优化,结合了技术指标计算、参数优化、回测和可视化。以下是对代码的详细解析:

1. 导入库

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import yfinance as yf
import vectorbt as vbt
from sklearn.model_selection import ParameterGrid

  • numpypandas:用于数值计算和数据处理。
  • seabornmatplotlib:用于数据可视化。
  • yfinance:用于从Yahoo Finance下载股票数据。
  • vectorbt:用于回测和策略分析。
  • ParameterGrid:用于生成参数网格,进行参数优化。

2. 定义技术指标计算函数

2.1 计算价格成交量趋势(PVT)

def calculate_pvt(df):
    pvt = [0]  # Initial PVT value
    for i in range(1, len(df)):
        pvt_value = pvt[-1] + ((df['Close'][i] - df['Close'][i-1]) / df['Close'][i-1]) * df['Volume'][i]
        pvt.append(pvt_value)
    return pd.Series(pvt, index=df.index)

  • PVT(Price Volume Trend)是一种结合价格和成交量的技术指标,用于衡量价格趋势的强度。
  • 该函数通过遍历数据框中的每一行,计算PVT值,并返回一个Pandas Series。

2.2 计算Fisher变换及其信号线

def calculate_fisher_transform(df, period=10):
    high_rolling = df['High'].rolling(window=period).max()
    low_rolling = df['Low'].rolling(window=period).min()

# 。。。。。。

    return fisher, fisher_signal

  • Fisher变换是一种将价格数据转换为正态分布的技术指标,常用于识别价格反转点。
  • 该函数计算Fisher变换及其信号线(通过指数加权移动平均计算),并返回两个Pandas Series。

3. 下载股票数据

symbol = 'TSLA'
start_date = '2019-01-01'
end_date = '2025-01-01'
# 。。。。。。

  • 使用yfinance下载特斯拉(TSLA)从2019年到2025年的股票数据。
  • 数据包括开盘价、最高价、最低价、收盘价和成交量。
  • ffill用于向前填充缺失值。

4. 参数优化

shift_values = range(1, 31)  # PVT shift from 1 to 30
fisher_period_values = range(5, 31)  # Fisher period from 5 to 30
# 。。。。。。

  • 定义PVT的shift值和Fisher变换的period值的范围。
  • 使用ParameterGrid生成所有可能的参数组合。

5. 回测和优化

results = []

for params in grid:
    shift_value = params['shift']
    fisher_period = params['fisher_period']

    df['PVT'] = calculate_pvt(df)
    df['Fisher'], df['Fisher_Signal'] = calculate_fisher_transform(df, period=fisher_period)

# 。。。。。。

    results.append({
        'shift': shift_value,
        'fisher_period': fisher_period,
        'performance': portfolio.stats()['Total Return [%]']
    })

  • 遍历所有参数组合,计算PVT和Fisher变换,并生成交易信号(Entry和Exit)。
  • 使用vectorbt进行回测,计算每个参数组合的总回报率。
  • 将结果存储在results列表中。

6. 结果可视化(热图)

results_df = pd.DataFrame(results)
heatmap_data = results_df.pivot(index='fisher_period', columns='shift', values='performance')

plt.figure(figsize=(12, 8))
sns.heatmap(heatmap_data, annot=False, fmt=".1f", cmap="coolwarm", cbar_kws={'label': 'Total Return [%]'})
plt.title("Heatmap of Total Return by Shift and Fisher Period")
plt.xlabel("Shift")
plt.ylabel("Fisher Period")
plt.show()

  • 将结果转换为DataFrame,并生成热图,展示不同参数组合下的总回报率。

7. 最佳参数选择

best_params = results_df.loc[results_df['performance'].idxmax()]
print("Best parameters:")
print(f"Shift: {best_params['shift']}")
print(f"Fisher Period: {best_params['fisher_period']}")
print(f"Total Return: {best_params['performance']}")

  • 找到总回报率最高的参数组合,并打印最佳参数。

输出结果如下:

Best parameters:
Shift: 18.0
Fisher Period: 26.0
Total Return: 6144.9238142958

  • Shift: 18.0
    这是PVT(价格成交量趋势)的偏移值,表示在生成交易信号时,PVT值需要与18天前的PVT值进行比较。
  • Fisher Period: 26.0
    这是Fisher变换的计算周期,表示在计算Fisher变换时,使用了26天的最高价和最低价。
  • Total Return: 6144.9238142958
    这是在该参数组合下,策略的总回报率(百分比)。6144.92%表示策略在测试期间(2020-2025)的累计收益为初始资金的61.45倍。

8. 使用最佳参数进行回测

df['PVT'] = calculate_pvt(df)
df['Fisher'], df['Fisher_Signal'] = calculate_fisher_transform(df, period=30)
df['Entry'] = (df['PVT'] > df['PVT'].shift(26)) & (df['Fisher'] > df['Fisher_Signal'])
df['Exit'] = (df['PVT'] < df['PVT'].shift(26)) & (df['Fisher'] < df['Fisher_Signal'])

df = df[(df.index.year >= 2020) & (df.index.year <= 2025)]

portfolio = vbt.Portfolio.from_signals(
    close=df['Close'],
    entries=df['Entry'],
    exits=df['Exit'],
    init_cash=100_000,
    fees=0.001
)

print(portfolio.stats())
portfolio.plot().show()

  • 使用最佳参数重新计算PVT和Fisher变换,生成交易信号,并进行回测。
  • 打印回测结果,并绘制资金曲线。

以上代码结合了技术指标计算、参数优化、回测和可视化,展示了如何通过系统化的方法进行策略开发和优化。

9. 回测性能指标分析

回测输出结果如下:

Start                         2020-01-02 00:00:00
End                           2024-12-31 00:00:00
Period                                       1258
Start Value                              100000.0
End Value                          1994740.623761
Total Return [%]                      1894.740624
Benchmark Return [%]                  1307.892888
Max Gross Exposure [%]                      100.0
Total Fees Paid                      42888.457775
Max Drawdown [%]                        38.771981
Max Drawdown Duration                       664.0
Total Trades                                   26
Total Closed Trades                            25
Total Open Trades                               1
Open Trade PnL                      706830.425741
Win Rate [%]                                 56.0
Best Trade [%]                         118.168326
Worst Trade [%]                        -18.001128
Avg Winning Trade [%]                   29.905057
Avg Losing Trade [%]                    -5.907255
Avg Winning Trade Duration              42.214286
Avg Losing Trade Duration               11.272727
Profit Factor                            2.945644
Expectancy                           47516.407921

以下是对回测结果的详细说明:

9.1 时间范围

  • StartEnd:回测的时间范围是从2020年1月2日到2024年12月31日。
  • Period:回测期间共有1258个交易日。

9.2 资金变化

  • Start Value:初始资金为100,000美元。
  • End Value:回测结束时,资金增长到1,994,740.62美元。
  • Total Return [%]:策略的总回报率为1894.74%,即初始资金增长了约18.95倍。
  • Benchmark Return [%]:基准回报率为1307.89%,表示如果单纯持有特斯拉股票(不进行任何交易),收益为初始资金的13.08倍。

9.3 风险指标

  • Max Gross Exposure [%]:策略的最大总敞口为100%,表示策略始终满仓操作。
  • Total Fees Paid:总交易费用为42,888.46美元,这是基于每次交易0.1%的手续费计算的。
  • Max Drawdown [%]:最大回撤为38.77%,表示策略在回测期间的最大资金回撤幅度。
  • Max Drawdown Duration:最大回撤持续时间为664天,即策略从最高点到恢复最高点的时间。

9.4 交易统计

  • Total Trades:总交易次数为26次。
  • Total Closed Trades:已完成交易为25次。
  • Total Open Trades:当前有1笔未平仓交易。
  • Open Trade PnL:未平仓交易的当前盈亏为706,830.43美元。

9.5 胜率和盈亏

  • Win Rate [%]:胜率为56%,表示56%的交易是盈利的。
  • Best Trade [%]:最佳单笔交易的收益率为118.17%。
  • Worst Trade [%]:最差单笔交易的亏损率为-18.00%。
  • Avg Winning Trade [%]:平均盈利交易的收益率为29.91%。
  • Avg Losing Trade [%]:平均亏损交易的亏损率为-5.91%。

9.6 交易持续时间

  • Avg Winning Trade Duration:平均盈利交易的持续时间为42.21天。
  • Avg Losing Trade Duration:平均亏损交易的持续时间为11.27天。

9.7 其他指标

  • Profit Factor:盈利因子为2.9456,表示每亏损1美元,可以盈利2.9456美元。盈利因子大于1表示策略总体是盈利的。
  • Expectancy:期望值为47,516.41美元,表示每笔交易的平均预期收益。

10. 性能可视化

如下图所示:

  • 策略表现:该策略在2020-2025年期间表现优异,总回报率为1894.74%,远超基准回报率(1307.89%)。
  • 风险控制:最大回撤为38.77%,持续时间为664天,表明策略在极端市场条件下可能会有较大的资金回撤。
  • 交易频率:策略交易频率较低,共26笔交易,胜率为56%,平均盈利交易的收益率较高(29.91%)。
  • 最佳参数:PVT的偏移值为18,Fisher变换的周期为26,这是通过参数优化得到的最佳组合。

总体来看,该策略在测试期间表现非常出色,但需要注意其较高的回撤风险和较长的回撤持续时间。在实际应用中,可能需要进一步优化风险控制机制。

11. 实战工具(源代码)下载

源代码请在我的Google Colab中申请使用和下载:
https://colab.research.google.com/drive/1IPOtCgxZT0Ixr1I1MMPUlik68OW9kuD7?usp=sharing

三、观点总结

本文深入探讨了如何利用费雪变换(Fisher Transform)和量价趋势(PVT)构建量化交易策略,并通过历史数据回测展示了该策略在特斯拉股票上的卓越表现——五年内实现了近19倍的回报。文章不仅详细解释了技术指标的原理,还提供了具体的实现方法和优化建议,适合对量化交易感兴趣的读者学习和实践。

  • 核心策略:结合费雪变换和量价趋势(PVT),捕捉市场趋势反转和延续信号。
  • 历史回测:在特斯拉股票上测试,五年内实现19倍回报,远超单纯持有的13倍收益。
  • 技术指标:费雪变换用于识别价格极端值,PVT用于衡量价格与成交量的关系。
  • 参数优化:通过调整参数和回测,提升策略的稳定性和收益。
  • 实用工具:文章提供了代码实现和工具,方便读者直接应用和验证策略。

感谢您阅读到最后,希望这篇文章为您带来了新的启发和实用的知识!如果觉得有帮助,请不吝点赞和分享,您的支持是我持续创作的动力。祝您投资顺利,收益长虹!如果对文中内容有任何疑问,欢迎留言,我会尽快回复!


本文内容仅限技术探讨和学习,不构成任何投资建议。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老余捞鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值