VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 6
声望: 0

您好,在使用spread trading过程中遇到了如下几个问题想请教一下:

  1. 目前有发生过同样的策略和回测参数,回测结果完全不一样的情况,请问各位有遇到过这样的问题吗?

  2. run_bf_optimization可以成功运行,但是同样参数环境下,每次跑出的结果会有些许差异,代码如下:

import importlib
from datetime import datetime

from vnpy_spreadtrading.backtesting import BacktestingEngine
from vnpy_spreadtrading.base import LegData, SpreadData
from vnpy.trader.optimize import OptimizationSetting
from boll_pair import BollPair
import types

spread = SpreadData(
    name="test",
    legs=[LegData("y888.DCE"), LegData("m888.DCE")],
    variable_symbols={"A": "y888.DCE", "B": "m888.DCE"},
    variable_directions={"A": 1, "B": -1},
    price_formula="A-B",
    trading_multipliers={"y888.DCE": 1, "m888.DCE": 2.4},
    active_symbol="y888.DCE",
    min_volume=1,
    compile_formula=False  
)

rate_1 = 0.01 / 100
rate_2 = 0.01 / 100
rate = (rate_1 + rate_2) / 2

engine = BacktestingEngine()
engine.set_parameters(
    spread=spread,
    interval="1h",
    # start=datetime(2020, 1, 1),
    start=datetime(2020, 1, 1),
    end=datetime(2024, 3, 20),
    rate=rate,
    slippage=1,
    size=10,
    pricetick=1,
    capital=1_000_000,
)

engine.add_strategy(BollPair, {})

engine.load_data()
engine.run_backtesting()
df = engine.calculate_result()
engine.calculate_statistics()
engine.show_chart()

setting = OptimizationSetting()
setting.set_target("sharpe_ratio")
setting.add_parameter("boll_window", 10, 100, 5)
setting.add_parameter("boll_dev", 1.0, 5.0, 0.5)
setting.add_parameter("ratio", 0.02, 0.2, 0.02)

engine.run_bf_optimization(setting)

3.另外想请问,如果想用15min作为周期该怎么操作呢?我看interval可选的参数只有tick,1m,1h,d,w。

感谢解答!

Member
avatar
加入于:
帖子: 4713
声望: 287

回测结果不一样首先查看一下委托记录和成交记录吧
暴力穷举结果应该是一致的,你这边说的结果不一致是指同样参数跑出来最优结果不一致吗?
如果数据库里的是十五分钟的数据,intervel就选1m,策略on_bar函数中会推送十五分钟数据。如果数据库里是一分钟数据,interval选1m,在策略内通过bg合成十五分钟数据(详见项目文档),策略on_window_bar会推送十五分钟数据

Member
avatar
加入于:
帖子: 6
声望: 0

感谢回复,分钟线合成问题已解决。关于第一点回测结果不一样,就是同一套参数跑回测会有不同的结果,每次的委托记录和成交记录也不一样,本地数据库和从米筐download数据来回测都有这个情况。暴力穷举参数优化结果不一样应该也是因为这个问题。 请问您有见过这种情况吗?

Member
avatar
加入于:
帖子: 6
声望: 0

我用我贴出来的代码跑范例里的moving_average_strategy, 回测结果不一样,参数优化结果也是每次不一样,有些费解,求老师解答

Member
avatar
加入于:
帖子: 4713
声望: 287

可以自己打印排查,首先打印两次回测时的历史数据,再看策略指标

Member
avatar
加入于:
帖子: 6
声望: 0

jupyter notebook 单次回测加上engine.clear_data()就不会出现结果不一致的问题了。参数优化还是有问题,穷举的话大部分结果都是0,加载过程中有很多组参数会同时秒完成,请问这种情况是不是因为很多参数组被略过了然后默认结果是0?有结果的参数组在另一次参数优化后结果会是0。请问老师有解决这个问题的方法吗?

Member
avatar
加入于:
帖子: 4713
声望: 287

可以用图形界面回测试试看是否能复现上述问题

Member
avatar
加入于:
帖子: 6
声望: 0

感谢回复,请问图形界面回测是什么

Member
avatar
加入于:
帖子: 21
声望: 3

huaxuwei wrote:

感谢回复,请问图形界面回测是什么
就是双击veighna station快捷方式启动veighna,选择“交易”,勾选CtaBacktester,再点击“启动”:
description
后续操作可以参考使用文档: https://www.vnpy.com/docs/cn/community/app/cta_backtester.html

Member
avatar
加入于:
帖子: 6
声望: 0

ctabacktester一直没有问题,我的意思是spreadtrading模块的参数优化有问题,会自动略过很多参数组。veighna station里的spreadtrading 没有参数优化功能吧?

Member
avatar
加入于:
帖子: 4713
声望: 287

可以先确认回测脚本是否和examples文件夹下的一致,然后参考5楼进行打印排查

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】