策略(简化版)如下:
试了 TradingView/Pinescript ,以及几个 Python 框架包括(backtesting.py 和 backtrader),都会遇到同样的问题: 它们没法在同一个 bar 上做两笔交易:开仓和平仓,如果在一天开仓买入了,那么平仓的操作就只能等到第二天才能触发。
在 TradingView 上我只能用分钟级别来模拟:在 1 分钟级别上的第一个 bar 开仓买入,最后一个 bar 平仓卖出。这样做的问题是 TradingView 对 bar 的数量有限制,导致只能回测不到一个月的数据。如果加大时间的粒度(比如到 5 分钟级别),这样可以回测大概四个月的数据,但是时间粒度越粗会导致价格误差越大。
大家帮忙看一下这个策略本身有问题吗(不考虑盈利性等问题,单纯讨论技术实现)?我觉得这个不存在 look-ahead 等问题吧,因为在实盘中我也可以在开盘的时候买入,然后等到收盘的时候卖出,或者直接设置 Market Close Order 自动在收盘时平仓。
1
zictos 112 天前 1
你自己用 python 写嘛,不要用框架。
使用模拟交易的形式,遍历日线的 K 线,然后将这根 k 线的开盘价作为开仓价,收盘价作为平仓价,计算盈亏并记录这笔单子的所有信息,可以作为 dict 保存,然后所有交易记录使用一个 list ,将每笔交易的 dict 添加到这个 list ,最后再去统计 list 中的所有交易记录。 只要有数据,你想回测十几年甚至几十年都可以。 不过这个策略不大可能有概率优势,跟随机交易差不多。 |
2
fancy2020 OP |
3
zictos 112 天前
@fancy2020 #2
可视化可以用 matplotlib 之类的模块,我一般主要看资金曲线,其他可视化一般用不到,各种统计信息直接用文字显示就行了。 框架很多都是写死的,没那么灵活,反正我是不用框架,感觉不止增加了复杂性,还增加了额外的学习成本。 |
4
fancy2020 OP @zictos
谢谢,是个不错的思路,我之后会往这个方向试一下。 另外大概分享下我这个策略的想法。 因为我最近观察到日本股市的走势经常是跟随美股的,所以就想能不能这样: 1. 在日股开盘时,比较昨夜美股 SPX 的价格 2. 如果 SPX 的 close > open 就买入 NIKKEI225 ,反之则卖出 3. 在当天收盘时平仓 在 TradingView 上大概测了一下最近几个月的数据,表现好像还可以(可能主要因为最近几天日股大跌那一下)。所以想测试更多数据 |
5
agdhole 112 天前
我们量化是直接 Python pandas ,接入实时数据就行了。
|
6
zictos 112 天前 1
@fancy2020 #4 我看了一下 2021 年 2 月后美股还涨了好几个月,但 NIKKEI225 却都基本没涨了,整体是跌的。今年 6 月的时候 NIKKEI225 好像也开始跌了,但 spx 并没有跌。
你这频率也不算低了,一天一单的话,要是遇到不利期就会亏得很惨了,一旦两者的方向相反的时候。而且还是要有一个止损点比较好,防止单次的亏损过大。 感觉还不如做趋势,市场没明显趋势的时候就不做。不预测、只跟随,截断亏损、让利润奔跑。趋势交易是真的非常赚钱,很小的资金都可以做到很大,但本质跟追涨杀跌差不多。 |
8
Sawyerhou 111 天前
一般来说,1 个 bar 上的确不应该交易 2 次,bar 是回测最小单位,1 个 bar 上要么交易要么不交易,交易 2 次证明 bar 不是最小单位,粒度不够细。
可以采用小时线搭配 backtrader 试试。 或者以次日开盘价代替当日收盘价平仓试试,对策略表现影响不大。 如果实在介意高低开,就在次日的 bar 上加一个前日收盘价 pre_close 字段,以此字段平仓。 |
9
tdb11039gg 111 天前
@zictos 可视化在 k 线上能看到哪天买的哪天卖的,多清晰呀。backtrader 试了下还行,vnpy 有人推荐了还有操作界面我用不明白。动手能力强自己写框架,基中宝公众号这种的应该就是自己写的把。
|
10
encro 111 天前
如果你需要在 1bar 所做多次交易,那么可以用更细的 bar 。。。比如 1 分钟换成 15s
|
11
zictos 110 天前
@tdb11039gg #9 看需求吧,有需求可视化也可以自己写。我每笔交易都有具体的时间显示,可到看盘软件上去看对应时间的 k 线,我觉得这样就够了。
我有些细节也不知道能否用框架实现,比如先止盈部分仓位,比如借助多个级别,还有有时候满足某些条件会增加一些过滤条件。我觉得用模拟交易逐笔去执行并记录每笔交易的详细信息才更容易实现这些细节。 |