2014年2月10日 星期一

[程式交易] 如何寫出你的第一個交易策略

10年前在美國就已經有自動化程式交易了,
以前大部分都是用Tradestation,
而現在的選項多了非常多。
以台灣而言,近幾年已經比較少看到TS了,
都轉而去用MultiCharts (MC),
一方面是券商的推廣,
另一方面是MC還真的滿好用的。

自動化程式交易的目的最主要是徹徹底底的執行設定好的策略,
避免人性的干擾,又可以24hr執行監測,又可以在投入真正資金前,
回測自己交易策略的績效。

這時候就可以把時間花在研擬策略上。

程式交易的基礎很簡單,

當符合某種情形時,就買進。
當符合某種情形時,就賣出。


簡單吧?

用英文來解釋,其實就是
If A happens, then buy.
If B happens, then sell.

所以我們其實只要去定義 A、B,以及更明確地把 Buy 、Sell的模式定義出來就好。

這已經幾乎快要變成MC認得的easy language程式語言了。

很多人都以為要寫程式一定要工程背景的人才寫得出來,
其實不然。
在交易領域裡面,所使用的程式語言其實跟英文很像,
而且所使用的英文都是很簡單的。

電腦其實也是判斷K棒的價格的變化來執行的,
那K棒上最重要的四個價位,
Open 開盤價
High 最高價
Close 收盤價
Low 最低價
這四個價格構成了一根K棒,也顯示了價格的變化。


Close > 100   (收盤價大於100  )
Low   < 100   (最低價小於100  )
High > Open   (最高價大於開盤價)

上面是平鋪直述的直述句,若是加上一點簡單的 if ...then ...(假如...發生,就....)

就可以變成一個可執行的策略,

舉例: (先不考慮marketposition目前手中部位的情形)

if High > Open then buy next bar at market;
//當最高價高於開盤價時,買進1口市價。

if Low < Open then sell next bar at market;
//當最低價低於開盤價時,賣出1口市價。

p.s.
next bar: 下一根K棒
market:  市價

----------------------------------------------------

再進階一點的,就可以開始使用一些技術分析的指標來協助。

以 RSI舉例, RSI的中文名稱是 相對強弱指標 Relative Strength Index ,
是一個 0~100 的指標,50以上代表目前偏多,50以下代表目前偏空。

我們來一起寫一個簡單的邏輯:
RSI 大於 52 買進1口(做多),RSI 小於 48 賣出1口(做空 or 平倉),
(意思是,趨勢轉向上,我就跟跟看,趨勢轉向下就快跑)

我們一開始得先定義一下變數。
什麼叫做變數?
變數顧名思義,就是在程式執行中,會一直變動的數字,例如開車時的時速表。

所以我們得先告訴電腦, RSI的定義。 這個動作叫做 宣告。

所以在策略一開頭,

inputs: Price(close), Len(12);
//input 是未來可以在MC裡調整的參數,價格(收盤價)以及時間週期 length的縮寫,
//在這邊是12根K棒

vars: var1(0);
//vars 告訴系統我們要宣告變數了,定義一下var1 變數(variable) 1,
//告訴電腦我們有這個變數要偵測。

var1=RSI(Price,len);
//定義,var1=RSI 讓var1 這個變數等於指標RSI,
//而且是用 上面定義的時間以及價格去計算出來的RSI,此例為 12根K棒的收盤價

if marketposition=0 and var1 >52 then begin
buy("buy") next bar at market;
end;
//假如目前沒有部位(marketposotion=0) 而且 var1(RSI)大於52,就
//在下一根K棒開始時(next bar),市價(market)買進(buy)。 多單進場!
//沒有寫口數就1口。並在圖上標記 buy ("buy")。
//記得尾巴要寫 end; 告訴電腦這部分策略的結尾

Marketposition=0   沒有部位   marketposotion市場部位
Marketposition=1   手上多單
Marketposition=-1  手上空單

繼續

if marketpositon=0 and var1 < 48 then begin
sellshort("sell") next bar at market;
end;
// 空單進場! sellshort 是空單的進場的語法 並標記 sell 在圖上。

if marketposition>0 and var1 <48 then begin
sell("exit_buy) next bar at market;
end;
//假如手上是多單而且RSI小於 48,就把手中的多單市價平倉。

if market position<0 and var1 > 52 then begin
buytocover("exit_sell") next bar at market;
end;
//假如手上是空單而且RSI大於52,就把手中的空單市價平倉。

-------MultiCharts RSI 進出場策略程式碼-------------

inputs: Price(close), Len(12);
vars: var1(0);
var1=RSI(Price,len);

if marketposition=0 and var1 >52 then begin
buy("buy") next bar at market;
end;

if marketpositon=0 and var1 < 48 then begin
sellshort("sell") next bar at market;
end;

if marketposition>0 and var1 <48 then begin
sell("exit_buy) next bar at market;
end;

if market position<0 and var1 > 52 then begin
buytocover("exit_sell") next bar at market;
end;

-------------------------結束------------------------------

這樣,一個很基本的策略就可以上線了! 記得要按編譯才行喔~

如果對程式有興趣的朋友,歡迎底下留言大家討論,

如有需要,我可以分享我自己目前在跑的RSI程式
(有加了一些濾網,停損等,過濾掉一些雜訊,不然盤整時期被巴假的 ==)
Related Posts Plugin for WordPress, Blogger...