※ 本文轉寄自 ptt.cc 更新時間: 2021-02-15 19:56:14
看板 Stock
作者 標題 [心得] 以技術分析做程式交易操作(Part.2)
時間 Sun Feb 14 15:40:36 2021
上一篇在這邊
https://www.ptt.cc/bbs/Stock/M.1609662954.A.C44.html
[心得] 以技術分析做程式交易操作 - 看板 Stock - 批踢踢實業坊
看大家討論這麼熱烈我也來發個廢文(?)分享一下 常常有看到有人在戰技術分析以及程式交易有沒有用 我也來講一下我與程式操作交易的故事好了 我自己業餘開發股票程式也一段時間了,我會把開發的時期大約分成三個階段 第一階段是程式選股,
看大家討論這麼熱烈我也來發個廢文(?)分享一下 常常有看到有人在戰技術分析以及程式交易有沒有用 我也來講一下我與程式操作交易的故事好了 我自己業餘開發股票程式也一段時間了,我會把開發的時期大約分成三個階段 第一階段是程式選股,
趁著年假有點時間補充一些關於操作策略的心得
上篇提到說一套策略是程式選股+出場操作策略組合而成
也就是整個程式操作要經過「選股→買入→持有→賣出」這幾個階段
如果只有「選股→買入」這個階段是不夠的
就算找到了一個選股方式很厲害,買了幾天內漲的機率很高
然後咧??
我沒辦法保證用我自己人工判斷出場的方式不會都放到漲上去又下來結果最後停損
也沒辦法量化這個方法的績效
所以出場策略還是必要的,
有出場策略之後可以得到一個策略操作一次的績效與持有時間
然後再計算平均的勝率與期望值
不過雖然說進出場策略是必要的
但是我在試參數的非常多次後的結論是,選股的重要性遠高於進出場策略
一個策略的好壞,在選股的時候就幾乎決定了
進出場策略再怎麼調都只能略為增減一點績效,無法改變選出來個股整體的品質
如果選出來的個股接下來一個月只有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 (臺灣)
※ 文章代碼(AID): #1WADFs5u (Stock)
※ 文章網址: https://www.ptt.cc/bbs/Stock/M.1613288438.A.178.html
※ 編輯: drazil (110.26.62.237 臺灣), 02/14/2021 15:44:00
※ 編輯: drazil (110.26.62.237 臺灣), 02/14/2021 16:24:10
如果我再晚幾年開始這個專案的話,我可能會用Python吧我想
※ 編輯: drazil (110.26.62.237 臺灣), 02/14/2021 16:27:40
不過我自己也不建議要做程式操作交易的學我這種全部從頭自己做的方式
能用現成的東西就用,把時間花在交易模型的設計上就好
其實這個系統最一開始是用來寫交易日誌用的XD
一開始的時候我自己紀錄交易日誌然後作檢討
想要在每一筆紀錄上面加入線圖標記我自己的買進買出點位
但是手動的話做一兩次還好,要是每筆都做的話那真的很煩很花時間
所以我就寫了抓股價的爬蟲跟一個交易日誌產生器。
每次交易完之後做交易資料輸入,
就可以自動產生交易績效的報表,上面有附有進出點位的K線圖。
後來想說都股價資料跟K線圖都有了,那就來試做選股程式好了
才有接下來選股模型以及更後來操作系統的開發
但是我的能力只能寫出這種績效的東西那我也只能用了
不過也不要太小看平均4%這個數字
假設20個交易日扣除交易成本之後平均賺4%好了
1.04^12 =1.60,年化+60%...........當然不可能這麼順利XD
不過跑回測結果,正常情況下超過年化25%~30%應該是可以的
※ 編輯: drazil (110.26.62.237 臺灣), 02/14/2021 18:30:39
資金曲線這個題目其實可以再打個一篇的說XD
不過可以去用前一篇的連結的模擬程式來跑一次就知道了
※ 編輯: drazil (110.26.62.237 臺灣), 02/14/2021 23:17:58
所以我也一直不能保證我的東西會不會有過度擬合的問題
上一篇最後面也提到說,我也會怕試出來在過去有效的方法
在接下來就開始失效了......
※ 編輯: drazil (110.26.62.237 臺灣), 02/15/2021 00:05:13
--
→ : 開放原始碼給受試者驗證。1F 02/14 15:59
我前一篇都已經丟一個模擬程式給人玩了XD※ 編輯: drazil (110.26.62.237 臺灣), 02/14/2021 16:24:10
推 : 請問你用什麼寫的?2F 02/14 16:22
我用C#如果我再晚幾年開始這個專案的話,我可能會用Python吧我想
※ 編輯: drazil (110.26.62.237 臺灣), 02/14/2021 16:27:40
→ : 有套用凱利公式嗎?我覺得凱利公式蠻適合程式交易3F 02/14 16:28
→ : 的
※ 編輯: drazil (110.26.62.237 臺灣), 02/14/2021 16:29:24→ : 的
推 : 我用python,函數庫多省時間,畢竟我是業餘5F 02/14 16:30
推 : 用心推6F 02/14 16:33
→ : 沒用7F 02/14 16:35
推 : 再推一個 難得看到程式交易的文章8F 02/14 16:49
推 : 請用multicharts不要重造輪子9F 02/14 16:50
來不及了,時間都花下去寫出一套完整的系統了XD不過我自己也不建議要做程式操作交易的學我這種全部從頭自己做的方式
能用現成的東西就用,把時間花在交易模型的設計上就好
其實這個系統最一開始是用來寫交易日誌用的XD
一開始的時候我自己紀錄交易日誌然後作檢討
想要在每一筆紀錄上面加入線圖標記我自己的買進買出點位
但是手動的話做一兩次還好,要是每筆都做的話那真的很煩很花時間
所以我就寫了抓股價的爬蟲跟一個交易日誌產生器。
每次交易完之後做交易資料輸入,
就可以自動產生交易績效的報表,上面有附有進出點位的K線圖。
後來想說都股價資料跟K線圖都有了,那就來試做選股程式好了
才有接下來選股模型以及更後來操作系統的開發
推 : 猛10F 02/14 17:20
推 : 漲比例5成 但每次績效才3-4%這樣划算嗎?11F 02/14 17:42
我也希望寫出平均期望值超過10%的程式呀但是我的能力只能寫出這種績效的東西那我也只能用了
不過也不要太小看平均4%這個數字
假設20個交易日扣除交易成本之後平均賺4%好了
1.04^12 =1.60,年化+60%...........當然不可能這麼順利XD
不過跑回測結果,正常情況下超過年化25%~30%應該是可以的
推 : 用心推12F 02/14 17:45
推 : 我 python c# MC三個結合13F 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 02/14 18:42
※ 編輯: drazil (110.26.62.237 臺灣), 02/14/2021 19:08:10推 : 我覺得訊號太多了 這樣你實際操作誤差會很大15F 02/14 19:35
推 : 20內回測績效全部都是正值很猛了,可以跑看看了16F 02/14 20:10
→ : 回測20年內
→ : 回測20年內
→ : 你有做out of time嗎?18F 02/14 20:27
這個東西是?推 : 是每筆平均績效還是總績效?19F 02/14 20:29
兩個表格上面的是平均績效推 : 回測可以再做幾個月看看20F 02/14 20:59
推 : 資金曲線和最大回撤可分享嗎~21F 02/14 22:06
最大回測是指?資金曲線這個題目其實可以再打個一篇的說XD
不過可以去用前一篇的連結的模擬程式來跑一次就知道了
※ 編輯: drazil (110.26.62.237 臺灣), 02/14/2021 23:17:58
→ : 一般建模會把數據拆成三個部分,一部分是建模用的i22F 02/14 23:41
→ : n sample,一部分是跟建模型同一段時間窗口但不同
→ : 樣本out of sample期間外樣本。第三部分是期間外樣
→ : 本例如202001-202009當建模時期,202010-202012當o
→ : ut of time,觀察到202101。模型最重要的是out of
→ : time的成果,建模績效好但期間外樣本表現差,只是
→ : 代表過度擬合。
這東西我之前看深度學習的東西的時候有看過所以大概知道那個概念,不過我沒有做@@→ : n sample,一部分是跟建模型同一段時間窗口但不同
→ : 樣本out of sample期間外樣本。第三部分是期間外樣
→ : 本例如202001-202009當建模時期,202010-202012當o
→ : ut of time,觀察到202101。模型最重要的是out of
→ : time的成果,建模績效好但期間外樣本表現差,只是
→ : 代表過度擬合。
所以我也一直不能保證我的東西會不會有過度擬合的問題
上一篇最後面也提到說,我也會怕試出來在過去有效的方法
在接下來就開始失效了......
※ 編輯: drazil (110.26.62.237 臺灣), 02/15/2021 00:05:13
推 : 但上面時間分野是否涉及財報空窗期等背景因素?會29F 02/15 00:06
→ : 不會干擾?
→ : 不會干擾?
→ : 都會有影響的,但最終目的是希望是對未來有預測力31F 02/15 00:21
→ : 而不只對過去有預測力的模型,期間外預測才是核心
→ : 其實建模最累的不是跑模型,而是清洗這些資料。
→ : 而不只對過去有預測力的模型,期間外預測才是核心
→ : 其實建模最累的不是跑模型,而是清洗這些資料。
推 : 我也很意外,每月換股策略勝率非常高!34F 02/15 03:24
→ : 期間外測試是做模型的都會做,包括簡單的線性模型35F 02/15 08:07
→ : 你沒做就投錢等於是你拿錢直接做期間外測試
→ : 你沒做就投錢等於是你拿錢直接做期間外測試
推 : 他推分享37F 02/15 10:03
推 : 水平支撐線的簡單找法 用K線價格與多個價格相減38F 02/15 11:51
→ : 相減後正價差很多負價差很少的水平價格 可當支撐線
→ : 如果是壓力線就相反 負價差很多正價差很少
→ : 鴻海來說在2021之前2年期間從60找到100 可得到70 92
→ : 台積電這種就要用多個價格多種斜線找上升趨勢線
→ : 多個價格多個斜率
→ : 正斜率找上升趨勢 負斜率找下跌趨勢
→ : 通常會可能的支撐壓力線會大於1
→ : 最後再用自己認為最好的方法定義出支撐壓力
→ : 相減後正價差很多負價差很少的水平價格 可當支撐線
→ : 如果是壓力線就相反 負價差很多正價差很少
→ : 鴻海來說在2021之前2年期間從60找到100 可得到70 92
→ : 台積電這種就要用多個價格多種斜線找上升趨勢線
→ : 多個價格多個斜率
→ : 正斜率找上升趨勢 負斜率找下跌趨勢
→ : 通常會可能的支撐壓力線會大於1
→ : 最後再用自己認為最好的方法定義出支撐壓力
推 : 推一個,願意分享就超佛心了47F 02/15 17:32
--
※ 看板: Stock 文章推薦值: 0 目前人氣: 0 累積人氣: 168
回列表(←)
分享