今天花了點時間想一下要怎麼樣在一隻程式裡面…條件相同的情況下一邊作多一邊作空。這邊就簡單介紹一下。
首先這是網路上抓到的介紹:
配對交易(Pairs Trading)又稱為價差交易或是統計套利,它提供投資人在二種相關性資產間的交易契機,而所依循的價格數理邏輯很簡單,只要二種資產(或證券)在價格上具備高度相關,假設他們的股價數學關連性會持續存在,縱使短期這個數學關係中斷,經過一段時間後必將恢復,而中斷的時間就存在套利交易的空間了!
接著就是在 TS 上要怎麼做到這個?
首先就是開兩組 K 線圖出來:
注意一下 Symbol name 的部份…可以看到左邊的部份我在上面的 K 線圖放上了 FITX 這個 symbol 而在第二個 symbol 的部份放上了 TTXN 這個 symbol。(很抱歉…其實兩個都是台指期的資料)
另外在右邊的部份上面的 K 線圖則是 TTXN,下方則是 FITX。
也就是在你要執行 Pairs Trading 的兩個商品…分別放在兩個 Charts windows 的第一 symbol。
這是因為 TradeStation 在買賣訊號只能在第一個 symbol 上面產生訊號的關係。
接著就是程式的寫法了:
if getsymbolname of data1 = "FITX" then begin
if average(close of data1, 10) cross under average(close of data1, 20) and close of data2 > average(close of data2, 30) then
sell next bar at market;
if average(close of data1, 10) cross over average(close of data1, 20) and close of data2 < average(close of data2, 30) then
buy next bar at market;
end;
if getsymbolname of data1 = "TTXN" then begin
if average(close of data2, 10) cross under average(close of data2, 20) and close of data1 > average(close of data1, 30) then
buy next bar at market;
if average(close of data2, 10) cross over average(close of data2, 20) and close of data1 < average(close of data1, 30) then
sell next bar at market;
end;
同樣只用上了簡單的均線來作進出…比較重要的是…整個程式可以說利用 getsymbolname 函式分成兩大區…這兩個區塊內的條件必需是一樣的,只是在買賣的部份作了一個交換。一邊買進…另一邊就是賣出。
把這個程式放進 K 線如下(把圖放靠近一點方便對照):
可以看到兩個商品的買賣訊號是相對的…也就完成了 Pairs Trading 了。
不過這樣的寫法其實有一個比較不方便的地方…那就是兩個商品的週期最好是一樣的。如果兩個商品使用的週期不同…那會因為程式判斷的週期不一樣產生錯誤。
這樣的寫法主要是方便自動下單…如果是要人工操作的話…其實應該用指標會更簡單一點,以上面的程式為例,我寫了這樣的一個指標:
vars:pair(0);
if average(close of data1, 10) cross under average(close of data1, 20) and close of data2 > average(close of data2, 30) then
pair = -1;
if average(close of data1, 10) cross over average(close of data1, 20) and close of data2 < average(close of data2, 30) then
pair = 1;
plot1(pair, "pair");
這樣的指標顯示出來的結果如下:
也就是指標轉 1 的時候買進 FITX 賣出 TTXN,指標轉 -1 的時候賣出 FITX 買進 TTXN。
你好,我叫Jack,
回覆刪除想請問一下,如果用Pair Trade進場兩個商品,要怎麼用程式碼設定"整體的停利點"(而不是單邊的停利)並且同時出掉兩邊。
因為我使用setprofittarget,好像只能對單一商品設停利。
如果願意的話,可以跟我分享一下嗎?
我的email:smallli777@gmail.com
pair trade 的話…那大概有兩種作法… 一種是開二個 chart ,並且在這二個 chart 都放上同一個商品的 data2 資料…策略主要開發就是用這個 data2 資料,然後分別作買、賣單到 data1 的商品去。
刪除第二種呢…就是透過外部 dll 來做…
因為二個 chart 的資料是沒辦法互傳的…所以你要做到的「整體停利點」其實是不容易達到的~
你好,我叫Jack,還有另一個關於Tradestation的問題是,
回覆刪除Tradestation是每根K線完成後才計算訊號,到下一根K線送出,可以改成tick來計算讓速度快一點嗎 ?
你需要的應該是 This bar 的進出了,這應該要去用 TS8 才會有這個功能,或是用 MC 並在策略裡打開 IOG,不過我對 This bar 和 IOG 都沒什麼研究~
刪除因為我總覺得還是很容易有問題~
請問DK大,你說或是用 MC 並在策略裡打開 IOG
回覆刪除請問要如何打開或關閉呢?
還是策略裡出現哪些指令就代表有用到 IOG?
小弟今天用MC做細部回測,看到數據後整個傻眼...
我找到了,原來是在設定訊號..設定..k棒內產生委託
回覆刪除原始設定好像是關閉IOG 的
我剛好和樓上的Jack相反,我希望每根K線完成後才計算訊號
不要改成tick來計算,因為策略裡進單條件會和前幾根K棒做比較,買單也都用buy next bar at XXX stop;只是昨天爬文才知道在策略中若出現SET STOP等等就要開細部回測,原來MC回測有這麼多眉角,或說是陷阱,一直以來都不知道,慘~~
DK大可以指導一下何謂SET STOP等需要開細部回測的指令或訊號嗎?小弟真是傻了,被粉擦很厚的回測報告騙了都不知道 ><"
set 類的指令都不需要開所謂的細部回測~執行結果會是正確的。
回覆刪除粉擦很厚倒是不至於啦…如果你沒開 IOG 的,而且進出都是用 next bar,那回測報告就會是正確的~