2013年10月1日 星期二

期貨指數與未平倉量關係(續篇)

EasyTrader ArtNo 009 
上篇提到了Tscore的公式與價格運動的相關性,本範例程式以此為基礎針對 Tscore指標觀察的70,50,30 的數字作策略模型開發與歷史回測



基本設定 -
日K 測試商品:台指期
交易模型:波段留倉
回測時間:2013/09/30 往前 3000 日
回測成本設定:$1200/來回
回測軟體:TS2000i
出場規則- (1) 結算日出場 (2) 停損點設定1%



看起來從2007年下半年開始表現不錯!


成交口數的影響呢 ?

基本設定 -60分K
測試商品:台指期
交易模型:波段留倉
回測時間:2013/09/30 往前 3000 日
回測成本設定:$1200/來回
回測軟體:TS2000i
出場規則- (1) 結算日出場 (2) 停損點設定2%



成交口數也是可以作為多空參考喔 !
而每日受大眾投資人人關注的外資未平倉量的關連呢 ?



也有相當的影響力, 那要怎麼放進策略裡使用 ??

程式碼如下
inputs: Type(1) ,TscoreHigh(70),TscoreMid(50),TscoreLow(30) ,TBar(10),TradeStopLoss(0.02),TradeProfit(0.04);

Vars: Zscore(0),Tscore(0),MP(0),ISBalanceDay(false) ;
MP = MarketPosition ;

{結算日判定}
if DAYofMonth(Date) > 14 and DAYofMonth(Date) < 22 and DAYofWeek(Date)= 3 then isBalanceDay = True else isBalanceDay =False ;

{ Value1 可以選用 收盤價 , 成交量 , 其他商品(未平倉量) , 甚至 RSI , KD , 都可以測試}

Value1 = Close {Ticks} {Close of Data2} { RSI , SlowK ...} ;
if StdDev(Value1,TBar) <> 0 then Zscore = (Value1 - Average(Value1,TBar))/StdDev(Value1,TBar);
TScore = 10*Zscore + 50 ;

{ 設立不同的條件 ,讀者有興趣也可以將 Cross over 改為 >= , Cross under 改為 < 交易次數可以增加一些 }

{ 向上下關卡突破}
Condition1 = Tscore Cross over TscoreHigh ;
Condition2 = Tscore Cross under TscoreLow ;

{以中關值作多空基準}
Condition3 = Tscore Cross over TscoreMid ;
Condition4 = Tscore Cross under TscoreMid ;

{反向的逆勢思考}
Condition5 = Tscore Cross under TscoreHigh ;
Condition6 = Tscore Cross over TscoreLow ;


{ 為了回測方便 用 Type 代表不同進場方式}

if Type = 1 then Begin
    if Condition1 then Buy next bar at Market ;
    if Condition2 then Sell next bar at Market ;
end;

if Type = 2 then Begin
   if Condition1 then Buy next bar Highest(High,3) stop;
   if Condition2 then Sell next bar at Lowest(Low,3) stop ;
end;

if Type = 3 then Begin
   if Condition3 then Buy next bar at Market ;
   if Condition4 then Sell next bar at Market ;
end;

if Type = 4 then Begin
    if Condition3 then Buy next bar Highest(High,3) stop;
    if Condition4 then Sell next bar at Lowest(Low,3) stop ;
end;

if Type = 5 then Begin
    if Condition6 then Buy next bar at Market ;
    if Condition5 then Sell next bar at Market ;
end;

if Type = 6 then Begin
   if Condition6 then Buy next bar Highest(High,3) stop;
   if Condition5 then Sell next bar at Lowest(Low,3) stop ;
end;

{ 固定百分比停損出場 }

if MP > 0 and Low < EntryPrice*(1-TradeStopLoss) then ExitLong at EntryPrice*(1-TradeStopLoss) stop ;

if MP < 0 and High > EntryPrice*(1+TradeStopLoss) then ExitShort at EntryPrice*(1+TradeStopLoss) stop ;

{ 結算日出場 }

if IsBalanceDay then SetExitonClose ;

Zscore /Tscore 是由統計標準差的變異轉化來的 ( 一般技術指標所提到的包寧傑帶 或是 天羅地網指標皆是標準差演化而成),讀者可依此範例程式作延伸測試,相信能開發更多的交易策略模型

保留字與函數說明

1. DayofMonth(date) 傳回當月第幾天
2. DayofWeek(date) 傳回當週第幾天

因為台指結算日為每月第三個星期三 , 日期會發生在 15 ~ 21這幾天 , 所以用上述方式來作計算判斷

3. Average(Price , Len) 傳回指定K 棒數量的數值平均值
Price 可為 Open/High/Low/Close 也可以是其他可運算的序列數據

4.StdDev(Price , Len) 傳回指定K 棒數量的數值標準差

5.Condition1 ~ Condition99 系統不需宣告即可使用的條件變數(接收 true/false)的傳回值 , 另外 Value1 ~ Value99系統不需宣告即可使用的一般變數

6.Highest(Price,Len) 傳回指定區段的最大值

Lowest(Price,Len) 傳回指定區段的最大值

Price 可為 Open/High/Low/Close 也可以是其他可運算的序列數據

延伸使用

MaxList = 傳回數值列中最大值

MaxList(45, 72, 86, 125, 47) 傳回 125.

MaxList(18, 67, 98, 24, 65, 19) 傳回 98.

MinList = 傳回數值列中最小值

MinList(45, 72, 86, 125, 47) 傳回 45.

MinList(18, 67, 98, 24, 65, 19) 傳回 18.

NthMaxList = 傳回數值列中第N個最大值

NthMaxList(N, num1, num2, num3, num4, num5)

NthMaxList(3, 45, 72, 86, 125, 47) 傳回 72.


NthMinList = 傳回數值列中第N個最小值

NthMinList(N, num1, num2, num3, num4, num5)

NthMinList(4, 18, 67, 98, 24, 65, 19) 傳回24.

7. EntryPrice 傳回目前部位進場價格

EntryPrice(0) 目前的 // EntryPrice(1) 前一個// EntryPrice(2) 前二個

延伸使用

ExitPrice 傳回指定部位出場價格

ExitPrice(1) 前一個// ExitPrice(2) 前二個

8. SetExitonClose 日內交易的收盤出場

沒有留言:

張貼留言