作者sma1033 (死马)
看板Trading
标题Re: [问题] 新手程式交易回测与交易请益
时间Sun Sep 30 17:02:30 2018
其实我觉得看起来应该还是回测的方法有问题,因为文长所以打一篇回覆
回测的方法有几种,分成以下
1. 最粗糙的回测方式:
将过去可得的资料全部拿来开发策略,跑策略最佳化
开发完後直接拿最佳化过的测试数据当成策略绩效(自爽),然後就直接上线
比方说,拿2008.01.01 ~ 2018.09.30(Today)的资料去开发策略,然後就直接开始使用
这种开发方式,通常真的上线之後都会赔的很惨
原因是在於这样开发的测略很容易只有针对「过去」行情做最佳化
但却不知道「未来」与「过去」的数据之间有何关连性,所以才会没有用
常说的「过去不代表未来」就是在讲这件事
2. 稍微进进阶的回测方式(比较没那麽粗糙,但还是满粗糙的)
将过去的时间区间分成训练与测试区间
将你的策略在「训练区间」的数据上做最佳化(开发)
然後用「测试区间」的策略绩效当作绩效标准(评估)
举个实例,假如说用2008.01.01 ~ 2017.12.31的资料去开发策略
然後你把开发完的策略套用在2018.01.01 ~ 2018.09.30(Today)当成策略绩效
找到一套「策略开发方式」,让基於2008.01.01 ~ 2017.12.31资料所开发的策略
能够在2018.01.01 ~ 2018.09.30(Today)有好的绩效表现之後
就用同一套开发策略的逻辑,搭配2008.01.01 ~ 2018.09.30(Today)的数据重新开发一次
然後用新的策略上线,祈祷上线之後的绩效会跟之前绩效有相似表现
我认为方法(2)比方法(1)稍微来的好一些
但是实际上测试得到的绩效可能还是会不具代表性
因为如果选的时间窗格长度稍微不太一样
或是取的时间区间不同,得到的绩效数字可能会很不稳定
3. 比较完整一点的回测方式
也就是所谓的Walking Forward Analysis(WFA)
找到一套策略开发方式是在向前移动的时间窗格情况下平均有最佳表现
也就是说,你能够找到一套一致的策略开发方式
使其在以下条件下平均来说达到最佳绩效
1. 用 2008.01.01 ~ 2013.12.31 的资料开发策略
然後用 2014.01.01 ~ 2014.12.31 的资料来跑测试,当成策略绩效
2. 用 2009.01.01 ~ 2014.12.31 的资料开发策略
然後用 2015.01.01 ~ 2015.12.31 的资料来跑测试,当成策略绩效
3. 用 2010.01.01 ~ 2015.12.31 的资料开发策略
然後用 2016.01.01 ~ 2016.12.31 的资料来跑测试,当成策略绩效
4. (继续移动窗格...)
5. (继续移动窗格...)
我是觉得在做到 3 (WFA) 之前最好都不要上线啦...
毕竟只有 WFA 才能把「过去」与「未来」的数据做可靠连结
得到的策略绩效也才比较稳定可靠,有实际的参考价值
其实 WFA 根本是早就被讲到烂的东西
能做到 WFA 只是代表你的策略开发流程有一定的可靠度
但是即使做完 WFA,距离真的能「稳定」上线赚钱我是觉得还有一大段
至於连WFA都没做的,那就 ...
※ 引述《willchen (眉毛哥)》之铭言:
: (原文发在option版,如有违反请版主告知,谢谢)
: 各位期权交易的先进前辈好,
: 小弟在2016年十月国庆连假开始自学MC程式交易。
: 当初自己乱搞开发出一支策略之後开始陆续跟朋友请教,
: 加上研读一些相关资料之後学习开发新策略,
: 删删减减之後去芜存菁出八支策略,
: (CDP或均线价格突破,价差,外资未平仓筹码策略等等)
: 组合起来之後回测从1999/1/1到2018/09/28,
: 滑价与交易费进出设定为一千。
: 不过非常倒楣的是刚好今年7.8.9月的行情非常糟糕,
: 刚好小弟把全部组合完成的时间差不多就是在这个期间,
: 现在赔到小弟开始怀疑人生.....Orz.....
: 不知道到底是回测只是完全自爽的呢,
: 还是真的是虽小遇到行情就是这麽糟糕?
: 目前只想到只能降低杠杆跑到年底看看....
: 也想不出其他有什麽建议或方法能够继续改进。
: 想请问各位先进大大们不吝指教,
: 以上先谢谢各位的时间与意见。
: 全部的回测数据如下
: https://imgur.com/PK1ZMPO
: https://imgur.com/tZ9Z5eg
: https://imgur.com/VwVtBJm
: https://imgur.com/ZGQTWxq
: https://imgur.com/WSXLkeI
: https://imgur.com/Gp9qS2J
: https://imgur.com/hdXqRV6
: https://imgur.com/Lu8tDNm
: https://imgur.com/vfM568M
: https://imgur.com/EmKYBgs
: https://imgur.com/va0hSB6
: https://imgur.com/kHtIXHw
: https://imgur.com/dle2U8J
: https://imgur.com/XcEHIkH
: https://imgur.com/mrzy7a4
: https://imgur.com/XvoXoqa
: https://imgur.com/rOTA0bl
: https://imgur.com/MxkKJHA
: https://imgur.com/rOTA0bl
: https://imgur.com/1vBCvkf
: https://imgur.com/EXJFANr
: https://imgur.com/4KtJSxr
: https://imgur.com/B9c5Idp
: https://imgur.com/gQagjOS
: https://imgur.com/dXtErua
: https://imgur.com/AipakZK
: https://imgur.com/zpFbBHB
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 118.160.90.66
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Trading/M.1538298154.A.36C.html
※ 编辑: sma1033 (118.160.90.66), 09/30/2018 17:03:17
※ 编辑: sma1033 (118.160.90.66), 09/30/2018 17:03:47
※ 编辑: sma1033 (118.160.90.66), 09/30/2018 17:04:51
1F:推 willchen: 感恩!我再来好好思考一下!谢谢 09/30 17:12
2F:→ sma1033: 如果是(1)的开发方式,我可以轻易开发出绩效爆表的策略喔 09/30 17:14
3F:→ sma1033: 但是一点屁用都没有... XD 09/30 17:14
4F:推 willchen: 感恩!所以简单来说就是每五年回测做外插法五年! 09/30 17:21
5F:→ willchen: 我只是以为从1999年开始的话数据比较多统计比较有意义? 09/30 17:22
6F:→ sma1033: 数据比较多 -> 有统计上的意义,这推论有前提必须满足 09/30 17:23
7F:→ sma1033: 前提是你的数据本身必须要一致,如果我说2001年的资料和 09/30 17:24
8F:→ sma1033: 2011年的资料,其实并非同样的资料,所以不能一起使用呢? 09/30 17:25
9F:→ sma1033: 同一个商品,在不同的时间区段,反映出来的行为本就可能 09/30 17:25
10F:推 willchen: 不好意思!虽然还是不太理解!我的资料就是凯卫的台指期与 09/30 17:26
11F:→ sma1033: 是不同的,所以想「一体适用」的把所有数据囊括近来统计 09/30 17:26
12F:→ willchen: 台湾加权指数现货的资料!这样能算是同样的资料吗!? 09/30 17:27
13F:→ sma1033: 概念上可能本身是错误的 09/30 17:27
14F:→ sma1033: 假设「市场行为模式不会随时间改变」,这想法未必正确 09/30 17:28
15F:→ sma1033: 2001年的A走势会导致下跌,不代表2011年A走势就会下跌喔 09/30 17:30
16F:→ sma1033: 搞不好同样是A走势,在2001年与在2011年有完全相反的结果 09/30 17:32
17F:→ sma1033: 这时候你要如何知道明天的市场行为与2001年比较接近还是 09/30 17:33
18F:→ sma1033: 2011年,如果你选了比较不同的时间区间测试当作可信结果 09/30 17:34
19F:→ sma1033: 当然明天的策略绩效就很有可能跟过去的测试状况差异很大 09/30 17:35
20F:→ jamestian: 楼上的太学理派了吧,技术分析本来就是随机碰机率的. 09/30 18:12
21F:→ jamestian: 只要找出部分最佳解就可以了,要找到全域最佳解,大概是 09/30 18:12
22F:→ jamestian: 上帝才办得到.讲难听点胜率overall大於50%就已经及格了 09/30 18:13
23F:→ jamestian: 我跑了76万跟k棒,胜率很满意就行了,只要最大损失是能 09/30 18:15
24F:→ jamestian: 够能受的值,就行了. 09/30 18:15
25F:→ jamestian: 就像一个投手比了76万场比赛,胜率超过7成,你会怀疑它吗 09/30 18:17
26F:→ jamestian: 你这麽厉害,放一张图来看看阿.没图都是假的,就连有图都 09/30 18:18
27F:→ jamestian: 不一定为真实,何况,没有图的在说理论,很难信服. 09/30 18:19
28F:→ sma1033: 我是觉得如果要用技术分析,就免不了要面对「过去」与 09/30 18:19
29F:推 nds3ds: 推高手 09/30 18:20
30F:→ sma1033: 「未来」的差异这件事,没有数据佐证,只凭猜测很危险 09/30 18:20
31F:→ sma1033: WFA就是强迫你在最佳化的时候要考虑「过去」与「未来」 09/30 18:21
32F:推 john668: 其实1跟2是一样的 因为只满足2不满足1的你也不会上线 09/30 18:35
33F:→ sma1033: 反正1跟2都是不完整的回测方法,我自己的标准是至少做到3 09/30 18:51
34F:→ sma1033: 回james,我认为问题的关键在於如何知道是「一个投手」 09/30 19:03
35F:→ sma1033: 而不是「两个投手」或是「多个投手」,商品名称相同不 09/30 19:04
36F:→ sma1033: 代表在不同时间依然会具有相同特性... 09/30 19:06
37F:→ sma1033: 至少我自己做实验得到的结论就是如此 09/30 19:07
38F:→ sma1033: 市场唯一恒久不变的特性,就是市场本身一直在改变 09/30 19:09
※ 编辑: sma1033 (118.160.90.66), 09/30/2018 21:19:58
39F:→ micbrimac: 我之前用1死有点惨 现在用3 不知道如何QQ 09/30 23:00
40F:→ micbrimac: 通常WFO 大家都怎麽去评估策略 跟以哪些参数来参考 09/30 23:01
41F:→ sma1033: 做WFA也要正确评估结果才行呀...不然测了也没用 09/30 23:10
42F:→ micbrimac: WFA跑完 不会评估(掩面 09/30 23:18
43F:→ sma1033: 你可以把报表贴上来让大家看看,说不定有好心人愿意提点~ 09/30 23:25
44F:→ micbrimac: 想请教一下 WFO的anchored跟非anchored移动窗格 大家 09/30 23:42
45F:→ micbrimac: 都用哪个比较多 09/30 23:42
46F:嘘 darkMood: 以上讲的全都是不知道自己怎麽进场怎麽离场的回测评估吧 10/01 01:55
47F:→ darkMood: 尤其是那些程式交易只是数据> = <就进场离场的 10/01 01:56
48F:→ darkMood: 如果你很明确知道自己的程式进场理由/离场理由,拉开加 10/01 01:56
49F:→ darkMood: 权指数 搭配 曲线图,不用上面那一堆评估啦 10/01 01:57
50F:→ darkMood: 那麽,程式交易者,到底知不知道为什麽进场了呢??????? 10/01 01:57
51F:推 yuiop0929: 如果当时有看到这篇文,也许我不会离开程式交易 10/01 09:22
52F:推 israelii: 就很有勇气~ 10/02 16:52