2013年10月11日 星期五

●期貨指數與未平倉量關係Part2 --by EasyTrader

EasyTrader - ArtNo 009
     在上一篇期貨指數與未平倉量關係Part1有提到了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 日內交易的收盤出場

0 留言:

張貼留言

如果有私人問題想請教,請透過網站右方『與站長聯絡』之表單,謝謝!

----------------------------------------------------------------------------------------------------
網站聲明(Disclaimer)
本教學網站內所提供之程式碼(包括函數、指標、訊號)屬開放程式碼,用意在於讓使用者學習程式語法之撰寫,使用者可以任意修改語法內容並調整參數。本網站所有之內容(包括文章、影片、歷史紀錄、程式碼、教材)限用於個人學習使用,請勿轉寄、濫用,嚴禁私自串接帳戶交易。
-------------------------------------------------------------------------------------------------