作者drazil (在风雨飘摇的年代里)
看板Stock
标题[心得] 以技术分析做程式交易操作(Part.2)
时间Sun Feb 14 15:40:36 2021
上一篇在这边
https://webptt.com/cn.aspx?n=bbs/Stock/M.1609662954.A.C44.html
趁着年假有点时间补充一些关於操作策略的心得
上篇提到说一套策略是程式选股+出场操作策略组合而成
也就是整个程式操作要经过「选股→买入→持有→卖出」这几个阶段
如果只有「选股→买入」这个阶段是不够的
就算找到了一个选股方式很厉害,买了几天内涨的机率很高
然後咧??
我没办法保证用我自己人工判断出场的方式不会都放到涨上去又下来结果最後停损
也没办法量化这个方法的绩效
所以出场策略还是必要的,
有出场策略之後可以得到一个策略操作一次的绩效与持有时间
然後再计算平均的胜率与期望值
不过虽然说进出场策略是必要的
但是我在试参数的非常多次後的结论是,选股的重要性远高於进出场策略
一个策略的好坏,在选股的时候就几乎决定了
进出场策略再怎麽调都只能略为增减一点绩效,无法改变选出来个股整体的品质
如果选出来的个股接下来一个月只有40%的机率涨,
那操作策略再怎麽优化也不太可能把胜率变成50%
然後谈一下出场策略的参数设定
或许是个人能力不够,我觉得我在出场策略上能做的事情真的很有限
要用几个条件去应付买入之後千变万化的走法真的很有挑战性
而且很多看起来很直觉的东西要用程式去实践非常困难
比方说如果我要做一个「跌破支撑线」就出场的条件,
会碰到支撑线要怎麽定义、怎麽画的问题
像是大部分个股直接用眼睛辨识就不会觉得有明显支撑线,
用程式强制去生出一条支撑线就没有意义
有的个股前期慢慢涨,後面开始加速喷出。
那我要不要重新设定支撑线?如果要的话要用什麽条件决定要重设?
因为想下去觉得太复杂了,所以这个方法我放弃
到最後我也只做了三种方式,固定天数、固定回档比例与固定没创高天数
固定天数我主要是用在初步评估选股模型的有效性
我用几个条件凑出一个选股模型之後,先跑买入放20天卖出的策略
可以知道选出来的个股是不是趋势向上比较多,再做接下来的调整
固定回档比例(例如10%)就是从买入後的最高价位跌超过10%隔天卖出
没创新高(例如8天)就是买入後开始,只要连续8天没有创新高价位就卖出
我自己测试结果,没创高天数的方式会比回档比例来得好
因为飙股很可能短期上下大幅震荡,用回档比例的方式相对容易被洗掉
另外还有一点,只要选股模型够好,
就算用看起来最智障的买入固定天数绩效都不会太差
之前甚至我碰过一个模型我可以硬找了一个天数,
然後他的绩效比回档比例法来得好XDD
当然我知道这个天数是一种对过去资料过度最佳化的解
可是试出来的时候我有这到底是什麽鬼的错愕感XDDD
然後两种方式都一样,宽容度越高,平均获利绩效越好,但是持有的时间也越长
以我上一篇释出的模拟程式为例,如果分数门槛设定为40
程式里面我使用的是「9天没创新高则在第10天开盘卖出」
年份 总笔 涨 跌 涨比例 绩效 天数
2002 164 94 66 58.75% 5.91% 21.49
2003 449 267 171 60.96% 7.52% 22.87
2004 370 206 158 56.59% 4.53% 22.01
2005 338 173 157 52.42% 4.39% 20.35
2006 470 320 147 68.52% 9.01% 23.23
2007 458 284 164 63.39% 9.68% 23.10
2008 159 84 74 53.16% 1.79% 18.16
2009 920 629 285 68.82% 10.27% 24.14
2010 593 317 267 54.28% 4.49% 20.81
2011 297 146 148 49.66% 2.70% 19.88
2012 497 258 228 53.09% 2.54% 20.31
2013 674 369 288 56.16% 4.47% 20.71
2014 649 335 302 52.59% 3.56% 19.74
2015 449 212 231 47.86% 2.34% 19.33
2016 693 388 291 57.14% 3.89% 20.96
2017 767 461 296 60.90% 5.15% 20.88
2018 290 120 165 42.11% 1.80% 19.50
2019 871 491 367 57.23% 3.33% 20.96
2020 1061 596 447 57.14% 4.54% 18.50
总计 10169 5750 4252 57.49% 5.10% 20.97
如果改成7天就会变成这样
年份 总笔 涨 跌 涨比例 绩效 天数
2002 166 87 73 54.38% 4.73% 16.93
2003 454 259 183 58.60% 5.76% 18.37
2004 379 195 170 53.42% 4.25% 17.79
2005 340 168 161 51.06% 3.75% 16.51
2006 478 308 160 65.81% 7.42% 18.67
2007 460 270 181 59.87% 8.07% 18.65
2008 159 78 79 49.68% 1.71% 15.55
2009 929 623 286 68.54% 8.80% 19.51
2010 600 308 281 52.29% 4.01% 16.64
2011 300 134 160 45.58% 2.01% 16.08
2012 499 257 235 52.24% 2.48% 16.88
2013 680 364 302 54.65% 3.77% 16.79
2014 654 339 304 52.72% 3.17% 16.50
2015 457 215 233 47.99% 2.07% 15.70
2016 697 386 296 56.60% 3.61% 17.26
2017 774 451 309 59.34% 4.39% 16.88
2018 292 126 159 44.21% 2.31% 16.05
2019 876 487 369 56.89% 3.23% 17.36
2020 1072 596 453 56.82% 4.05% 15.46
总计 10266 5651 4394 56.26% 4.44% 17.12
天数太短可能会碰到小整理就出场错过短线整理後再喷第二段的机会
天数太长碰到走弱比较大幅回档的机率就变高
并没有一个绝对最好的数字
我自己测试大约7~10天都算好用的数字,(差不多是旗型整理的天数)
另外空头年短天数会比较好一点(因为碰到回档跟停损的时候跑得快)
多头年长天数会比较好(因为延伸久)
另外上面这些策略都是用来处理整理过後起涨波段操作模型的出场方式
其他的策略(像是抄底、整理区间高低价差法)可能不适用就是
--
之後如果我还有闲时间想到东西要补充的
或者程式改一改有什麽新的想法我就再补充在这个标题下好了
(不过也不知道会不会有下一篇就是)
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 110.26.62.237 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Stock/M.1613288438.A.178.html
※ 编辑: drazil (110.26.62.237 台湾), 02/14/2021 15:44:00
1F:→ SuperModel : 开放原始码给受试者验证。 02/14 15:59
我前一篇都已经丢一个模拟程式给人玩了XD
※ 编辑: drazil (110.26.62.237 台湾), 02/14/2021 16:24:10
2F:推 a125g : 请问你用什麽写的? 02/14 16:22
我用C#
如果我再晚几年开始这个专案的话,我可能会用Python吧我想
※ 编辑: drazil (110.26.62.237 台湾), 02/14/2021 16:27:40
3F:→ a125g : 有套用凯利公式吗?我觉得凯利公式蛮适合程式交易 02/14 16:28
4F:→ a125g : 的 02/14 16:28
※ 编辑: drazil (110.26.62.237 台湾), 02/14/2021 16:29:24
5F:推 Homeparty : 我用python,函数库多省时间,毕竟我是业余 02/14 16:30
6F:推 coyoteY : 用心推 02/14 16:33
7F:→ YAYA6655 : 没用 02/14 16:35
8F:推 a125g : 再推一个 难得看到程式交易的文章 02/14 16:49
9F:推 appleball200: 请用multicharts不要重造轮子 02/14 16:50
来不及了,时间都花下去写出一套完整的系统了XD
不过我自己也不建议要做程式操作交易的学我这种全部从头自己做的方式
能用现成的东西就用,把时间花在交易模型的设计上就好
其实这个系统最一开始是用来写交易日志用的XD
一开始的时候我自己纪录交易日志然後作检讨
想要在每一笔纪录上面加入线图标记我自己的买进买出点位
但是手动的话做一两次还好,要是每笔都做的话那真的很烦很花时间
所以我就写了抓股价的爬虫跟一个交易日志产生器。
每次交易完之後做交易资料输入,
就可以自动产生交易绩效的报表,上面有附有进出点位的K线图。
後来想说都股价资料跟K线图都有了,那就来试做选股程式好了
才有接下来选股模型以及更後来操作系统的开发
10F:推 eierom : 猛 02/14 17:20
11F:推 dougho : 涨比例5成 但每次绩效才3-4%这样划算吗? 02/14 17:42
我也希望写出平均期望值超过10%的程式呀
但是我的能力只能写出这种绩效的东西那我也只能用了
不过也不要太小看平均4%这个数字
假设20个交易日扣除交易成本之後平均赚4%好了
1.04^12 =1.60,年化+60%...........当然不可能这麽顺利XD
不过跑回测结果,正常情况下超过年化25%~30%应该是可以的
12F:推 km612tw : 用心推 02/14 17:45
13F:推 slayptter : 我 python c# MC三个结合 02/14 18:01
※ 编辑: drazil (110.26.62.237 台湾), 02/14/2021 18:15:59
※ 编辑: drazil (110.26.62.237 台湾), 02/14/2021 18:30:39
14F:推 zaq10442 : 我觉得固定天数出场也没什麽不好的吧 02/14 18:42
※ 编辑: drazil (110.26.62.237 台湾), 02/14/2021 19:08:10
15F:推 ARTORIA : 我觉得讯号太多了 这样你实际操作误差会很大 02/14 19:35
16F:推 Ray3627 : 20内回测绩效全部都是正值很猛了,可以跑看看了 02/14 20:10
17F:→ Ray3627 : 回测20年内 02/14 20:11
18F:→ liton : 你有做out of time吗? 02/14 20:27
这个东西是?
19F:推 cleanx : 是每笔平均绩效还是总绩效? 02/14 20:29
两个表格上面的是平均绩效
20F:推 Kmer : 回测可以再做几个月看看 02/14 20:59
21F:推 BuggyTaiL : 资金曲线和最大回撤可分享吗~ 02/14 22:06
最大回测是指?
资金曲线这个题目其实可以再打个一篇的说XD
不过可以去用前一篇的连结的模拟程式来跑一次就知道了
※ 编辑: drazil (110.26.62.237 台湾), 02/14/2021 23:17:58
22F:→ liton : 一般建模会把数据拆成三个部分,一部分是建模用的i 02/14 23:41
23F:→ liton : n sample,一部分是跟建模型同一段时间窗口但不同 02/14 23:41
24F:→ liton : 样本out of sample期间外样本。第三部分是期间外样 02/14 23:41
25F:→ liton : 本例如202001-202009当建模时期,202010-202012当o 02/14 23:41
26F:→ liton : ut of time,观察到202101。模型最重要的是out of 02/14 23:41
27F:→ liton : time的成果,建模绩效好但期间外样本表现差,只是 02/14 23:41
28F:→ liton : 代表过度拟合。 02/14 23:41
这东西我之前看深度学习的东西的时候有看过所以大概知道那个概念,不过我没有做@@
所以我也一直不能保证我的东西会不会有过度拟合的问题
上一篇最後面也提到说,我也会怕试出来在过去有效的方法
在接下来就开始失效了......
※ 编辑: drazil (110.26.62.237 台湾), 02/15/2021 00:05:13
29F:推 oyazi0219 : 但上面时间分野是否涉及财报空窗期等背景因素?会 02/15 00:06
30F:→ oyazi0219 : 不会干扰? 02/15 00:06
31F:→ liton : 都会有影响的,但最终目的是希望是对未来有预测力 02/15 00:21
32F:→ liton : 而不只对过去有预测力的模型,期间外预测才是核心 02/15 00:21
33F:→ liton : 其实建模最累的不是跑模型,而是清洗这些资料。 02/15 00:21
34F:推 xshower : 我也很意外,每月换股策略胜率非常高! 02/15 03:24
35F:→ liton : 期间外测试是做模型的都会做,包括简单的线性模型 02/15 08:07
36F:→ liton : 你没做就投钱等於是你拿钱直接做期间外测试 02/15 08:07
37F:推 HCG10G8bear : 他推分享 02/15 10:03
38F:推 ProTrader : 水平支撑线的简单找法 用K线价格与多个价格相减 02/15 11:51
39F:→ ProTrader : 相减後正价差很多负价差很少的水平价格 可当支撑线 02/15 11:57
40F:→ ProTrader : 如果是压力线就相反 负价差很多正价差很少 02/15 11:57
41F:→ ProTrader : 鸿海来说在2021之前2年期间从60找到100 可得到70 92 02/15 12:02
42F:→ ProTrader : 台积电这种就要用多个价格多种斜线找上升趋势线 02/15 12:05
43F:→ ProTrader : 多个价格多个斜率 02/15 12:06
44F:→ ProTrader : 正斜率找上升趋势 负斜率找下跌趋势 02/15 12:07
45F:→ ProTrader : 通常会可能的支撑压力线会大於1 02/15 12:10
46F:→ ProTrader : 最後再用自己认为最好的方法定义出支撑压力 02/15 12:11
47F:推 ilovetaniji : 推一个,愿意分享就超佛心了 02/15 17:32