2014年3月24日 星期一

線性回歸在交易策略的應用 [程式碼]

EasyTrader ArtNo 125
線性回歸(linear regression)
什麼是線性回歸模型
所謂線性回歸模型就是指因變數和自變數之間的關係是直線型的。
回歸分析預測法中最簡單和最常用的是線性回歸預測法。

 回歸分析是對客觀事物數量依存關係的分析是數理統計中的一個常用的方法.是處理多個變數之間相互關係的一種數學方法.

 在現實世界中,我們常與各種變數打交道,在解決實際問題過程中,我們常常會遇到多個變數同處於一個過程之中,它們之間互相聯繫、互相制約.

常見的關係有兩種:
一類為“確定的關係”即變數間有確定性關係,其關係可用函數表達式表示.例如:路程S,時間T,與速度V之間有關係式:S = VT
另外還有一些變數.他們之間也有一定的關係,然而這種關係並不完全確定,不能用函數的形式來表達,在這種關係中至少有一個變數是隨機的.
例如:人的身高與體重有一定的關係,一般來講身高高的人體重相對大一些.但是它們之間不能用一個確定的表達式表示出來.這次變數(或至少其中有一個是隨機變數)之間的關係.我們稱之為相關關係.

又如環境因素與農作物的產量也有相關關係,因為在相同環境條件下 農作物的產量也有區別,這也就是說農作物的產量是一個隨機變數.回歸分析就是研究相關關係的一種數學方法,是尋找不完全確定的變數間的數學關係式併進行統計推斷的一種方法.它能幫助我們從一個變數取得的值去估計另一個變數的值.在這種關係中最簡單的是線性回歸.

一元線性回歸分析預測法模型分析
一元線性回歸分析預測法,是根據自變數x和因變數Y的相關關係,建立X與Y的線性回歸方程進行預測的方法。由於市場現象一般是受多種因素的影響,而並不是僅僅受一個因素的影響。所以應用一元線性回歸分析預測法,必須對影響市場現象的多種因素做全面分析。只有當諸多的影響因素中,確實存在一個對因變數影響作用明顯高於其他因素的變數,才能將它作為自變數,應用一元相關回歸分析市場預測法進行預測。

在 TradeStation/Multicharts 也有提供一些線性迴歸的相關函數(以 LinearReg 開頭),本篇也利用其中一個函數 LinearRegValue作為核心元素的計算


測試程式碼( 台指期 60 min K 留倉策略 2004/1~2014/2 交易成本 1200 )
inputs: EntryType(1),ExitType(1),TradeProfit(0.05),TradeStopLoss(0.03),NBarL(2),NBarS(2);
input: BarNo(3),HighBand(90),LowBand(10);
inputs:LRlength(20),EMAlength(4),TargetBar(0);

vars:TriggerLine(0),SignalLine(0),TwoLineGap(0) ;
vars: IsBalanceDay(False),MP(0),PF(0),PL(0);

MP = MarketPosition ;

if DAYofMonth(Date) > 14 and DAYofMonth(Date) < 22 and DAYofWeek(Date)= 3 then isBalanceDay = True else isBalanceDay =False ;

PF = AvgPrice*TradeProfit ;
PL = AvgPrice*TradeStopLoss ;

TriggerLine = LinearRegvalue(TypicalPrice,LRlength,TargetBar) ;
SignalLine = Xaverage( TriggerLine , EMAlength ) ;
TwoLineGap = TriggerLine - SignalLine ;

if EntryType = 1 then Begin
   if TwoLineGap > HighBand then Buy next bar at Highest(High,BarNo) stop ;
   if TwoLineGap < LowBand then Sell next bar at Lowest(Low,BarNo) stop ;
end;

if ExitType = 1 then SetStopLoss(PL * BigPointValue) ;

if ExitType = 2 then Begin
   SetStopLoss(PL * BigPointValue) ;
   SetProfitTarget(PF * BigPointValue) ;
end;

if ExitType = 3 then Begin
   if MP > 0 and BarsSinceEntry = NBarL then ExitLong next bar at Market ;
   if MP < 0 and BarsSinceEntry = NBarS then ExitShort next bar at Market ;
end;

if ExitType = 4 then Begin
   SetStopLoss(PL * BigPointValue) ;
   SetProfitTarget(PF * BigPointValue) ;
   if MP > 0 and BarsSinceEntry = NBarL then ExitLong next bar at Market ;
   if MP < 0 and BarsSinceEntry = NBarS then ExitShort next bar at Market ;
end;

if IsBalanceDay then setExitonClose ;


MagicQS048

沒有留言:

張貼留言