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

94 天前
 fancy2020

策略(简化版)如下:

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

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

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

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

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

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

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

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

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

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

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

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

如果实在介意高低开,就在次日的 bar 上加一个前日收盘价 pre_close 字段,以此字段平仓。
tdb11039gg
93 天前
@zictos 可视化在 k 线上能看到哪天买的哪天卖的,多清晰呀。backtrader 试了下还行,vnpy 有人推荐了还有操作界面我用不明白。动手能力强自己写框架,基中宝公众号这种的应该就是自己写的把。
encro
93 天前
如果你需要在 1bar 所做多次交易,那么可以用更细的 bar 。。。比如 1 分钟换成 15s
zictos
93 天前
@tdb11039gg #9 看需求吧,有需求可视化也可以自己写。我每笔交易都有具体的时间显示,可到看盘软件上去看对应时间的 k 线,我觉得这样就够了。
我有些细节也不知道能否用框架实现,比如先止盈部分仓位,比如借助多个级别,还有有时候满足某些条件会增加一些过滤条件。我觉得用模拟交易逐笔去执行并记录每笔交易的详细信息才更容易实现这些细节。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1066957

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX