2013年9月9日 星期一

基本出場策略

 

一般程式交易者一開始常常花時間在思考進場邏輯比較多,而例如均線交叉、通道突破等,都是直接利用下一個訊號進場,當成前一訊號的出場,例如黃金交叉買進,死亡交叉時將買進訊號直接反手做空,又或是漲破通道買進,跌破通道直接反手做空。這樣的交易特色是,沒有空手的時期,也就是認為隨時要有方向,導致在震盪盤的時候,交易次數比有先出場的策略來的多,因此本篇先介紹一些J認為若要寫出有空手時期的策略,最基本需要有的出場寫法。

 

本篇一樣採用通道突破的邏輯擔任進場主邏輯,讀者可先複習 通道突破策略 ,本篇將進場稍微增加了每日交易次數與時間的濾網,交易次數控制的程式碼如下:

 

J 基本出場策略1


J 基本出場策略2


 

利用DTTL(多單用)與DTTS(空單用)來建立一個開關,每天第一根K棒後即計算為1,當部位變化為多單或空單,則將其歸0,藉此控制減少區間過小時來回進出的狀況,因此進場的程式碼改寫如下。

 

J 基本出場策略3


 

在交易次數與時間控制下,當價格突破HH或跌破LL就進場。

 

        再透過進場濾網的限制後,此通道突破已不若原本隨時都會有部位的設計(因可能進場條件被濾掉),所以原本通道反手作多或反手作空的進場線,須另外撰寫成為出場邏輯,避免進場濾網檔掉原本通道的出場,故可如下圖般重新撰寫

 

J 基本出場策略4


 

我們簡單看一下這樣的留倉績效,如下圖。(本篇主要凸顯增加停損機只與原本策略的差異,因此參數與K棒周期並不特別提供,讀者可以自行嘗試適合自己的周期。)

 

J 基本出場策略5


 

績效有個印象後,我們開始試著增加最基本的固定停損邏輯,如下圖。

 

J 基本出場策略6



 

透過SETSTOPLOSS內建功能的使用,可以設定多空兩者分別輸多少金額停損,將多空特性不同的想法結合進去,但讀者須特別注意,若使用MP來判斷多空,則會漏掉一進場時,瞬間價格可能在當根就已經超過停損的狀況,因此特別增加一個不分多空的SETSTOPLOSS,善用只要有部位就能在K棒內產生委託的出場功能 

增加後的績效如下圖。


 



J 基本出場策略7



 
 多單明顯的改善,空單在獲利上卻減少了,雖整體的獲利上升,回檔卻變大,結果並不令人滿意,顯示只有固定停損是不夠的,接著我們來撰寫也很常用的獲利拉回出場法

 

        在撰寫獲利拉回出場時,為了避免MC計算上產生K棒內價格走勢假設的錯誤(例如在未開啟精密回測時,K棒只用開高低收4個點運算,而若當根走勢很大,在回測計算獲利拉回時,將利用該K棒最高或最低點計算,然而真實情況可能在還沒出現最高或最低點時已經達成獲利拉回出場的現象,導致高估獲利能力的狀況。)




 

因此J將不建議讀者使用setpercenttrailing與setdollartrailing等內建功能,下圖將示範如何利用自行撰寫的程式碼達到同樣的目的。  


 





J 基本出場策略8



 


透過MPH與MPL的設計,可以計算進場後最高的價位,與最低的價位,再透過變數GAINL與GAINS的調整,設定要達到多少點以上才滿足"獲利"的條件並再由TRLX與TRSX來設定拉回的百分比,於確立出現上一根K棒最高最低點後,掛出STOP單,等待"拉回"時觸碰價格即出場
 

 增加此出場法後,績效如下圖。


 




J 基本出場策略9



J 基本出場策略10






 

可以發現獲利持續增加,回檔也大幅減少,近年績效也持續創高,顯示出場的設計將明顯的影響策略表現,而本篇除了主邏輯通道得出場,另增加了固定停損與獲利拉回的出場,但實際上還有許多不同類型的出場設計,在有了本篇基礎後J將於日後介紹更多面向的出場邏輯,以提供讀者思考如何打造一個更完整的交易策略。


 
 







2013年9月7日 星期六

建立文字檔下單機 (with C#)

 

文字檔下單機是常用的自動下單接法,它一定不是最有效率的作法,但非常通用,不論是策略產生是由TS、MC、EXCEL或客製的程式,都可以在訊號產生時寫入文字檔,再由文字檔下單機處理委託送單。

 

網路上也有多種免費的文字檔下單機可以利用,或許之後可以請J再介紹一下,但套裝的總是有點用不順手,寫的太完整的感覺又很複雜,所以L就來紀錄文字檔下單機的設計架構,若有朋友嘗試自己設計一個文字檔下單機,也是個起步的參考。

 

設計程式一開始當然就是確認需求,還有定義好文字檔的格式。這格式設計有很多種,例如

  1. 方向,口數,價位 (“Buy”, ”1”, “8000”) (買一口8000)

  2. 方向結合口數,價位 (”2”, “8000”) (買兩口8000)、(“-1”, ”7950 ”) (賣一口7950)

  3. 方向結合口數 ,(“1”) (買一口)、(“-3”) (賣三口)

  4. 給部位OI ,(“1”) (調到買進一單位)、(“-1”)(調到賣出一單位)、(“0”)(調到無部位)


 

如果文字檔沒寫入價位,那麼下單機就要能收行情,不然就只能丟市價單很奇怪,另外依照不同的文字檔定義,下單機也要設計不同的判斷邏輯。資料給的越少,下單機要處理的事情就越多,那我們就來看給最少的第四種為範例,文字檔只寫策略現在是0、1、-1,這三種狀態。

 

繼續確認需求,這個下單機對於使用上的功能希望如下:

  1. 設定連結下單的帳號

  2. 設定文字檔所在路徑

  3. 設定讀取的文字檔

  4. 設定策略的口數倍數

  5. 設定下單的滑價點數

  6. 設定下單機開啟/關閉

  7. 目前策略狀態以燈號顯示

  8. 策略進出紀錄


 

內部要作到的功能如下:

  1. 登入帳號

  2. 收取行情並顯示

  3. 判斷文字檔後產生委託資料及送出

  4. 寫出訊號紀錄


 

以上,就先來刻介面,如下圖展示的範例:

 

TXTOrder


 

介面各功能如需求所述就開始寫程式吧,唯一的按鈕[登入並啟動],要寫的程式大致是

 
private void buttonLogin_Click(object sender, EventArgs e)
{
FN1 = textBox1.Text;
Algo1 = System.IO.File.ReadAllText(@"L:\"+FN1+".txt");
changeColor();
Commodity = textBoxCommod.Text;

//登入並訂閱行情
api.login("XXXXX", "XXXXXX", "XXX.XX.X.XX");

if (api.loginStatusFlag == true)
{
labelLogin.Text = "登入成功";
api.regItem(Commodity);
}
else
{
labelLogin.Text = "登入失敗";
}
/*
這邊寫把行情顯示到介面的Label上
....
*/

//啟動新執行緒讀取文字檔動作
Thread ProcessPSTD = new Thread(ProcessPS);
ProcessPSTD.Start();
}

 

其中一開始的

FN1 = textBox1.Text;

Algo1 = System.IO.File.ReadAllText(@"L:\"+FN1+".txt");

就是先到設定路徑去讀取文字檔,所用到的方法是System.IO.File.ReadAllText,然後將文字檔的內容設定到Algo1這個字串(別忘了它只有可能是三種狀態0、1、-1),這是第一次讀取文字檔的狀態,之後文字檔的變動會要依據這個Alog1字串變數。

 

2013年9月3日 星期二

交易心理-可用性與捷徑

 

在你目前的認知下,先在心中回答下列2個問題


  1. 出現長上引線後,作多容易賺錢還是做空容易賺錢?




  2. 賺錢機率有多高?




 


現在不論你上2個答案為何,看看下圖,再次思考同樣上2個問題

 

 

可用性與捷徑



 

你是否有改變心意? 如果先不論真實上到底答案是什麼(雖然J很久以前有做過簡單測試,我的答案會是往上容易賺錢,但勝率低於五成,如同一般順勢交易,但本篇重點不在此,因此暫時不詳細提供驗證資料,建議讀者可以嘗試看看。)如果你的答案,從做空容易賺換成作多容易賺,這樣整個過程中你就使用了3次可用性偏見與捷徑思考,現在我們一一來分析整個思考過程。

 

 

第一個問題,我們容易使用到可用性偏見來思考他,當這問題一提出,我們便開始在腦中思考過往經驗,還有課本上或名師書籍中,教導我們K棒型態如果出現長上引線,表示可能出現假突破,上檔賣壓沉重,可能出現回檔壓力,因此應該往下做比較有機會賺錢,而我們也常常在交易中看到轉折點時,可以容易觀察到這個現象,所以最後我們選擇了我們容易思考到的結果,即可用性偏見的特色-用一個最容易進入心中的答案替代思考許多複雜的事。

 

 

第二題,機率判斷,我們會將這個問題簡化到可以回答的程度,而做法就是去判斷簡化後的事情。這時透過捷徑思考,這種系統一的能力,我們能藉由替代問題來思考-我常不常看到長上引線後出現下跌? 而此時回憶的流暢程度就決定了機率高低,如果很容易想到,你可能就給的機率比較高。

 

 

第三個問題,更明顯的藉由剛剛看的圖,來影響你回想長上引線與上漲下跌的關係,如果你原本的在這方面的回憶不夠清晰,就更可能受到剛剛或最近發生的事情影響,因為這個長上引線,之後上漲的狀況,最容易進到你心中,所以透過這樣可用性的思考,你就會偏向選擇上漲作為答案,機率也會比真實或你原本預估高。

 

 

然而同樣的狀況屢見不顯,例如最近常常出現,美股大跌卻開低走高,有人會說這是打第幾隻腳,然後出現這種狀況後,近期將造成許多散戶出現一種現象-開低就更想做多(雖然開低散戶本來就喜歡作多,所以只能說程度可能更為增加。)因為這種狀況最近太容易想到這樣的結果,而導致常常可以聽到作交易的人過類似的話:行情總是不如預期,獲利總在最不確定的時候發生。

 

 

再來討論捷徑受到情緒喜好的影響,書中稱之為情意捷徑。

 

 

主要在探討我們透過捷徑思考來快速回答替代的問題時,受到我們本身對那件事的喜好而產生影響,例如在交易上,常可聽到有人是只喜歡做多,從不做空,而推究其原因多可發現其實是情意捷徑影響了我們的思考,也許是日常生活或交易中多數人買進東西並持有,是較賣出東西容易且習慣的多,而這樣的偏好導致我們認為作空(希望價格往下)是件危險也不開心的事情,因此容易忽略作空可能導致的收益,而成為一個只多不空的交易者。

 

 

再一個常見的例子,買低會賺還是追高會賺?這個問題也許能用情意捷徑角度思考為何多數人喜歡買低而不愛追高,也許一般我們思考買進期待上漲,成本當然越低越好,追高形同現在不想買,漲上去才想買,成本是往上增加,沒有人喜歡,而這種喜不喜歡的偏好就影響了下一層次的思考,認為追高買的高,所以風險高(常聽到有人說要居高思危...),因此追高比較不會賺錢,完全忽略去思考追高可能的獲利機會與延續性是大於低買。

 

 

最後,可用性偏見也影響我們對交易風險的態度-我們不是太看重風險,就是完全忽略它,沒有中間地帶。例如最近常常出現漲跌停,將使我們特別重視漲跌停對我們交易的影響,但難道最近的事件真的影響了長期出現漲跌停的機率?也許以指數期貨來說漲跌停常態性來看是本來就有出現的機率,但我們卻容易在最近有發生的時候才開始特別在意,進而調整交易行為,然而像最近幾年很久沒發生漲跌停,就容易忽略這樣的留倉風險實際上長期是一樣的。

 

 

        本篇J舉了一些交易上的小例子,讓讀者可以透過不同的方式思考自己的交易是否受到可用性與捷徑的心理因素影響了決策? 也許換個角度思考一些原本認為理所當然的事情,或利用程式交易去驗證決策,可以大幅減少這些現象,增加交易的獲利性。





2013年8月29日 星期四

選擇權評價-BS MODEL (with Excel)

 

選擇權的評價是策略的最基礎,瞭解各項因素對選擇權價格的變動後,我們才能進一步討論各項因素的實際運用。我們一開始需要先來應用Black–Scholes option pricing model,經過實際的計算瞭解後,再來看Greeks和波動率,再來才是各種價差和組合策略。

 

關於選擇權的評價和解說,網路上的資料已經非常豐富,各項變動因素說明的文章也很容易找到,所以為了有些不同的貢獻紀錄,L將偏重在計算函數和程式介紹上面,實作上以EXCEL VBA和C#為主。

 

另一方面,大部份人看到評價公式後大概就已經懶惰了,但光是看看公式和解釋,其實不如實際寫一次、算一次來的有體會,而且實際上真的很容易,如果對於選擇權有興趣卻沒計算過的朋友們,請跟著一起作看看吧。

 

首先就看看公式的定義,可以到這兩個網址先大略看看假設和定義,有興趣再詳讀內容

Black–Scholes

Black-Scholes期權定價模型

 

推導和證明就算了吧,如果有要念財金所的話倒是會出考題,我們只要會用就好了,所以只要看Call和Put的價格是這樣的:

 

CP


 

其中d1和d2是這樣的:

 D1D2


 

 

參數是這樣的:

PA


 

所以我們知道計算價格需要五個變數,

s 現貨價格,我們拿來算台指選的話,就拿台指期市價當作s

k 履約價格

t 距離到期日的時間,要年化

r 年利率

v 年化波動率

 

放到excel上寫寫看了,如下圖,

 

excel


 

s,就是期貨價,假設7750。

k,就是履約價,假設我們要算的是7700的call和put。

t,年化的到期餘日這個地方要注意的是有人一年用日曆日365,也有人一年是用工作日255左右,L自己是慣用工作日的算法。到期餘日就是今日和到期日的差距,可以利用excel的函數 NETWORKDAYS()來計算,以圖中例子就是=NETWORKDAYS(C27,C28)。今日也可以用函數來包,例如=DATE(YEAR(NOW()),MONTH(NOW()),DAY(NOW()))。算出到期餘日為16後,拿來除255,就得到年化的t = 0.062745。

r,年利率,拿定存利率一年約一點多%,以1%為例。

v,主觀的波動率,波動率是重要的主題,下篇再以歷史波動率和隱含波動率一起進行介紹紀錄,這邊以15%為例子。

 

有了這些參數,就可以算價格了,Call算出來理論價是145.23,Put是90.4。用函數 =calloption(F25,F26,F27,F28,F29),這個calloption就是我們要寫的function囉,打開vba或直接在excel按ALT+F11,貼上這段程式碼

 
Function calloption(s, k, t, r, v)

calloption = s * Application.NormSDist(cal_d1(s, k, t, r, v)) - k * Exp(-(r * t)) * Application.NormSDist(cal_d2(s, k, t, r, v))

End Function

Function putoption(s, k, t, r, v)

putoption = k * Exp(-r * t) * Application.NormSDist(-cal_d2(s, k, t, r, v)) - s * Application.NormSDist(-cal_d1(s, k, t, r, v))

End Function

Function cal_d1(s, k, t, r, v)

cal_d1 = (Log(s / k) + (r * t) + (v ^ 2 * t / 2)) / (v * Sqr(t))

End Function

Function cal_d2(s, k, t, r, v)

cal_d2 = cal_d1(s, k, t, r, v) - v * Sqr(t)

End Function

 

稍微再解釋一下,公式的N(),就是常態分配的機率,可以用NormSDist()來計算,sqr()就是根號,d1和d2也都各自寫了function,也都是照著公式直接拿進來寫,一個一個填就完成了。

 

如果跟著作的話,現在就可以試看看這幾個參數的變動對於選擇權價格的影響囉。

 

接著說明一點,這是不包含股利的評價模式,對於股票選擇權不適用,算指數選擇權剛好。

 

我們現在是帶入五個變數計算出理論的選擇權價格,實際上市場本來就有市價,那麼五個變數裡只要知道四個,就可以求出剩下來那一個。所以我們有選擇權市價、期貨市價、要求的履約價、到期日、利率之後,就可以算出波動率了,是的,它就是隱含波動率,下篇再繼續寫程式實作它。 ( 隱含波動率 (with EXCEL VBA、C#) )

 

 

2013年8月21日 星期三

交易心理應用於程式交易 - 總和K棒濾網

 

在 四種常見的錯誤判斷 此篇中,J分享過我們到底如何判斷(或評估),然而在快思慢想一書中,有提到一個有趣的研究,可以讓我們應用到交易上面,也許可以有當作濾網的價值。

 

J將研究轉化成交易上的現象,讓我們先看這張台指期1分線圖,判斷兩個問題。

 

  • 請問總和實體k棒長度約為幾點?

  • 請問平均實體k棒約為幾點?


 

總和K棒濾網1

 

不知道讀者是否覺得第一個問題(總和)比第二的問題(平均)難答許多?一般常在看K棒的交易者,可能可以透過上圖大該抓得出來平均實體K也許大約3-5點,但無法馬上把整張圖的K棒長度加總計算,必須透過先想到平均再乘上總共估計約100多根K棒而得出一個總長的估計數字。

 

推究其原因,主要是我們的系統一(直覺辨識),並擅長處理平均數問題,但對於總合運算卻很不行,而又有相關研究發現,當我們在評估類別規模或案例數量時,總和的變相時常被忽略

 

如果我們常忽略,又不容易用眼睛就看出答案,我想也許會是有用的指標,就讓J來幫大家測試一下來觀察,程式碼如下。

 

總和K棒濾網2


 

利用INPUT參數KK來計算回取的K棒數(可跑最佳化)。

透過TL紀錄近40根(本例)K棒高點至低點長度的總和。

RL則紀錄若實體K為上漲,總計其上漲的總和長度。

BL則紀錄若實體K為下跌,總計其下跌的總和長度。

RR在計算,上漲總和長度佔高低點總和長度的比率。

BR則計算,下跌總和長度佔高低點總和長度的比率。

 

若先將簡單的TL放置在圖上,即可成下圖。

總和K棒濾網3

 

可簡單發現 K棒持續上升,表示K棒變長,其時間多數發生在早盤,也許是到了盤中交易量減少,使得K棒的長度減少,而透過這樣日內有周期性的現象,也許可以試著朝當沖的方向思考,因此推想早盤的方向容易是當天順勢交易的方向,而TL則是趨勢強度的指標,當指標夠強(例如突破一個門檻)才值得進場交易。當然口說無憑,眼見也不足為憑,來測試看看績效吧。

 

 總和K棒濾網4


 

利用TLBRY 把變數TIMES(本例09:00)的數值記錄下來,當作是否進場的門檻之後TL必須超過這個值,而且配合J先前寫過通道突破進場的邏輯(回憶請參考 通道突破策略 ),價格突破後進場,因此進場程式碼就改為下圖,增加一個門檻條件在突破進場之前。

 

總和K棒濾網5


績效如下圖,可發現不論多空單獲利都小幅減少,但空單的回檔減少了。

 

總和K棒濾網6

 

當然這樣的結果我們不會滿意,此時我們改為研究多空分開的指標RR(表示上漲總長度佔總長度的比例)與BR(表示下跌總長度佔總長度的比例)。

 

在使用之前,我們一樣來觀察一下他們各別畫出來的圖形如下,其中紅色是RR,綠色線是BR,可以看出當空方主導且強勢的時候BR會不斷上升,反之RR不斷下降,而當時行情則會一路往下,直到行情轉為橫盤震盪或反轉時,RR與BR將出現轉弱或反轉的現象

 

 總和K棒濾網7


 

因此J將進場條件改為如下圖所示,透過分別記錄RR的門檻值RRBRY與BR的門檻值BRBRY來當作進場濾網,之後若要於價格突破後進場,當下的RR或BR值必須先要超過9點所記錄的RR或BR值

 

總和K棒濾網8


績效測試如下。

 

總和K棒濾網9

 

整體勝率提高到超過50%。

 

總和K棒濾網10

總和K棒濾網11

總和K棒濾網12


 

由績效測試表可發現對於多單沒有太大的效果,僅小幅改善,但空單卻有明顯的幫助,不但改善獲利,也減少回檔風險,可能可以推論若要進場作空,K棒趨勢要夠明顯才比較容易獲利

 

 

小結,透過K棒長度的邏輯,J簡單測試了兩個濾網當作示範,似乎可以改善一些錯誤進場的狀況,而關於TL這類趨勢指標的當沖應用,讀者可以繼續延伸研究,畢竟許多現象不是很容易可以從圖中看出關係,例如若TL明顯增加,是否該進場?多空是否有差異?或TL明顯降低,是否該提早出場等。

 

也許有更廣的應用和策略搭配可以思考,例如不限制使用在當沖交易上,將回取K棒拉長,而當TL指標處於近期低檔或高檔,是否可以當作逆勢單的開關? 更甚TL指標是否可以搭配到選擇權策略的應用上? 等等有意思的想法,也歡迎讀者一起來思考討論,日後 J 也會繼續幫大家測試邏輯,示範如何透過增加出場條件的設計,改善績效,使得策略發展逐漸完善。

 

 

 

 

2013年8月20日 星期二

四種常見的錯誤判斷

 

在開始解釋我們到底如何判斷(或評估)時,J將舉一些常碰到的狀況,來思考我們如何判斷,請讀者依序往下閱讀,並試著思考與記得被問問題後冒出的第一個念頭。

 

1.請問裕隆這檔股票,今年底的目標價是多少?


 

這時候第一個冒出的想法,可能是裕隆不熟悉? 或就是那家做汽車的。股價現在多少? 不知道?  如果硬要猜,就開始會想到,這家公司經營者好像蠻有型的? 汽車聽朋友說好像還不錯?最近常在路上看到?

 

透過系統一的幾種能力(特色),我們可以做出判斷。

 

例如利用心智發散性(已經不是在回答本來問題,而不自覺想到其他問題)與月暈效應(因為經營者有型,所以公司應該不錯,股價應該好),最後結合強度配對(一種配對量表在我們心中自動運算,將經營者外觀好看程度或汽車好用度,轉換成財報好壞或股價強弱程度)與因果關係的聯結,推導出因為以上種種原因,所以股價應該是多少。

 

2.如果說某家公司預估今年EPS為2.3,則今年底的目標價是多少?


 

要回答這個問題,有受過財務訓練或是有經驗的交易人,這時就習慣性的使用了捷徑這個系統一的能力,想利用本益比乘上EPS的方式來計算股價,然而實際交易上並不能完全利用簡單的公式得出今年底合理的目標價,只是前面的敘述,讓有練過的讀者用了簡單的方法,回答了一個其實很困難的問題

 

然而,這個過程中J並沒有告訴大家這是哪一類的產業,或是哪一家公司,所以如果硬要判斷本益比,並真的得出一個數字答案,這時就要用上可用性偏見這個系統一的能力,依照答案進入我們心中的難易程度或頻率,讓我們快速的回憶,並得出最常被提及或印象最深刻的答案,當作台灣公司平均的本益比。

 

3.下圖是某家公司的日K線走勢圖,請問今年底的目標價是多少?


 

交易心理判斷1


 

透過圖片,可以看出一個上漲趨勢,可以看出目前的價格,而此時,各位讀者的判斷已經受到「錨點效應」所影響,因為資訊有限,形成利用既有的數字進行調整的現象例如現在價格100左右,在配合已經上漲後壓回的狀況,所以估計年底大概可能也落在高檔120-80之間。

 

但實際上J並沒有說,這張圖就是今年以來的K棒,實際上這圖是2011/8-2012/5的鴻海日線圖,這邊反映出了認知放鬆的現象 ( 參考 交易心理-認知放鬆 ),與判斷信任感的問題,我們很容易可以從外觀或人的行為語言判斷是否要信任這個人,而在目前所有的發文中,J稍微有營造出一些與讀者間的信任感,所以將導致直覺得認為,提供的資訊就是跟你想的一樣。(當然J是不會欺騙讀者的,這裡只是為了舉個小例子。)也順道提醒大家在閱讀任何文章或任何資訊的時候,一定不要讓自己的認知太過放鬆,如果交易對你是件重要的事,那千萬要自己動手驗證每一件事情。

 

本文中所提及的「因果關係聯結」、「捷徑」、「可用性偏見」、「錨點效應」都是我們在使用系統一做判斷上常有的現象,因此也造成我們許多判斷上出現錯誤的情況。之後J將一樣利用交易上所碰到的事情來詳細舉例,一起來思考並驗證交易上出現的現象,試著尋找出一些獲利的方法與原因。

 

 

 

 

 

2013年8月19日 星期一

通道突破策略

 

當沖突破是 Technical 技術分析 中很重要的一部份,其觀念在於市場價格穿透了之前的價格壓力或支撐,繼而形成一股新的趨勢,而我們的目標即是在突破發生時能夠確認並建立部位以獲取趨勢的利潤。

 

一般比較單純的當沖突破策略,常利用近幾日內價格計算交易區間,當今日價格一上漲突破即買進,或價格一跌破即放空,這樣的交易區間,可以是固定的,也可以是變動的,當上下兩條突破線連結起來即形成一個價格通道,最常見的指標就是布林通道(Bollinger Band),L曾利用他示範過逆勢的交易策略,可參考 逆勢策略-Bollinger Band

 

創建一個價格通道,方法有無限多種,而通道突破策略又是一個可能可以長期獲利的方法,因此本篇J將利用最單純的方法建立通道,驗證台指期短線當沖中是否可以這樣獲利? 程式碼如下:

通道突破策略1


 

首先定義HL為一個INPUT參數,主要目的是,我想知道要回取(參考)多少K棒形成的高低點比較適合交易。

 

利用FOR迴圈與IFF條件,往回計算最高的值存入HH,最低的值存入LL並且每根K棒算完後,下一根又清除所有計算結果,再以當時的K棒位置往回從算HL(本例為80)根K棒,形成一個不斷計算最近80根K棒高低點的通道

 

若將其寫在指標中,即可做出如下的圖形,我們可藉由觀察這樣的圖形,思考是否值得進行下一步當沖突破的進出場撰寫。

 

通道突破策略2


 

從上圖來看,可發現當日內行情往一個方向移動,每次重新計算時,當根K線即是近80根的最高或最低,而其走勢似乎又有連續性,然若無接觸邊界的日內行情,則最後當日行情通常較小,屬於區間震盪的機會較高。

 

再看似有機會區分出強勢突破行情或日內整理盤時,我們著手進行交易訊號進出場的程式撰寫部分。

 

通道突破策略3


 

簡單的寫上要進場交易的時間,通常會保留一些時間給行情發展的機會,所以不會讓策略到最後幾分鐘還可以進場,而又因最後出場時間到了馬上要出場,出現沒有太大效益的交易狀況。

通道突破策略4


 

進場有受時間限制,所以出場要另外拉出來寫,以免受時間限制而無法停損

通道突破策略5


 

尾盤的出場,J覺得值得多花至少一篇來分享一些方法,本篇為了方便測試當沖的績效,我們可以使用內建SET指令,將最後收盤價當作出場價格。但實際交易中,請切記這個指令是不能讓你在當天出場成交的,當丟單的時候,已經收盤了,變成隔天的早上開盤才會成交出場,無法達成當沖的交易目的。

 

撰寫好後,就可以在圖上看到部分的交易狀況如下

 

通道突破策略6


 

 

績效圖如下,回測時間2005/1-2013/8,手續費與滑價設定總共來回800。

 

通道突破策略7


通道突破策略8


通道突破策略9


通道突破策略10


 

 

從簡單的測試來看,這樣的通道突破在台指期當沖上,是可以獲利的。雖然這樣簡單的邏輯,在當沖的回檔上(MDD)相對來說算大的,而近年的獲利也不佳,但因邏輯單純,交易次數夠多,若能增加一些濾網,適當的減少一些可能會虧損的交易,即可增加獲利也減少回檔的幅度。

 

後續,J將利用這樣的簡單進場邏輯,透過每個小細節的改善,讓這個策略成為一個更完善,風險報酬比更好的策略,也期望透過這樣一步一步的分享,了解在程式撰寫中除了找新邏輯以外,許多小地方其實大有文章,多一點小嘗試,也許會發現讓績效大幅改善的方法

 

 

 

2013年8月14日 星期三

交易心理-認知放鬆




觀察最近的k棒狀況,如下圖


 

認知放鬆1


 

也許沒甚麼特別感覺,就是區間震盪的狀況,但如果經過刻意的加工與操作,變成下圖,也許就多出了很多說故事的空間,至於真的眼見為憑是對的嗎?

 

認知放鬆2


 

再深入思考一下,是否認同最近的k棒走勢真有其規律,似乎下跌大約1.5-2天,隨後就會上漲約1天,再下跌1.5-2天,因此推估接下來似乎可能也會走這樣的模式?直到這個節奏改變之前,我們可以利用這樣的方式低買高賣獲得報酬?

 

J藉由心理學的理論來說明一下,到底系統一如何何評估與判斷這件事?

 

剛剛敘述與圖片表達過程中,讓你產生了認知放鬆的現象,所謂的認知放鬆的營造與產生的感覺,J整理成下圖來表達。

 

認知放鬆3


 

以本例來說,透過圖形的展示,箭頭反覆得出現,這樣重複又清晰的展示,配合詳細的解說,並故意藉由預知的想法,主導你的思考讓讀者產生熟悉感,這種對過去的感覺,就是一種錯覺。

 

系統一對於過去所發生的事情有著強烈而簡單的直接反應在不刻意花時間思考或比較疲累的情況下,系統二會依照熟悉感來對事情的對錯,做出判斷

 

在快思慢想一書中,也常提及「WYSIATI」=What You See Is All There Is,表示系統一常讓我們傾向相信所看到的事情就是全貌,不想知道更多訊息、不用考量思考的完整性合理化接受眼見為憑這件事情,比拒絕其為真要來的輕鬆太多了

 

因為人們對於「熟悉感」與「真相」是難以分辨的

因此,即使是謬誤,只要不斷重複(俗稱洗腦),就可以讓人信服。

 

為了要對抗這種似是而非的熟悉感,必須要立即提出一些反例,或是利用程式交易進行驗證,盡可能減少樣本過少造成的錯誤認知。J簡單幫大家找一張圖來重新思考一下,這種眼睛看到的規律,是否真有固定的邏輯,並能用來長期賺錢?

 

認知放鬆4


 

從這個簡單的例子來看,可以發現行情的走勢周期明顯的不一致,而觀察周期的選擇變成重要的決定因素,然而這個因素若由人為的改變,將容易出現時好時壞,最後無所適從的現象,因此藉由程式交易的的撰寫來驗證一種固定邏輯的判斷,可有效的避免眼睛看到的錯誤認知,建立相對穩定的交易邏輯。

 

研究近幾日K棒的型態在程式交易上是很有幫助的,可以繼續思考的方向是,在傳統當沖突破中,使否可用近幾日的交易走勢(震盪或一路順暢),來當作一個大的濾網(開關),決定當日是否進場?或是否變得更難(更容易)進場? 這部分的延伸,J以前也有測試過,確實可以改善一般當沖突破連續數日被巴(輸錢)的狀況,日後將在程式交易策略章節中做些簡單的示範,持續紀錄思考與方向。

 

 

 

2013年8月8日 星期四

當沖逆勢單進場

 

或許逆勢單進場是人的天性,初入市場或是一般人大部份都是很自然朝著逆勢單的方向操作,不論聽了多少次逆勢單不會賺,仍是改不了的習慣。是不是沒辦法接受去追高殺低幫人抬轎? 或是因此受傷而轉成逆勢短進短出?

 

總之,L 看過許多操作逆勢的例子,也分享過一點逆勢的邏輯和想法,如 逆勢策略-Bollinger Band 、 逆勢策略 – HighShort – LowBuy 、逆勢策略 Counter-Trend Strategy,L 不會說逆勢單不能作,作逆勢一定會賠錢,但是,普通一般的逆勢單要獲利,真的沒那麼簡單。

 

來些例子比較有感覺,也可以加深概念。假設我們來逆勢操作的邏輯是以開盤價為準跌50點作多,漲50點作空,當沖單,擺到收盤。台指費用設定來回共800元,期間是2005年至2013/5,那麼結果是這樣:

 

50Both


 

圖長的很難看,輸了兩百多萬。OK,這不是一般人的逆勢單,一般來說,跌50點作多一口,那再跌到100點時成本更好,應該作多第二口,如果可以再跌到150點的話,頭都洗下去了,應該再作多第三口,這樣才對。反之空單亦然,漲50點空一口、100點空第二口,150點空第三口,嗯,結果是這樣:

 

150Both


 

圖長的更難看,輸了四百多萬。OK,哪有這麼笨的逆勢,跌50點時作多一口,再跌到100點應該要作多兩口,這叫加碼攤平,成本更好,獲利很快就回來了。反之空單亦然,漲50點空一口,漲100點空兩口,嗯,結果是這樣:

 

2013年8月4日 星期日

快思慢想讀後系列分享

 

大家一定常聽到許多投資圈的資深前輩、世界馳名的投資大師無不強調交易心理的重要,似乎心理層面確實也凌駕所有行為,主導交易策略的設計,影響資金管理的想法,決定交易是否長期地堅持,造成最終交易結果的不同。

 

幾個月前,J看了快思慢想這本心理學的書籍,得到許多心得,發現有好多心理的現象、人類的行為,都與交易中的現象相當雷同,也許,藉由不同領域的研究,我們能得到一些不同的交易想法,針對人類心理上的特色,設計策略,也能重新省思自己看待交易的想法

 

書的內容、心理學的理論不會是我們交易人所關心的重點,詳細的內容讀者也可自行閱讀,本系列的文章將分享J在看完理論後,想到與交易上有關的現象,藉由這樣的轉化,提供讀者一些將心理學聯結交易行為的想法

 

作者將人的思考分成兩種,也是最常見到的兩個名詞,系統一、系統二,

為了讓讀者快速了解J簡單整理成下表:

 

2013-08-03交易心理-快思慢想讀後系列分享

 

其中,直覺是什麼?心理學家-賽蒙說過一句話:直覺就是辨識。我們從情境中的提供的線索,從記憶中提取相關的訊息,而這個訊息提供了答案。這類型的思考,隨時都在被我們使用,我們是無法關閉系統一的,因為大腦幾乎不用費力就可以執行,可以直接對訊息辨識而後馬上反應。

 

所以簡單的導到交易上,我們也可以將交易者分成兩類,主觀交易者-使用系統一,透過經驗與記憶的累積形成其交易能力,盤中由交易者辨識各種線索,得到多空的決策;程式交易者-使用系統二,透過對歷史資料的分析,撰寫成固定的程式,盤中藉由電腦辨識訊息,判斷出多空後強制執行交易,減少不理性的行為干預。

 

在開始後續的系列分享前,J覺得兩個系統之間其實沒有絕對的優劣,多數的時候,系統一幫助我們快速處理很多決策,也讓我們輕鬆許多,唯有在做一些重大的決定時,要記得多使用系統二,盡可能減少一些錯誤與風險。至於什麼樣的事情稱得上「重大決策」,就見仁見智了,對J來說,在交易中減少風險是件蠻重要的事情,因此選擇了撰寫程式為執行交易的方式。

 

 

 

2013年7月26日 星期五

Technical 技術分析

 

期權交易分類 這篇文章裡,技術分析是非常大的一塊重點,每個市場上的投資人都會聽過各式各樣的技術指標,聽分析師講的頭頭是道。或許有的指標可以得心應手,但也常碰到失靈的時候,技術指標有的聽起來很奇怪,但是也沒辦法否定它的存在。總是會有人宣稱他的指標如何戰勝市場,吸引一波波投資人相繼跟隨研究。

 

這些事情不是L可以講的清楚的,全世界最頂尖的交易員和學者早就爭論許久,技術分析,到底有沒有用?

 

如果沒用,為什麼那麼多人在用?是不是我不會用?

如果有用,要怎麼用?用什麼?什麼時候用?

 

建議可以先參考WIKI對技術分析的解釋,中英文兩篇,內容有些不同。

 

WIKI-Technical analysis

WIKI-技術分析

 

和其他交易方法一樣,能夠瞭解它才可能用的久、用的順。很多人第一步就踏錯了,看到琳瑯滿目的技術分析書籍就急著拿來當武器上戰場,聽到分析師或朋友信心十足的技術分析就跟隨使用,這都不是長久之計,是碰運氣。其實在尋找和嘗試各種指標之前,先想想它為什麼會有用?是否適合自己用?絕不輕信其它人或老師片面之詞,也絕不盲目跟隨,我們要作的是先驗證,再學習使用,然後再實際應用。

 

所以我們才要看這些資料,首先,技術分析依據下面三個基本原則:

  1. 價格反應一切資訊 (Market action discounts everything)

  2. 價格是有趨勢的 (Prices move in trends)

  3. 歷史會重覆它自己 (History repeats itself)


 

你相信這些原則嗎?例如History repeats itself,這是名言,是格言,但不一定總是正確,就算在某些領域和經驗告訴我們是正確的,在投資市場也不一定正確。如果你不相信它,又怎麼能期待以前有用的指標,這次進場也會一樣地有用?反之,如果你相信它,它又表現的不好時,那怎麼調適?

 

很可能你自己也不曉得自己是否相信這些原則,所以我們才要驗證,各種技術指標在各種市場的表現,模擬我們在每次進場該有多少的期待,表現不好的機率有多少?有多不好?最好最壞是如何? 然後我們再去運用它,再繼續深入瞭解調整它。

 

這個它,有可能是以下任一種指標,或是兩種以上指標的交配組合。這像是武林中各門各派的功夫目錄,我們就來開始一個一個調查驗證,用回溯測試的方法,用策略評估的原則,尋找適合自己的降龍十八掌。

 

Concepts





  • Chart pattern – distinctive pattern created by the movement of security prices on a chart

  • Cycles – time targets for potential change in price action (price only moves up, down, or sideways)

  • Dead cat bounce – the phenomenon whereby a spectacular decline in the price of a stock is immediately followed by a moderate and temporary rise before resuming its downward movement

  • Elliott wave principle and the golden ratio to calculate successive price movements and retracements

  • Fibonacci ratios – used as a guide to determine support and resistance

  • Momentum – the rate of price change ( Momentum 市場動能 )

  • Point and figure analysis – A priced-based analytical approach employing numerical filters which may incorporate time references, though ignores time entirely in its construction

  • Resistance – a price level that may prompt a net increase of selling activity

  • Support – a price level that may prompt a net increase of buying activity

  • Trending – the phenomenon by which price movement tends to persist in one direction for an extended period of time


 

2013年7月23日 星期二

Multicharts跨圖表傳遞資料

 

在MultiCharts裡有時候會想要引用不同圖表的資料,這個資料可能是價格、計算的指標值、或是某一個圖表訊號的部位,例如B圖表想要參考A圖表策略的目前部位為何?

 

不同圖表間資料的傳遞可以利用下面內建的函數,

GVSetNamedDouble

GVSetNamedInt

GVGetNamedDouble

GVGetNamedInt

 

Set就是存值,Get就是取值。Int是存整數,Double是存小數。

 

以一個傳遞訊號部位的例子來說明,建立兩個indicator,一個是PositionSource,將部位值存起來。一個是PositionDestination,將部位值取出來。

 

PositionSource範例程式如下,

 

PositionSource

 

行號4,將IntrabarOrderGeneration開啟,原因是部位可能每個TICK就有變動,這要看你的Signal是不是用到,一般來說,如果用到SetStop這類函數,就要把這個IOG打開。

 

行號6,和上面同樣理由,宣告一個IOG的變數PositionSource

 

行號8,i_MarketPosition 和 i_CurrentContracts 是部位方向和部位口數,兩個值就是在Siganl裡寫的MarketPosition和CurrentContracts,因為這裡寫的是指標,所以就用前面+ i_的。兩個值相乘後存到PositionSource這個變數裡,例如作空一口值是-1,作多兩口值是2。

 

行號10,呼叫GVSetNamedInt函數,將PositionSource的值,存到前面引號內的變數名,這邊同樣也取作PositionSource,這個名字就是給其它圖表呼叫用的。另外,這個例子傳遞部位值使用整數Int就可以了。

 

PositionDestination範例程式如下,

 

 

PositionDestination

 

前面一樣設定相關IOG,行號8將PositionSource的值取出來,存到變數Position中,第二個參數的說明並不清楚,函數說明僅寫是ErrorCode,推測是取不到值發生錯誤該傳什麼值,這個填一個數字就行了。

 

應用上,這個部位也可以拿來再和自己的部位相加,或是取其它資料時再拿來運算。只是這個取的值,只有存最後的狀態而已,如果需求是要拿來回測就沒辦法了,要用一般多新增Data的方式才可以回測。

 

 

2013年7月22日 星期一

交易計劃的建立

 

此篇想紀錄交易計劃的建立,主要是從

 

10 Steps To Building A Winning Trading Plan

 

這篇文章整理重點,文章的主題是建立勝利交易計劃的步驟,其實就是在交易前中後要養成良好的習慣,這也是老生常談的東西,但這些東西就是知易行難,需要有持之以恆的毅力或是把它們都融入到日常的生活中,才能夠發揮效果。

 

或許此篇要講的是偏向一般的交易方法,如果已經是採用程式交易的方法,那已經是建立了一大部份的計劃了,不過其中仍有重點值得參考。另外給點自己信心,如果你能建立並持續著自己的交易計劃,那已經是少數人才辦的到了,雖然還不能保證成功,但是你已經消除了大部份的障礙,並且有能力避免重覆錯誤。

 

L不曉得直接翻譯會不會有什麼侵權問題,所以還是用自己的話再講一次出來。

 

交易技能評估

你準備好交易了嗎?是否有先在紙上先交易過、模擬過?你可以按照你的信號,毫不猶豫地在市場上真正進行交易嗎?你準備好贏過其他交易者了嗎?

 

心理準備

你瞭解自己可以承受的風險在哪嗎?瞭解自己在風險多大時,晚上會睡不著覺?當風險來臨時,你可以坦然面對,而不會生氣或是很難受嗎?

 

設定風險標準

評估自己能承受的風險程度後,再設定每個投資組合最大可以損失的幅度,如果你很保守,或許一年僅能承受1~5%的虧損,那麼千萬不要把投資組合的風險提高到10~20%,因為那不適合你,不會成功運作。

 

設定獲利目標

相對於風險的設置,我們合理的獲利目標該如何設定?例如上面提到的,忍受1~5%的風險,假設獲利/風險比為3倍,那麼我們可以預期獲利的目標是3~15%。另外也應該為每月和每年進行獲利評估,當有失誤時應重新檢討。

 

作好功課

在市場開始交易之前,應該調查好市場的近況及報告,也可以從其它市場的表現來推測合理的目標行情,另外,當有重要報告即將發布時,應該儘量避開這種高風險的時刻,而等到報告公佈並評估後再進行交易。

 

設定出場規則

大多數交易者耗費90%或更多的精力在尋找買入信號,但很少關注到何時該退出,更有許多交易者在虧損時不敢出場去停損它。實際上在我們進場時就應該設定好我們停損停利點為何,一但到達停損停利點,就該作執行,否則會嚴重影響前面所提到的風險和獲利設置標準。

 

保持交易紀錄的習慣

寫下目標、獲利、虧損等交易紀錄,進而思考為什麼。獲利了,如何繼續保持?虧損了,如何避免再次發生?寫下交易的細節、包含當下的想法,可以讓自己對自己更瞭解。

 

以上,知易行難。

 

 

2013年7月9日 星期二

台指選擇權結算買賣方損益

 

此篇想要紀錄台指選擇權買方賣方在過去的表現。交易模式很簡單,每次近月合約一開倉後就進場,然後就都不動一直放給它結算,這樣的交易方法,各位可以先想看看,在台指選擇權這麼多年是作買方有利還是作賣方有利?

 

仔細說一下回溯測試的規則,以下圖為例,例如2005/2/17日是結算日,下一個交易日2005/2/18的收盤時進場,履約價選擇價平6100,作買方就是6100的call和6100的put各買一口,分別是101點和86點,結果這個月到結算,買方輸了98點。

 

結算資料

 

L作的測試期間是2005/1 ~ 2013/5,在這101個月的期間裡,不算交易費用,光是以策略的損益作累積,結果買方累積損益是 237點!! 也就是說,不是買方有利,也不是賣方有利,在期間夠長的情況下,買賣方是勢均力敵的。

 

以下是買方月損益和累積損益圖。

 

買方月損益

 

以下是買賣方月損益的基本統計資料,買方最大獲利881點、最大損失503點,在101個月中贏了44次,平均贏一次賺246點,平均輸一次189點。可以看出意料之中的買方獲利月份少,但賺賠比高。賣方獲利月份多,但賺賠比低。

 

買賣方損益重點

 

以下是各月份買方損益。

 

2013年7月2日 星期二

選擇權策略

 

選擇權交易是 期權交易方法 裡非常非常重要的一塊,L想要開始紀錄選擇權的研究都想了很久如何起頭,因為它變化無窮,可以設計出太多種策略,只要深入瞭解選擇權各種特性,搭配買賣方價差或不同月份或期貨,就能找到特別的策略。

 

還有許多故事是源由選擇權策略,那些大起大落的玩家專家們,在這個市場經歷了多少勝利與苦頭,都在這裡,這麼多迷人的奧妙之處,你怎麼能不愛選擇權呢?

 

此篇先紀錄未來想要整理的主題,畢竟可以談的主題太多,需要先整理個架構,再來抽空各個逐一紀錄。

 

選擇權基礎部份

  1. 評價,Black–Scholes option pricing model  (選擇權評價-BS MODEL (with Excel)  )

  2. Delta (  選擇權GREEKS實作(C#) )

  3. Gamma

  4. Vega

  5. Theta

  6. 隱含波動率,implied volatility ( 隱含波動率 (with EXCEL VBA、C#)  )


 

價差策略部份

  1. 垂直價差、比例價差

  2. 跨式、勒式部位

  3. 蝴蝶價差、禿鷹價差

  4. 時間價差,近遠月

  5. 與期貨組合部位


 

策略設計與測試部份

  1. 台指選測試

  2. 周選擇權策略

  3. 選擇權應用期貨訊號

  4. 歷史買方賣方勝率與盈虧比紀錄 (台指選擇權結算買賣方損益  )

  5. 選擇權與期貨投資組合的應用

  6. 其它相關 ( 籌碼分析-法人期貨未平倉  )


 

大致上以這些主題為方向,也要提醒自己要思考要紀錄的是有價值的東西。關於選擇權的書很多,但更多的是只有介紹買賣方和基本價差策略,再描繪選擇權很容易操作,那些太害人了。進場操作選擇權是很簡單,但要變成拿手的、有把握的獲利武器是一點都不簡單。