显示标签为“程式交易策略”的博文。显示所有博文
显示标签为“程式交易策略”的博文。显示所有博文

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點應該就是要買進。

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

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

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

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


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



多策略組合的觀察

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

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

以下圖為例,有四支交易策略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自行計算(由每日的測試損益推算),這部份下篇再紀錄了。

波段策略應用個股期貨

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

其實國內還有選擇,就是個股期貨。以最大成交量的幾檔,日成交量也有一千口以上,而且這些也都是高價且波動大的標的。目前來說,宏達電、可成、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棒上動點手腳,就能創造出完全不同的損益結構,提供給讀者思考。

秒K應用

一般多數交易者在使用或觀看K棒的時候,通常從1分、5分、10分線開始著手,稍微想做些差異化的時候可能使用2分線、3分線、7分線等較少見的K棒周期,然而若跳脫分線框架,當科技進步,電腦效能日新月異,秒線的使用在MC上也已經完全不是問題,也許現今交易的戰場已經不是分線可因應?為了證明這個想法或差異化我們既有的策略,我們開始思考使用秒k來作交易,至於該要設定多少秒呢?

J這邊可以提供讀者一個方向,首先看一個例子,3分線表示180秒,若設定為177秒,則因為177/(180-177)=59,所以表示當一般的3分線走了59根K棒之後,因為每一根省下3秒的時間,導致在177秒的K棒設定下,圖上已經畫出了60根K,反之設定成183秒則比原本分線少1根K棒。

透過多或少製造1根K棒,也許能讓我們減少一些在整分時敲單的滑價(因一般程式單若是用指標型撰寫將在00秒時敲單),而本篇將延續海龜通道突破策略的精神,稍微小改程式碼成為利用close價突破來進單的指標型策略,以反映秒k收盤價的微小差異在近年來的影響。

程式碼修改如下圖。

1

建立用close所創造的高低區間,回取K棒數(HL)參數讀者可自行嘗試。
進場與出場也以最簡單的方式修改如下圖。

2

須注意,在撰寫秒線以下層級時,TIME要改為TIME_S才不會錯誤喔!另外本篇利用之前提及的尾盤出場策略1-建立日期表,作最後進場與出場時間調整,以及漲跌幅超過6%的進場限制。

在參數相同的情況下,本篇利用最多加碼5口來突顯出3分線與177秒的差異,首先我們先來看3分線的表現如何,回測時間為2007年至今,來回成本單筆設定800元。

3

再看看177秒的績效圖如下。

4

可以發現兩者在同樣狀況下,177秒K的回檔略小於3分線,而且獲利大約多了快100萬。再來觀察近年來表現,如下圖所示。

5

上方的圖是3分線,可以看出近年來已經無法再創新高(上次新高點大約為2011年2月),而下圖177秒K的在2013年9月還有再創新高。

經過本篇的實驗證實,也許過往的簡單模型在近年來無法表現得令人滿意,但透過細微的變化,許多邏輯仍然是持續有效的,只是現在交易的戰場或許已經拉到秒K上了,讀者可以再延伸思考透過不同的以往的K棒計算,可能也會有更好的表現。

尾盤出場策略2-加強判斷

一支交易策略可簡單分成進場主邏輯、出場主邏輯,而當沖策略在尾盤必須出場的特性,使得其重要性在出場設計上不容小覷,然而根據 J 幾年來的觀察,似乎許多交易者並不太在乎這點,大多專心於進場與一般停損的設計,而最後出場僅使用指定時間出場,因此本篇延續 尾盤出場策略1-建立日期表,來簡單介紹一些尾盤現象對績效的影響性,提供讀者思考更多在尾盤邏輯設計的一些想法。

本篇測試的策略在進場主邏輯部分延續 通道突破策略  一文中所使用的程式碼,讀者可先行參考,然而為了增加交易次數以突顯出尾盤的影響性,本篇改用台指期1分線交易,參數也稍微修改,並配合尾盤出場策略1-建立日期表 所使用的最終出場時間作為初始設計,其出場設計如下圖,讀者可先回憶一下。

圖片 1

2007年至今交易績效如下(手續費來回共800元)
圖片 2

現在,開始進入本篇的尾盤出場邏輯,主要新增的想法是,交易時間以及賺賠對於出場快慢的影響,以及是否該逆勢找好的點出場(例如作多拉高出),或順勢出場(例如下跌後多單出場),讓我們直接看程式碼與績效得到簡單結論。

圖片 3

從上圖中可發現,若策略處於虧損狀態,且12點50分至13點時是上漲的,則於13點後就盡快出場,如同虧損時找有利的點出場,其改善的績效如下圖。

圖片 4

獲利增加約10萬,MDD幾乎不變,效果不錯,然而若是條件相反,當策略賺錢早點出場則會如何呢?直接看下圖績效來得到結論。

圖片 5

可發現獲利明顯減少23萬,MDD幾乎不變,符合虧損時早點讓部位出場,賺錢時讓獲利奔馳的精神,然而讓賺錢的部位一直持有到尾盤就是最好的嗎? J用同樣的手法找到稍微能繼續改善績效的方法,一樣直接來看程式碼。

圖片 6

其想法主要在思考,若是賺錢的時候,大多數當沖順勢策略應該也是賺錢,而假定多數策略與K棒周期的影響大約都在13:10至13:20分左右出場,因此若行情在此時間轉為與今日當沖走勢反向,也許顯示法人在尾盤作價上並不積極,持有過久也不一定能吃到13:30當沖強制平倉以及現貨收盤後期貨的順勢行情,使得順短期的勢先出場較有優勢,其績效如下。

圖片 7

獲利上升6萬,MDD續減少,反之此時若改為逆勢出場(即條件3與4對調),績效如下。

圖片 8

顯示若尾盤趨勢持續順勢,不該提早出場,將大幅減少獲利與增加MDD。

最後,透過尾盤簡單的上漲與下跌現象,與交易時間的特色,將有助於進一步改善交易績效,而本篇並非特別要研究其成因為何,只是挑出可能相對有意義的時間去做測試,得出符合一般賺錢精神的結論,賠錢快出,而且逆勢找好機會出效果不錯;賺錢要等轉弱再出,否則持有久一點較有優勢再了解簡單的尾盤狀況後,更進階讀者則可思考如何精進賠錢逆勢出的方法,賺錢順勢出的方法,也許可以找到更明顯改善績效的交易邏輯。