有个非常简单的量化策略,但是试了好几个框架和平台都无法实现,大家帮忙看看 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
fancy2020
V2EX    投资

有个非常简单的量化策略,但是试了好几个框架和平台都无法实现,大家帮忙看看

  •  
  •   fancy2020 2024-08-22 12:52:43 +08:00 2159 次点击
    这是一个创建于 426 天前的主题,其中的信息可能已经有所发展或是发生改变。

    策略(简化版)如下:

    1. 以每天的开市价格买入,然后在当天的收市价格平仓卖出。
    2. 要求策略运行在日线级别的数据上

    试了 TradingView/Pinescript ,以及几个 Python 框架包括(backtesting.py 和 backtrader),都会遇到同样的问题: 它们没法在同一个 bar 上做两笔交易:开仓和平仓,如果在一天开仓买入了,那么平仓的操作就只能等到第二天才能触发。

    在 TradingView 上我只能用分钟级别来模拟:在 1 分钟级别上的第一个 bar 开仓买入,最后一个 bar 平仓卖出。这样做的问题是 TradingView 对 bar 的数量有限制,导致只能回测不到一个月的数据。如果加大时间的粒度(比如到 5 分钟级别),这样可以回测大概四个月的数据,但是时间粒度越粗会导致价格误差越大。

    大家帮忙看一下这个策略本身有问题吗(不考虑盈利性等问题,单纯讨论技术实现)?我觉得这个不存在 look-ahead 等问题吧,因为在实盘中我也可以在开盘的时候买入,然后等到收盘的时候卖出,或者直接设置 Market Close Order 自动在收盘时平仓。

    11 条回复    2024-08-23 16:19:45 +08:00
    zictos
        1
    zictos  
       2024-08-22 13:09:20 +08:00   1
    你自己用 python 写嘛,不要用框架。
    使用模拟交易的形式,遍历日线的 K 线,然后将这根 k 线的开盘价作为开仓价,收盘价作为平仓价,计算盈亏并记录这笔单子的所有信息,可以作为 dict 保存,然后所有交易记录使用一个 list ,将每笔交易的 dict 添加到这个 list ,最后再去统计 list 中的所有交易记录。
    只要有数据,你想回测十几年甚至几十年都可以。
    不过这个策略不大可能有概率优势,跟随机交易差不多。
    fancy2020
        2
    fancy2020  
    OP
       2024-08-22 13:41:00 +08:00 via iPhone
    @zictos
    谢谢,万不得已也只能这样了,但是框架可以更方便的提供统计信息可视化等,不太想花太多时间在这些技术细节上。

    所以挺好奇为什么这么简单的策略(类似于日内交易)大部分框架都不能很好的支持呢
    zictos
        3
    zictos  
       2024-08-22 13:46:56 +08:00
    @fancy2020 #2
    可视化可以用 matplotlib 之类的模块,我一般主要看资金曲线,其他可视化一般用不到,各种统计信息直接用文字显示就行了。
    框架很多都是写死的,没那么灵活,反正我是不用框架,感觉不止增加了复杂性,还增加了额外的学习成本。
    fancy2020
        4
    fancy2020  
    OP
       2024-08-22 13:54:53 +08:00
    @zictos
    谢谢,是个不错的思路,我之后会往这个方向试一下。

    另外大概分享下我这个策略的想法。
    因为我最近观察到日本股市的走势经常是跟随美股的,所以就想能不能这样:

    1. 在日股开盘时,比较昨夜美股 SPX 的价格
    2. 如果 SPX 的 close > open 就买入 NIKKEI225 ,反之则卖出
    3. 在当天收盘时平仓

    在 TradingView 上大概测了一下最近几个月的数据,表现好像还可以(可能主要因为最近几天日股大跌那一下)。所以想测试更多数据
    agdhole
        5
    agdhole  
       2024-08-22 14:09:26 +08:00
    我们量化是直接 Python pandas ,接入实时数据就行了。
    zictos
        6
    zictos  
       2024-08-22 14:40:08 +08:00   1
    @fancy2020 #4 我看了一下 2021 年 2 月后美股还涨了好几个月,但 NIKKEI225 却都基本没涨了,整体是跌的。今年 6 月的时候 NIKKEI225 好像也开始跌了,但 spx 并没有跌。
    你这频率也不算低了,一天一单的话,要是遇到不利期就会亏得很惨了,一旦两者的方向相反的时候。而且还是要有一个止损点比较好,防止单次的亏损过大。

    感觉还不如做趋势,市场没明显趋势的时候就不做。不预测、只跟随,截断亏损、让利润奔跑。趋势交易是真的非常赚钱,很小的资金都可以做到很大,但本质跟追涨杀跌差不多。
    zictos
        7
    zictos  
       2024-08-22 14:50:34 +08:00
    @zictos #6 看错了,实际 NIKKEI225 今年 3 月 22 日到 6 月 22 日都基本没涨,甚至可以说在跌。而 spx 基本都在涨
    Sawyerhou
        8
    Sawyerhou  
       2024-08-22 16:27:39 +08:00
    一般来说,1 个 bar 上的确不应该交易 2 次,bar 是回测最小单位,1 个 bar 上要么交易要么不交易,交易 2 次证明 bar 不是最小单位,粒度不够细。

    可以采用小时线搭配 backtrader 试试。

    或者以次日开盘价代替当日收盘价平仓试试,对策略表现影响不大。

    如果实在介意高低开,就在次日的 bar 上加一个前日收盘价 pre_close 字段,以此字段平仓。
    tdb11039gg
        9
    tdb11039gg  
       2024-08-23 15:09:11 +08:00
    @zictos 可视化在 k 线上能看到哪天买的哪天卖的,多清晰呀。backtrader 试了下还行,vnpy 有人推荐了还有操作界面我用不明白。动手能力强自己写框架,基中宝公众号这种的应该就是自己写的把。
    encro
        10
    encro  
       2024-08-23 15:13:15 +08:00
    如果你需要在 1bar 所做多次交易,那么可以用更细的 bar 。。。比如 1 分钟换成 15s
    zictos
        11
    zictos  
       2024-08-23 16:19:45 +08:00
    @tdb11039gg #9 看需求吧,有需求可视化也可以自己写。我每笔交易都有具体的时间显示,可到看盘软件上去看对应时间的 k 线,我觉得这样就够了。
    我有些细节也不知道能否用框架实现,比如先止盈部分仓位,比如借助多个级别,还有有时候满足某些条件会增加一些过滤条件。我觉得用模拟交易逐笔去执行并记录每笔交易的详细信息才更容易实现这些细节。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5763 人在线   最高记录 6679       Select Language/a>
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms
    UTC 06:32 PVG 14:32 LAX 23:32 JFK 02:32
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86