Python 库 VectorBT 大揭秘:如何用它开启黄金交易财富大门?

作者:老余捞鱼

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

写在前面的话:最近在研究黄金交易策略的时候,发现了一个看上去很厉害的Python库,叫 VectorBT,它就像是一个给交易策略加速的“神器”,今天就来给大家好好分享一下!

先给大家讲讲我为啥对这个 VectorBT 这么感兴趣。想象一下这样的场景:我们坐在电脑前,面对海量的交易数据,脑海中不断涌现出各种交易策略的灵感,但如何验证这些想法的可行性呢?

在过去,测试这些交易策略可谓是一项艰巨的任务。我们需要手动计算大量数据,考虑复杂的市场因素,不仅耗时耗力,而且结果往往不够精确。然而,VectorBT的出现彻底改变了这一局面,让整个过程变得异常简便!

接下来,我将为大家详细介绍如何利用VectorBT来构建和测试黄金交易策略。

一、黄金交易策略执行


第一步:工具准备

这一步就是安装我们要用的库。在代码里输入 “!pip install vectorbt numpy pandas matplotlib -q”,这里的 “-q” 能让安装过程悄悄进行,不打扰咱们。

安装好后,再把这些库都导入到代码里,就像这样:

import vectorbt as vbt
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

这就好比我们准备好了一套专业的工具,接下来就能大干一场啦!

第二步:用 VectorBT 开启 ”淘金“

接下来咱们得去 “找宝藏”,也就是获取黄金的价格数据。VectorBT 很厉害,用它的 “vbt.YFData.download” 功能,一行代码就能拿到五年的黄金期货(“GC=F”)每天的收盘价、最高价、最低价和成交量数据。代码如下:

ticker = "GC=F"
price = vbt.YFData.download(ticker, period="5y", interval="1d").get("Close")
high = vbt.YFData.download(ticker, period="5y", interval="1d").get("High")
low = vbt.YFData.download(ticker, period="5y", interval="1d").get("Low")
volume = vbt.YFData.download(ticker, period="5y", interval="1d").get("Volume")

拿到数据后,把它们整理到一个 pandas 的 DataFrame 里,再把那些没用的空数据去掉,代码是 “data.dropna (inplace=True)”,这样数据就干干净净,能用来分析啦!

第三步:指标计算

接下来就是神奇的指标计算环节啦!VectorBT 自带很多计算指标的工具,比如计算相对强弱指数(RSI),用 “vbt.RSI.run” 就能轻松搞定,14 天的 RSI 一下子就算出来了。代码如下:

rsi = vbt.RSI.run(data['Close'], window=14)
data['RSI'] = rsi.rsi

要是你想要一些更个性化的指标,也没问题!像成交量变化率(VROC)和威廉指标(Williams % R),自己写个函数就能算出来。

第四步:策略制定

有了指标,就要制定交易策略啦!这可是关键的一步。我用 VectorBT 制定了四个策略:

移动平均线策略:当价格大于 50 日移动平均线时,就买入;当价格小于 50 日移动平均线时,就卖出。

RSI 策略:RSI 小于 30 的时候,说明市场超卖,是买入信号;RSI 大于 70 的时候,市场超买,就卖出。

VROC 策略:成交量变化率大于 0,就买入;小于 0,就卖出。

威廉指标策略:威廉指标小于 -80,买入;大于 -20,卖出。

第五步:回测

制定好策略后,就可以用 VectorBT 进行回测啦!用 “vbt.Portfolio.from_signals” 这个函数,把我们的策略放进去,还能设置交易手续费、滑点(就是交易时实际价格和预期价格的差距)这些真实市场会遇到的因素,代码如下:

results = {}
for strategy_name, strategy_params in strategies.items():
    portfolio = vbt.Portfolio.from_signals(
        close=data['Close'],
        entries=strategy_params["entries"],
        exits=strategy_params["exits"],
        size=np.inf,
        fees=0.002,
        slippage=0.001,
        freq='D'
    )
    results[strategy_name] = portfolio

回测完,就到了看结果的时候啦!

第六步:可视化与统计

VectorBT 不仅能算出各种数据,还能把结果用图表展示出来,超级直观。让我们遍历这些策略,看看随着时间推移我们的投资组合表现如何:

# 第六步:分析和比较结果
for strategy_name, portfolio in results.items():
    print(f"--- {strategy_name} ---")
    print("性能指标:")
    print(portfolio.stats())
    print("\n")
    # 确保图表显示
    portfolio.value().plot(title=f"{strategy_name} - 投资组合价值随时间变化")
    plt.show()
    portfolio.trades.plot()
    plt.show()

二、黄金交易策略比较

我回测了从 2020 年 4 月到 2025 年 3 月这五年的黄金交易策略,发现不同策略表现差别很大。

威廉指标策略表现:在测试期内,该策略呈现出持续增长的态势,最终总回报率达到 18.14%。注意它在 2023 年年中市场下跌时的表现,以及在 2024 - 2025 年的强劲复苏。

VROC 策略表现:成交量变化率策略在测试期内价值损失超过一半,这表明仅基于成交量的信号可能并不可靠。平稳的下降趋势表明,无论市场状况如何,该策略始终表现不佳。

RSI 策略表现:在某些时期表现强劲,特别是在 2022 年和 2025 年初。水平的直线部分表示该策略退出市场的时期(既未达到超买也未达到超卖条件)。它抓住了几个显著的上升趋势,同时避开了一些下跌趋势。

移动平均线策略表现:该策略经历了最高的波动性,在 2021 年初大幅下跌后出现了急剧上涨。2024 - 2025 年的复苏表明,这种策略在趋势明显的市场中表现良好,但在市场盘整期会遇到困难。

三、用 VectorBT 拓展你的分析

除了上面这些基础的用法,VectorBT 还有很多高级玩法。比如:

3.1 参数优化

可以进一步优化策略的参数,找到最适合的指标数值.

strategies = {
    "MA策略": {
        # 买入信号:价格上穿短期移动平均线(例如,50日移动平均线)
        # 卖出信号:价格下穿短期移动平均线
        "entries": data['Close'] > data['Close'].rolling(window=50).mean(),
        "exits": data['Close'] < data['Close'].rolling(window=50).mean()
    },
    "RSI策略": {
        # 买入信号:RSI < 30(超卖)
        # 卖出信号:RSI > 70(超买)
        "entries": data['RSI'] < 30,
        "exits": data['RSI'] > 70
    }
}

3.2 多指标组合

将多个指标组合起来,制定更复杂的策略。

# 示例:结合RSI和威廉指标确定买卖信号
combined_entries = (data['RSI'] < 30) & (data['Williams %R'] < -80)  # 两者都表明超卖
combined_exits = (data['RSI'] > 70) | (data['Williams %R'] > -20)    # 任意一个表明超买

# 用组合策略进行回测
combined_portfolio = vbt.Portfolio.from_signals(
    close=data['Close'],
    entries=combined_entries,
    exits=combined_exits,
    size=np.inf,
    fees=0.002,
    slippage=0.001,
    freq='D'
)
print("组合策略性能:")
print(combined_portfolio.stats())

3.3 实施止损

还能设置止损,控制交易风险。

# 示例:带有5%止损的威廉指标策略
portfolio_with_sl = vbt.Portfolio.from_signals(
    close=data['Close'],
    entries=data['Williams %R'] < -80,
    exits=data['Williams %R'] > -20,
    sl_stop=0.05,  # 5%止损
    size=np.inf,
    fees=0.002,
    slippage=0.001,
    freq='D'
)
print("带止损策略的性能:")
print(portfolio_with_sl.stats())

3.4 源代码下载

以上的源代码请在我的Google Colab中申请下载(附言:CSDN),内附中文构建说明。

如觉得对您有所帮助,请留言或者私信向我要完整源代码,同时请我喝杯咖啡就好。

四、观点总结

VectorBT真的是一个非常强大的工具,它能让我们在交易策略的研究上更加科学、高效。通过用它回测黄金交易策略,我们能从历史数据中找到规律,发现更适合自己的交易方法。

  • 多策略测试:可以同时测试多个交易策略,快速对比不同策略的优劣。
  • 自动生成指标:自动生成详细的性能指标,帮助我们深入分析策略表现。
  • 可视化结果:用图表展示回测结果,让数据更加直观易懂。
  • 高级玩法多样:支持参数优化、指标组合和止损设置等高级功能,满足不同需求。
  • 适用范围广:不管是黄金、股票,还是数字货币、外汇交易,都能使用 VectorBT 来测试策略。

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


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

老余捞鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值