網頁
2013年10月30日 星期三
Multicharts報價串接DDE
本篇先不論有些軟體可以直接串接DDE字串的方法,因為通常可能會用多來源做備援系統或判斷報價速度,透過交易量者較大的在EXCEL上進行判斷,之後取出該格報價作為來源,因此學會EXCEL的串接DDE是特別重要。
首先準備好報價來源,放置在EXCEL上, J 故意建置兩個分頁,如下圖左下角所示,以便於後續示範如何建立有多分頁的報價字串,注意此處要先存成英文檔名且格式為2007以前使用的.xls(本次示範mc軟體較舊未能試驗是否新版已經支援.xlsx)
下圖為第二分頁,讀者未必要分兩個分頁,需要使用需求與管理是否方便,準備好後我們進行QM的設定。
打開QM,如下圖選擇Data Sources
往下拉可以找到universal DDE的選項,點選後按右側,clone(複製),本處讀者當然可以直接使用設定去變更這個未定義的報價來源,但我們通常要製作不只一個報價來源,因此透過複製的方式,可以不斷地建置多重的報價來源。
隨讀者喜好建立名稱,注意,第二欄位只能key 3個字母。
按下ok後就出現在可用來源裡了,點選他,再按右邊的settings,進入字串設定
首先示範,有分頁且指定欄位的格式,主要的邏輯為先key入=EXCEL|’[檔名.xls]分頁名’!格子位置,完成如下圖。本範例讀者可從本篇最上方第二張圖看到,R2表示第二行,C6表示第六欄,就可以找到成交價的格子,同理R2C8就是累積成交量(某些報價軟體只提供累積成交量,若收取本格則在程式碼中,需要透過減去前一值的方式算出當根K棒單量)。之後再左下角按TEST,若是盤中接報價,即可發現有報價再跳動,若是盤後建置,則可透過在EXCEL上任意地方KEY數字,再還原的做法,讓EXCEL以為有新資訊在跳動。
接著示範不預設商品代碼的作法,首先重新建立另一個資料源。
進入設定後,KEY法J在此處順便示範不預設分頁的做法,假定讀者並沒有建置分頁可以採用下圖的KEY法,因此主要邏輯就改為=EXCEL|檔名.xls!*, * 的部分,就是本次最大的差異,透過*的方式不先預設報價所在的格子,即可達到同資料源,接許多商品的優勢。
字串key好後,一樣在左下角按test,此時會多跳出一個視窗,要key入你要測的報價代碼(EXCEL的格子),如下圖。
確認後就可以看到如下圖所示,一樣透過在EXCEL上更改報價的方式,讓EXCEL上的報價感覺有跳動,就可以測試有沒有成功。
完成後,開始建置自訂的商品代碼,可參考J之前的文章 Multicharts建立自訂商品 ,下列步驟就跳快一點。
2013年10月23日 星期三
歷史波動率
接續前篇 選擇權評價-BS MODEL (with Excel) ,波動率主要有歷史波動率和隱含波動率兩種,此篇要先要紀錄的是歷史波動率。以 L 自己的交易心得來比喻波動率的話,瞭解波動率之前,看期權交易是方向和時間這二維的平面,瞭解波動率之後,看市場和策略像是立體的三維,方向、時間和波動。
在使用上,這個值不只對選擇權交易很重要,波動率本身就是選擇權評價重要的一個因素,不瞭解它的話,幾乎可以說別玩了。對於期貨交易也非常有參考價值,在期貨程式交易方面,也可以是不錯的濾網,甚至作為主要邏輯也可以。
歷史波動率的計算方法是: 一段期間內的收盤價計算的年化報酬率標準差,這句話不像中文,但其實不會很複雜,拿EXCEL作簡單的五日波動率範例,如下圖。
步驟是
- 列出日期和收盤價
- 把收盤價取Log,紀錄在C欄,例如C7的公式是=LN(B7)
- 計算報酬率,就是Log相減,例如D7的公式是=C7-C6
- 計算五日標準差,例如E7的公式是=STDEV(D3:D7)
- 將標準差年化,例如F7的公式是=E7*SQRT(252)
這樣就計算好了,剛好可以看到這五日台指的歷史波動率算出來只有5.09%,真是低的可怕。
再來補充在Multicharts把歷史波動率寫成指標的語法,如下圖。
計算就和上列的步驟一樣,這個指標可以算兩個期間的歷史波動率,參數是20和60,畫出來的圖如下。
有了圖就可以觀察行情和波動率的走勢,一般來說,多頭時波動率低,空頭時波動率高。或是換個角度說,波動率高行情大,波動低行情小。以這樣的特性來說,就可以作為濾網和交易邏輯了。
深入一點的再紀錄,以上兩個範例計算最近的台指,五日是5.09%,二十日11.97%,表示台指波動是壓縮中(而且壓的很小),那這個波動率的數值意義是什麼?
以波動率10%來舉例,這是年化的(計算中有乘一個根號252),假設台指現在8400點,10%是840點,表示一年之後台指在7560~9240點(8400加減840點)的機率大約是68%,這個時間和空間可能比較沒概念。來算一個月的試試,10%是年化的,月的就再除根號12,等於2.89%,等於8400*2.89%=242點,表示一個月之後的台指在8158~8642點的機率是68%。那麼,假設你覺得台指的波動應該會大於這個幅度時,就應該作多波動率。
以上所述,要再嚴謹一點的說,68%就是正負一個標準差的常態分配下的機率,實際上指數分配並不是常態分配,這是另一個要深入的主題。要簡單明瞭的說,波動率越大就是波動大,比較會有行情,K線也可能比較大根,這樣就好了。
最後再整理一下,之後要繼續紀錄的是波動率在下列幾項的應用
- 作為程式的濾網
- 作為主要交易邏輯的測試 ( 歷史波動率策略設計 )
- 選擇權與隱含波動率 (隱含波動率 (with EXCEL VBA、C#) )
2013年10月20日 星期日
Multicharts建立自訂商品
在MC中建立自訂商品,讓我們可以透過外部資訊來研究對走勢的預測性,常見的外部資訊就是籌碼面資料,因此本篇將以台指期OI(未平倉量)作一個示範,讓讀者學習如何自行建立所需的商品於MC中。
一開始要先準備所需的外部商品資料檔,常見的可能是TXT檔或是CSV檔,因TXT部分可以先匯入EXCEL中並另存成CSV檔(詳細資料可於 匯入或匯出文字檔案 這個說明網頁中了解細部作法),而本篇將以CSV檔來作介紹,製作成MC可以讀取的格式。
首先不論讀者手上擁有的資料為何,至少須將符合如下圖的格式,依照日期、時間(日資料可省略)、開盤價、最高價、最低價、收盤價、交易量(若無可省略)排列,可發現因為OI一天僅有一個數值,故須複製貼上至符合四個價位皆有數值的狀態,存成CSV後關閉。( L 補充: 一般是常用有開高低收的資料,但TICK檔是可以僅有時間和資料兩欄位而已,那同樣也可以只用兩個欄位匯入)
接著開啟QutoeManager,在空白處按右鍵,開始建立自訂的商品代碼與相關設定,選法如下圖所示,最後選擇Manually(手動)。
跳出如下室窗,key入想取的名稱,並注意Data source如果是盤後資料只做研究用,就選擇ASCII,如果是有接受DDE盤中或盤後自動接受資訊則需要選擇DDE的來源,日後將再詳細介紹DDE建立方法。
完成後進入第一個分頁,這部分沒什麼需要動的,只要在描述上面KEY入敘述即可(本例:台指期OI),不KEY也沒差。
點選第二個分頁,使用客製化並設定如下圖所示,此處注意如果是籌碼面資料同常可以模仿設定如下,但若是其他商品價格,則須考量其價格跳動的資訊,這部分資訊通常可參考期貨商提供的商品規格網頁。
第三個分頁, J 通常習慣在交易區間的選項中選擇使用者自訂,主要是可以更符合交易上的需求,在圖型顯是上也比較好上下對齊,方便研究與觀察,因此即便是日資料, J 還是會將其設定成分線的格式,畢竟日資料也是可以修改成分線資料來匯入,為了保留日後使用彈性,都一律建置成方便DATA1使用的時間。
完成後就可以在QM中找到這個自訂商品代碼,如下圖所示,在其上按右鍵,選擇匯入資料。
此時在跳出視窗中,先選擇要匯入的CSV檔,再調整匯入的周期(本例:DAY)、成交價與當地時間,並檢查QM是否有判讀到正確的欄位(日期、開、高、低、收)若無顯示,則讀者可自行調整成下列格式,一樣可以繼續匯入。
按下完成後顯示正在匯入,正常是很快的,如果有過久沒再動,就可能有錯誤,須重新檢查資料是否有誤,另外若不是第一次匯入資料,且已有部分資料與匯入資料重疊時,將跳出室窗詢問是否替代,讀者可自行選擇。
完成資料匯入後,打開MC主程式,開啟DATA1的圖(本例:TXF),此時要將想研究的外部資料放在同一張圖上,需要在圖上按下右鍵,選擇新增商品。
跳出視窗的第一個分頁中,去選擇商品來源(本例:ASCII),找到需要的商品代碼,如下圖。
點選第二個分頁,選擇商品周期(本例僅匯入日層級資料,故若選擇分線或TICK層級將顯示無資料)與顯示時間。
最後就大功告成,如下圖所示,可以開始利用DATA2的資料來進行程式撰寫與研究了。
2013年10月18日 星期五
Multicharts摩台結算日期
摩台結算日是每個月倒數第二個交易日,除了如前篇J所分享的 尾盤出場策略1-建立日期表 所述作一個參考表之外,可以利用一些語法來達成。
以下就邊照著程式碼作注釋了。
var: M(0),DM(0),DW(0),STWSD(0);
if date <> date[1] then STWSD=0;
M=Month(Date); //取得月份
DM=DayOfMonth(Date); //取得幾日
DW=DayOfWeek(Date); //取得星期幾
//如果是大月份的話,結算日期對應星期幾來求出摩台結算日
If M=1 or M=3 or M=5 or M=7 or M=8 or M=10 or M=12 then begin
If DM=30 and DW=4 then STWSD =1;
If DM=30 and DW=3 then STWSD =1;
If DM=30 and DW=2 then STWSD =1;
If DM=30 and DW=1 then STWSD =1;
if DM=29 and DW=4 then STWSD =1;
if DM=28 and DW=5 then STWSD =1;
if DM=28 and DW=4 then STWSD =1;
end;
//如果是小月份的話,結算日期對應星期幾來求出摩台結算日
If M=4 or M=6 or M=9 or M=11 then begin
If DM=29 and DW=4 then STWSD =1;
If DM=29 and DW=3 then STWSD =1;
If DM=29 and DW=2 then STWSD =1;
If DM=29 and DW=1 then STWSD =1;
if DM=28 and DW=4 then STWSD =1;
if DM=27 and DW=5 then STWSD =1;
if DM=27 and DW=4 then STWSD =1;
end;
//如果是2月份的話,結算日期對應星期幾來求出摩台結算日
If M=2 then begin
If DM=27 and DW=4 then STWSD =1;
If DM=27 and DW=3 then STWSD =1;
If DM=27 and DW=2 then STWSD =1;
If DM=27 and DW=1 then STWSD =1;
if DM=26 and DW=4 then STWSD =1;
if DM=25 and DW=5 then STWSD =1;
if DM=25 and DW=4 then STWSD =1;
end;
//台股有時過年過節使得結算日期更改,就把這些日期作記號,往後若有變動也是從這裡加進
if date = 1060124 then STWSD = 1;
if date = 1080926 then STWSD = 1;
if date = 1090120 then STWSD = 1;
if date = 1090526 then STWSD = 1;
if date = 1120224 then STWSD = 1;
//以這個語法作指標,可以畫個線圖來觀察
plot1(STWSD,"STWSD");
如同下圖,就完成囉。
2013年10月15日 星期二
交易心理-因果關係與小數法則
討論到交易中的因果關係與小數法則,就讓J想到一個常被提及的交易現象,讀者可先觀察下圖,發現似乎當出現突兀量(大量)後市場就會開始量縮往反向走,一般將此K棒的型態稱之為出量反轉。
然而透過這樣的觀察就真的可以交易致富? 從 快思慢想 一書中所提及的因果關係來看,我們是型態的尋找者,合理世界的信仰者,因為系統一不善於懷疑,並有自動搜尋因果與建立故事的能力,將看到的現象合理化,除非立刻被否定,否則我們會認為訊息是真的。
在交易中除了K棒型態的因果關係,J也常聽到消息面與走勢的因果關係,例如2013/10/3台指的大幅上漲200點,當天就聽到許多朋友再問,到底發生了甚麼事,為何台灣漲這麼多?而此時新聞的資訊則滿足了人們對一致性與連貫性的需求,因為多數人認為,凡是重大的事件應該會有影響力並帶來後果(大漲或大跌),而當我們看到後果(大漲或大跌)就須要有原因來解釋。
因此J在看待交易中許多的因果關係上,會認為讀者若用眼睛發現了市場的規律,千萬別因此信以為真,有可能只是受到 認知放鬆 、近因效應與 可用性偏見 的影響,應該先想辦法將其現象定義,並透過程式的輔助來驗證長期的績效,是否有顯著性的優勢,才值得相信所發現的規律是真有其規律存在,以避免我們常傾向把不正確的因果思考應用至需要統計推理的情境中。
在消息面對交易的因果關係中,J認為若不是長線投資者,短期的價格變動,交易者快速的反應將是決勝的關鍵,而真實發生了什麼事,就等調整完部位再去研究就好,或對於純價格交易者來說不去研究也沒有關係,因為若相信價格反應一切,那就只要能快速因應市場價格的變化即可,免除心理上受到許多消息面的因果關係而影響原本的價格交易行為。
小數法則,J把它放在本篇一起討論,是因為小量樣本的結果將使我們更容易把事後才證明是隨機的現象,卻在事前看成是有跡可循的規律,導致許多錯誤的因果連結。
引用書中的兩句話,我們來思考樣本數的多寡對結果的影響。
- 大樣本比小樣本精確。
- 小樣本比大樣本容易得出極端結果。
從上述兩句話來看,其實這兩句是同一個意思,大樣本因為比較精確所以要得出極端的結果,在統計機率上是比較低的,而小樣本因為取樣數少,則其結果常受到取樣運氣(Sampling luck)影響,而導出不精確的結果,產生錯誤的因果推論。
在交易者的聚會中,J常聽見以下說法。
- 最近寫了一支當沖策略,是特殊型態的交易,2005年至今交易次數大概80筆,績效還不錯,感覺抓到了市場不為人知的規律。
- 最近主觀交易台指很順,所以之後就會開始放大部位了。
- 最近新上架的策略一直被巴,所以還要再觀察一下,先試單就好。
從第一個例子中可以明顯發現樣本數的多寡影響了判斷,但因為我們對於樣本的大小沒有足夠的敏感度,導致不知交易次數該多少才值得相信? 在感覺上80或200似乎對許多人來說是沒甚麼差異,然而對於嚴謹的程式交易者來說,筆數不多的策略相對穩定性就不夠,過去回檔小,也許只是剛好沒碰到不利的行情,真實上線後可能跟回測天差地別。
第二與第三個例子則可看出,我們常常受到近期小量的交易狀況而在交易信心上有了很大的影響,除非讀者是作高頻交易,否則當樣本數過少,用此結果去判斷是否放大或縮小部位將不是好的作法,並且更不該用近期上線幾筆的交易來推翻先前回測也許超過千筆的長期交易結果。
最後透過以上的小案例與心理學的分析,J期望讀者能多留意自己是否也在不知不覺中受到的因果關係與小數法則的影響,建議透過程式交易的輔助,產生盡量多的交易次數,減少直覺誤把隨機事件判斷為系統化的結果,並試著去相信回測的大數法則,其驗證將優於我們眼睛所看到的市場規律與近期小量的表現,讓取樣運氣與錯誤的因果連結降低,達成長期穩定的交易。
2013年10月9日 星期三
尾盤出場策略1-建立日期表
J注意到一般朋友進行策略撰寫的時候,可能較容易頭重腳輕,即非常努力思考進場邏輯的創意,卻容易遺忘尾盤出場的創意其實也影響甚大,因此本篇將介紹一個最基本的尾盤出場的方法作為系列的第一篇。
此方法基本上說穿了很簡單,就是當沖不要都只在1330前出場,也許常常會圖個方便而沒有使用這樣的做法,又或是使用當沖保證金的人受限於規定都必須於30分前平倉出場,然而J之後會簡單證明市場是殘酷的,越有錢的人或法人可能因為不會用到如此滿的保證金,策略也相對多元,因此多承擔幾分鐘的風險,確實也有其報酬可拿,以下將示範先從建立結算日期表作為FUNCTION,再於訊號中使用。
首先,先選擇新增功能函數的頁面。
再鍵入名稱,本例以END OF MONTH縮寫取名,讀者可自行依喜好設定,其他項目可不用調整。
將結算日期KEY入如下圖所示,每年做一次,但讀者千萬記得若碰到颱風休假調整日期,須要更改之前所預KEY的日期,才不會發生錯誤。
最後加上如下的判斷式,讓本FUNCTION可以在結算當天為1,非結算日為0。
(註: L補充,表列的方法是較完整的方式,另外結算日的判斷也可以寫函數,邏輯是(星期三) && (15號~21號) ,但延後結算日可能需要再稍微修改 )
J將先前撰寫的 通道突破原型進場策略 拿來作為測試的基準,首先使用固定時間於1325後出場的方式,程式碼如下。
績效如下圖,來回手續費共設定為800,自2005年回測至今,獲利55萬回檔約28萬,每筆交易平均賺319元。
現在我們將尾盤出場時間修改如下,在非結算日晚點出場,結算當天維持一樣25分出場。
其他參數與回測時間皆不變,績效如下圖所示。
可以發現獲利明顯增加35萬,MDD幾乎不太影響,平均每筆獲利增加了約200元,效果相當顯著。
這樣簡單的測試期望能提醒讀者,不要認為尾盤的出場幾分鐘沒甚麼差別,也許市場規則確實影響了交易的結果,不要怕麻煩,多花一點時間建立一個結算日期表,也許可以幫助大家多獲得一些報酬,然而本篇的測試相當的基本,實際上EOM還有許多用途,日後J將繼續介紹,讀者也可先行思考。
另外此種建立日期表的方式,也可用在交易海外事件上,透過J之前分享的 經濟數據 一文中,讀者可先尋找對市場有較大影響的事件公布日期,建立於FUNCTION中,即可回測,也許當日行情確實比其他日子更值得交易。
2013年10月5日 星期六
網站介紹_ 程式交易≠HOLY GRAIL _ james選擇權
此篇分享兩個優質網站,對於期貨和選擇權分別都有大量的內容可以參考。
程式交易≠HOLY GRAIL
主題為期貨程式交易,內容包含程式交易測試、策略邏輯介紹、部位規劃、交易經驗等等,內容非常多元且有深度,往往可以從中得到不一樣的思考心得,可應用在自己的交易中。文章數量和更新速度都是國內少見的優質期貨網站。
james 的部落格
主題為選擇權策略的網站,包含各種選擇權策略的模型及建立方式、各個選擇權greeks的應用,除了理論上的介紹外,還有實務上的應用,是很好的選擇權交易參考網站。