2016年1月17日星期日

逆勢策略 Counter-Trend Strategy

此篇介紹逆勢策略(Counter-Trend Strategy)

由investopedia可基本瞭解逆勢策略的定義

counterTrend

逆勢交易的目標是
  1. 在行情上漲時,在高點賣出。
  2. 在行情下跌時,在低點買進。
  3. 賺取小波動的小獲利。

因為市場總是存在小波動,所以逆勢策略有更多的機會交易,而反過來說,交易次數過多也是需注意的缺點,它必須付出更多的交易成本。相對於順勢或趨勢交易,它應有更高的勝率及更嚴謹的停損條件

以下紀錄常見的逆勢指標,L可以想到的分為五類
  • 價格指標型
  • 區間、通道、價格帶狀型
  • 技術指標型
  • K棒型態型
  • 長短區間相對價格型


價格指標型,以近日的市場價格計算出當日的支撐壓力點位,當行情下跌遇到支撐點進行買進,在壓力點進行賣出,例如 CDP、Pivot Point。

CDP逆勢操作系統,先求出昨日行情的CDP值(即均價),
CDP = (開盤價 + 最高價 + 最低價 + 收盤價) /4
再分別計算昨天行情得最高值(AH)、近高值(NH)、近低值(NL)及最低值(AL)
AH = CDP + (最高價 ﹣ 最低價)
NH = 2 * CDP ﹣ 最低價
NL = 2 * CDP﹣ 最高價
AL = CDP ﹣ (最高價 ﹣ 最低價)

Pivot Point樞紐點 = (最高價 + 最低價 + 收盤價) /3
空頭進場點= (2 * Pivot) – 最高價
多頭進場點 = (2 * Pivot) – 最低價
多頭出場點= Pivot – (最高價 – 最低價)
空頭出場點= Pivot + (最高價 – 最低價)
波段起漲點= (2 * Pivot) – 2 * 最低價 + 最高價
波段起跌點= (2 * Pivot) – 2 * 最高價 + 最低價

區間、通道、價格帶狀型,這一類型可以從價格指標連結成一通道,但更多是可以平均多個價格得到較快反應的通道上下緣。例如布林通道、近日區間。

布林通道,「布林帶」是這樣定義的:
中軌 = N時間段的簡單移動平均線
上軌 = 中軌 + K  *(N時間段的標準差)
下軌 = 中軌 − K  *(N時間段的標準差)

一般情況下,設定 N=20 和 K=2,這兩個數值也是在布林帶當中使用最多的。在日線圖裡,N=20 其實就是「月均線」(MA20)。依照常態分布規則,約有 95% 的數值會分布在距離平均值有正負 2 個標準差的範圍內。( 逆勢策略-Bollinger Band )

近日區間則是單純的以近期交易日的高低點區間作為壓力支撐所在,例如近三十日的高低點為8200和7700。

技術指標型,以技術指標計算市價超買超賣區,做為逆勢交易的依據,例如RSI、Williams %R、KD。

RSI,相對強弱指數
Williams %R,威廉指標

此類技術指標在網路上搜尋有非常多的討論,L這篇不寫,僅提供WIKI連結參考。當然他們有好用之處,若在交易策略分類有寫到再進行紀錄。

K棒型態型,此類型是藉由判斷K線的型態來定義逆勢進場點,例如以下

    1. 找出相對K棒高點的連結,類似swingHigh、SwingLow的方法
    2. 長K棒逆勢,定義比如三分K棒急殺100點進去作逆勢買進
    3. 型態上例如今日已殺三波,準備逆勢買進

此類型態有很多可以繼續研究的方法,但問題是有的並不容易在程式交易上實踐,需要把型態的定義清楚描述並轉化程式。


長短區間相對價格型
逆勢是在當下逆勢,但不是較長期間的逆勢,反而是順勢。例如一個多頭波段已有十天,其中一天發生下跌時,逆勢作多方。這個概念在L現有的交易策略裡佔有一些比重,之後也會在交易策略紀錄。 ( 逆勢策略 – HighShort – LowBuy )

以上介紹的指標方法都可以當作策略的原型,但都還沒有提到進出場的應用,還有要注意的是,以上指標都是在應用在市價上所計算的逆勢指標,並沒有去考慮市場是否適合這些逆勢指標,例如在強多頭或強空頭的期間裡,用這些逆勢指標可能會非常容易造成虧損。

選擇適合逆勢策略的市場或時機,這是另外一個大主題,不過在此有相關先紀錄。判斷趨勢盤或逆勢盤並不容易,但可以利用一些簡單的規則,避免在趨勢明顯或波動大的市場裡進行逆勢交易,例如波動率快速增加、近日振幅快速擴大、技術指標連續鈍化、交易量或未平倉量明顯放大,等等現象發生時,可能就不適合逆勢策略,應要減少逆勢交易。

回到逆勢指標的介紹,在應用上也並不侷限在逆勢策略,例如KD可以作鈍化、布林通道可以作趨勢突破,每一項指標和應用都很廣,L也會在程式交易策略分類下,將紀錄重點的指標實作測試。

再附記,此篇所討論到的逆勢策略方法是以技術面為主,並沒提及基本面,實際上基本面分析的操作更符合逆勢策略的概念,舉例來說,假設經過基本分析過後的台灣加權指數應是九千點,那麼現在8250點應該就是要買進。

基本分析對於每個商品都有一個推算的目標價,與市價有差距就可進場作收斂的那方,只是,基本分析的分析方法很複雜、變數也無法窮舉,進場之後需要多少時間才能等到收斂更是難估計。這部份主題等到基本分析再繼續紀錄了。

所以我們還是採用技術面為主,我們沒有目標價,會進場作交易並認為可行是因為市場總是有小波動,希望能在小波動的高點賣出、低點買進,原則是這樣。

你相信這個原則嗎? 這個相不相信是會影響到往後操作的

基本分析派相信市場會往他們推算的目標走,若不是,就調整推算方法。我們技術分析派相信會抓住小波動,所以才作小波動的逆勢交易,如果抓不住,策略在虧損,你願意繼續相信抓的住它嗎? 這邊是交易心理學該討論的部份,最終我們要明白、要相信自己作的交易到底為何而賺? 為何而賠? 這部份先寫到這裡了。


關於逆勢交易的文章在網路上資料非常多,底下推薦兩個參考網站可以繼續發掘學習



多策略組合的觀察2

以前篇 多策略組合的觀察 回應讀友們的思考,或許是前篇例子說明不夠清楚,這篇就再延伸紀錄了。

要回應的重點整理
1. 組合的整體績效及風險
2. 資金運用效率
3. 同時運作四種不同邏輯的情形
4. 策略的刪減
5. 遇上系統性風險

同一個範例,策略A、B、C、D四支,及ABCD的組合,假設是一年的表現如圖。

策略組合

關於組合的整體績效,為什麼是加總不是平均,換個角度想,A、B、C、D是我們屬下的四個交易員,我們就當作管理者的角色,A交易員這年賺了300、B交易員賺了120…等等,很優秀的,四個交易員都是賺的,這個TEAM一年下來賺的,就是四個人加總起來的,800。

以A自己的角度來看,他的drawdown 30,表示這一年裡,績效從高點回落最多的幅度是30元,同理,B是15元,等等。不過從管理者的角度看,他們四個交易員每天有賺有賠,常常互相抵消一部份虧損,所以整個TEAM的drawdown變成只有40,而不是他們四個人加起來的90

如此,對TEAM來說的獲利風險比,是800 / 40 = 20倍,比起他們每人個別的比率都還好。

關於資金運用效率,可以有許多種資金管理方法,在例子中有drawdown資料,所以就假設是以drawdown 的倍數來控管資金使用,再假設這個倍數是3倍,A交易員drawdown 30,那需要準備本金 90來交易,交易的結果是獲利300元。而以TEAM來說,需要準備本金 120元,交易的結果是獲利800元,以這樣的例子來說,300/90 比 800/120,那當然是後者資金有效率了

關於同時運作四種不同邏輯的情形,讀友經驗是可能會混亂,可能會互相衝突。但是,我們要的就是衝突,如果四個策略常常同向,才該注意,這樣就會失去風險分散的效果。而實際運作上,比四種還多上太多了,夠分散的邏輯策略十個、幾十個都常常運用。

關於策略的刪減,以ABCD四個交易員的表現來說,A和C表現較好,那是否選擇AC兩個就好了? 這有兩個問題,第一,現實交易上,我們無法事先得知A和C表現是比B及D好,換句話說,我們若事先就知道誰什麼時間表現最好,那段時間不就梭哈押他就行了嗎? 那就不需要多策略了,當然是作不到。第二,如果A+C表現如預期的比B+D好,還是不能表示AC會比ABCD好,因為多個策略帶來的drawdown分散效果不同,例如AC的drawdown可能也是40,那AC和ABCD的P/D是480/40 & 800/40,當然還是ABCD好。這個部份,要延伸的主題是怎麼選擇各策略以及相關性的測試,下篇再紀錄了。

關於遇上系統性風險,讀友經驗可能會全賠,這當然可能,也就是我們要瞭解drawdown的目的,但一個好的分散組合,或許一兩天偶爾會全賠,但拉長時間看應該是有的賺有的賠,而更長的時間看應該是都要賺,才是正常有效的分散,所以我們才研究那麼多種策略來搭配。

以上,請讀友想法繼續交流討論囉。

多策略組合的觀察

由前篇 避免過度最佳化 提到了單一程式策略儘量專注著目標,不需要把多種盤勢邏輯統統放在一支改成大雜燴,那很容易走進最佳化的陷阱,而此篇要紀錄的是各程式所合成的策略組合觀察。

一般說來,走到衡量整體組合的程式交易者已經作了非常多的事情了,經過策略邏輯的設計、實戰、修改,瞭解自己偏好的交易型態,瞭解自己能夠接受的風險程度,才有辦法一支一支的打造出合適的策略,再將各支策略組合觀察整體績效,觀察的第一重點就是利潤風險比。

以下圖為例,有四支交易策略A、B、C、D,及其個別的獲利風險

策略組合

而這四支策略組合在一起時的獲利是各別策略獲利的加總,但Drawdown則是大為降低,組合的獲利風險比為800/40=20倍,比起原先各別策略的P/D都要高的多,這是我們要的東西,原先一支策略A估計的獲利300就要準備承擔30的風險,現在組合有800的獲利卻僅要估計40的風險

在這個例子中,要特別衡量是組合後的Drawdown 40,與原先個別策略的Drawdown加總 90 (30+15+20+25),所計算的比例 40 / 90 = 44.4%。這個比例的意義是組合的效果,各策略因為彼此不同的損益期間表現,所以在每段時間都有互相抵補的效果

當然也要各策略屬性不同、目標不同才會有效,不然每支策略賺的時候一起賺、賠的時候一起賠,那放在一起也沒什麼效果,這種情況的比例算出來會是高的,可能70%、80%以上。

調整組合的目標就是希望能夠再降低這個比例,希望能夠到40%、30%或更低,所以在打好基礎,有了一個基本組合後,開始慢慢調整整體組合,這時可能會發現某支不太會獲利的策略加進組合反而是蠻有效的,甚至沒什麼賺賠的策略放進組合,雖然總獲利沒增加,但是Drawdown降低了,那也是一個進步

而且加一支普通的策略所花費的工夫,比精雕細琢一支複雜策略來的輕鬆多了。由組合的角度看,或許普通策略更值得,各位讀友可以多加思考這樣的方法,同時再次避免了單一策略的過度最佳化

另外有一點可以多注意的是,若要增加部位時,同一策略的加碼往往不如再加進新的策略,當然,新策略並不是那麼好生,所以對於學習新邏輯、測試新想法,都是無法停止、要持續下去的。



附記1: 單一策略的評估主要有介紹三項方法,各自重要,而組合評估也同樣適用,此篇僅著重獲利風險比,而另兩種方法仍值得觀察參考。

附記2: 此篇紀錄策略組合的評估方法及好處,工具利用可以是MultiCharts的Portfolio backtester或EXCEL自行計算(由每日的測試損益推算),這部份下篇再紀錄了。

避免過度最佳化

程式交易策略的設計有個大難題,不論是新手或老手都會一直感到困擾的問題是: 我的程式是否過度最佳化了?

以我們現在開發程式交易策略的方式,是將歷史資料作為數據,套用各種不同的邏輯來測試,希望能找到一種通則可以適用在對未來的預測。這樣的方式是利用歸納法找出通則,而通則是表示有一定的機率,也可以當作是我們回測的勝率。

但若將前述各種不同的邏輯條件增加的越來越多,就會越來越像是對數據作細節的描述,可以得到很漂亮的測試,但對未來的預測能力必然不如對過去的好,這很像是考試前把所有的考古題答案背下來,而不是真的瞭解怎麼解答,那當考試時題目稍有改變就不會寫了。

有指標就一定有參數,有參數就一定要作選擇,選擇參數的個數及個別的範圍。還有更大的考量是,要怎麼判斷是否也用了太多指標以致於最佳化了? 或許它真的就是這麼準,也沒什麼不可能。

那怎麼辦?
目前並沒有主動正向的建議或準則說明該使用多少參數或指標個數,只有被動的再去測試,常用的方法是forward backtesting,就是把數據切兩部份,一部份測試合適參數,另一部份作為未知數據來測試結果。假設同一組參數在這兩部份的運作情形差異不大,那很可能表示這組參數是夠穩健的,若在兩部份的差異很大,那好險有先作測試…

這邊說的差異大不大要如何判斷? 可以利用之前談過的交易策略評估,參考連結
(交流會的朋友知道怎麼從測試報表中,較快速的選擇合適參數了)。


以上,是針對單一策略作forward backtesting來判斷是否過度最佳化,但作了也評估過了,能表示未來績效會和測試時一樣好嗎? 當然,還是不一定的,唯一可以確定的是對這支策略的信心和瞭解更加提昇了,這也是很重要的。

除了forward backtesting之外,避免過度最佳化是從策略組合的角度來設計,簡單的說,就是讓各策略專注。專注在目標上,目標是長波段10%行情、中波段3%行情、當沖策略、極短線策略、震盪盤策略或是針對只作多空單方向的特殊策略等等。

在設計這些策略時,單一的目標要夠明確,例如想設計一個大行情必吃的策略,那小行情就不予理會,或許能作到避開損失就夠好了,千萬不要想連震盪小行情也吃的到,因為這樣很可能又會陷入多重邏輯的陷阱

以交流會談到的故事來說,動物界舉辦了鐵人三項比賽,項目是飛行、短跑和游泳,老鷹在飛行項目得了第一名,但是短跑和游泳都不行,獵豹在短跑得了第一名,但是另兩項不行,海豚則是游泳第一名,但另外兩項也不行。最後這項比賽的冠軍是一隻鴨子,三項都會一點,雖然都不怎樣。

這故事和程式交易策略有什麼關係? 假如我們希望設計一個任何狀況都適用的策略,什麼行情大小都要吃到,那麼就可能會設計出一個什麼都吃不好的鴨子,而好的作法應該是建立一個團隊,由老鷹、獵豹和海豚組合的超級戰隊。

這和避免過度最佳化又有什麼關係? 當我們專注在特定目標設計策略可以有較簡化的邏輯,同時在組合時又可以有效的截長補短,這個有不有效,主要是指降低整體drawdown,也就是看老鷹、獵豹和海豚彼此合不合,這個戰隊能否發揮綜合效果,這部份下篇再紀錄了。

波段策略應用個股期貨

台指期近年來波動小,作期貨單找方向實在是沒什麼便宜可佔,所以除了台指之外,要平衡整體損益的方法就是找其它商品,作選擇權找時間和波動的利潤、作國外期貨,那是一個更大的世界。

其實國內還有選擇,就是個股期貨。以最大成交量的幾檔,日成交量也有一千口以上,而且這些也都是高價且波動大的標的。目前來說,宏達電、可成、TPK、聯發科,都是優先考慮的標的。

相對台指期來說,這些股票的波動率實在是非常大,因此趨勢單就更有交易機會了。L 使用 歷史波動率策略設計 此篇所介紹的類似策略,屬於中長線的波段。針對以上四檔個股期貨作測試,時間取不長,從2013/7開始,進出的狀況如下圖。

個股期

測試出來的績效是很不錯的,整體組合的績效如下。

個股期2

多空獲利平均,可成、聯發科、宏達電多單獲利,TPK空單獲利。將近一年的時間獲利約85萬,而drawdown 約17萬,這個獲利風險比將近五倍,相當高,當然也是因為這幾支個股都非常有趨勢。

現在是事後來看這四支個股在過去一年的趨勢單獲利很好,並不能以此預期未來獲利狀況,再進一步的研究可能要把現貨資料拿來測試,至少五年十年的,若績效也穩定的話,那對策略的信心就高多了

不過若是程式單以長線趨勢為主的話,押台指期不如押這幾檔個股有機會,有興趣的朋友也多測試看看囉。

使用Renko圖形交易所面臨的問題

在交易的圖表設定中,讀者會發現K棒不一定是要畫成蠟燭圖,也可以選擇一些不同邏輯去定義出不同的線圖,例如本篇的RENKO就是一個利用價格去畫的例子,讓我們可以很直觀的觀察價格單純的走勢,減少價格在盤整時的雜訊,然而本篇並不主要介紹RENKO的好處,而是去了解對於使用程式交易的我們,會有甚麼樣的問題,首先透過下圖設定的欄位來了解其原理。

圖片 1

一開始要設定一個單位大小,在目前國內最新的8.5版中另外有提供依照%來設定單位大小的選項,但其道理都是在設定每一根棒子要多長,表示當價格滿足設定的一單位大小,這根棒子就算收盤,開始畫下一根,另外也要同時配合週期的設定,來決定顯示的時間,設定成最小1TICK,就是每個TICK出現若滿足一單位點數的條件,就算完成並且顯示一根棒子,因此如果設定成1分鐘,就需要等待一分鐘過完,滿足多少個單位才一次顯示出來。

最後下面就是一些顯示的設定,一般為了避免隔日跳空的計算錯誤,通常會勾選收盤時中斷,就不會跑出明明是跳空,卻顯示成全部連續棒子的狀況,另外其他則只是用來控制顯示的方式,並不影響計算。

然而以上的邏輯其實對要使用RENKO進行程式交易的我們是有很大的困擾與問題,為了呈現問題的所在,J先寫了一個很簡單的測試程式,程式碼如下。

圖片 31


這個當沖策略設定當棒子收紅,就於下一根開盤做多,如果連兩紅,就下一根多單出場,同時設定SET指令中的STOP,空單則相反,不設定手續費,跑的圖就是最上面那張圖的設定,每四點畫一根棒子,週期使用1TICK,進行盤中即時收報價進出場測試。

圖片 2

從本張交易截圖可以看出,黃線是換日線,左邊是回測與昨天狀況,每一個進場點都在棒子的起畫點,除了SETSTOPLOSS的出場外,都在棒子的收盤(棒子的上下緣)。然而右側的實際上線狀況,一開始的多單進場就沒有落在棒子邊緣,而是在空中或是像第三筆一般在棒子中間,同時第三筆出場也在空中而不在邊緣。

再來看看下2圖的比較,首先第一張是即時上線狀況,第二張則是關掉MC開的狀況(形同回測狀況)。

圖片 6


圖片 16

讀者可以很明顯看出來,同一個棒子的狀況,在上線時(上圖)與回測時(下圖)比起來,差異非常大,主要的原因是每根棒子的開盤價位置被修改了,而SETSTOP指令仍有作用,只是因為進場點改變而導致出場點當然也就有所不同

再來J同一天也同時測試了如果週期改變為10分鐘,單位大小為3點,盤中即時圖形如下。

圖片 21

讀者可以仔細看J標記的部分是第一根9點15的棒子,然而下方座標軸卻顯示了好多個09:15,而每一個進場也都很漂亮的在每根棒子的邊緣,這原因是實際上這些09:15的進場與出場都是在09:15時間一走完時,瞬間跳出來的多次進場與出場,若使用下單機丟單,則是一筆單都不會有,或是進一單在最低點!

最後透過本次實驗,我們得到幾個RENKO使用上的問題,第一是在回測狀態,開盤價的定義是受到收盤價的確立(滿足一單位大小的點數)而得到回測時每根棒子的開盤價。第二是周期的設定會影響棒子多久才瞬間跳出來一次。第三就是目前RENKO是有保留完成那根棒子時的高低點,因此SET指令有效。

綜合以上三點可以了解到,目前RENKO的運算邏輯下,回測與真實落差太大,無法使用RENKO當作DATA1進行交易,但若使用其為DATA2當作指標來使用卻是種可行的作法,因為當成指標時可只採用其確立的CLOSE值運算以上提供想使用RENKO的讀者一些實驗心得。

利用交易口數畫K棒

多數人常使用的K棒可能是分線或日線所組成,而在MC中提供了除了用時間來計算K棒以外,還可使用成交口數來計算一根K棒,因此產生的特色是,每天得總K棒數會受到交易量的影響成變動,所以如果當天行情大(伴隨交易量大),就會使當日K棒變多,反之則相對一般分線減少。也許對玩一陣子MC的讀者來說這不是什麼新鮮事,但是否真的對交易策略有所幫助,本篇也會來驗證一下。

首先有淺入深,先看看在哪邊調整,可參考下圖,在商品設定中調整成以”口”來計算週期的單位,本例使用2000口作計算標準。

口數

現在J想比較到底使用口數對交易策略有沒有幫助,因此將拿同一個程式碼的策略套到兩種不同K棒來比較,以下的例子是使用台指期2005/1/2至2014/1/10為資料,策略是3口加碼型的留倉單,手續費設定為每口400元。

首先使用2000口的K棒作基準,跑五個參數的最佳化,選擇獲利因子最大的參數,再將此參數維持固定,調整K棒成分線,在維持相近的交易次數為前提下,找出5分線是最為接近且獲利表現最好的週期,將兩者比較一下如下表。

CP1

可以發現直接用2000口的參數套過去,得出更差的結果,獲利大幅降低,回檔增加一倍。

而為了更完整的測試,現在我們反過來做一次,首先,把五分線的參數一樣最佳化,且參數區間皆完全一致,再一樣透過選擇獲利因子最大的參數來當作5分線最好的表現,最後將這參數不變,直接把k棒設定改為2000口,得到兩者比較的績效如下表所示。

CP2

可以發現,兩者除了2000口的交易次數變多以外,幾乎沒有甚麼差異,因此我們再多比較一個項目近1年(2013年)表現,則由2000口k棒的策略明顯勝出。

最後,總結來看,利用口數畫k棒可以讓原本分線交易策略有更好的參數選擇,產生出更好的表現,並在近年來也能持續維持獲利,然而交易系統報價的精確性就顯得更為重要了,一般的DDE在使用口數畫K棒時可能就會出現問題,讀者需要特別注意,或許花點小錢讓系統更快速穩定,就能創造出更多不同以往的交易機會,就像本篇在K棒上動點手腳,就能創造出完全不同的損益結構,提供給讀者思考。

Aroon Indicator 阿隆指標

Aroon Indicator 阿隆指標,以距離創新高低後的期間來判斷強弱勢,說明和範例可以看兩個資料連結:


指標為計算兩數值Aroon多方及Aroon空方,定義是
AroonU : [(期間數) – (創新高後的期間數)] / (期間數)] x 100
AroonD : [(期間數) – (創新低後的期間數)] / (期間數)] x 100

未看圖之前可以想像,最近有創新高,AroonU值就高,有創新低,AroonD的值就高。另外一個可以參考的指標是AroonU – AroonD,有創新高又很久沒創新低,這個值就會高

以Multicharts來實作這個指標的語法如下

idAroon

idAroon2

套用台指期行情來看看有沒什麼特殊性可以利用

Aroon

是不是有什麼線索可尋?
有看出來了嗎?






若有看出來的朋友麻煩分享一下,L對它沒什麼感覺,不曉得怎麼利用,(逃~)。

小指標介紹,目前約略測試所設計的策略績效都不怎樣,其實也蠻正常的,要找些其它指標和Aroon搭配使用才可能有像樣點的結果,有心得再紀錄下去了。