實際與回測的交易時間點差很大,以2365為例
實際在09:02就委託了,但回測卻在10:19,差了一個多小時,為何?
與真實更接近,何時會有用tick或秒來進行回測,?


 
        
        實際與回測的交易時間點差很大,以2365為例
實際在09:02就委託了,但回測卻在10:19,差了一個多小時,為何?
與真實更接近,何時會有用tick或秒來進行回測,?


(1)回測與實際差異這麼大,要看程式碼才知道。
(2)用Tick回測,實務上不可行。XQ的運作都是透過雲端運算,用Tick回測要佔用頻寬及運算的時間,根本不可能實現。
程式碼如下
另如果成交後,平倉時間超過設定的時間尚未成交則調整價位,該如何編寫?
//%B指標
input: Lengthb(20, "布林通道天數");
input: BandRange(2, "上下寬度");
input: bM(80,"擴展"),bs(60,"緊縮");
variable: up(0), down(0), mid(0);
up = bollingerband(Close, Lengthb, BandRange);
down = bollingerband(Close, Lengthb, -1 * BandRange);
if up - down = 0 then value31 = 0 else value31 = (close - down) * 100 / (up - down);
//ATR
input: Length(6,"ATR天數"),ATRs(2.25,"ATR除數");
value1 = Average(TrueRange, Length);
value2=open-low;
value3=high-open;
value4=high-low;
value5=value2/(value4+0.0001);
value6=1-value5;
value7=round(open-open*0.00015-(value1*value5)/ATRs,2);
condition1=close <= value7;//close
value8=round(open+open*0.00015+(value1*value6)/ATRs,2);
condition2=close >= value8;//close
input:TM(090200,"進場時間"),P1(10,"操作價位L"),P2(500,"超作價位H"),
X1(1,">買進有漲%停利"),X2(25,"<買進有跌%停損"),X3(1,"<賣出有跌%停利"),X4(25,">賣出有漲%停損");
condition90 = close > p1 and close <P2 and close < close[1]*1.05; //進場點
if position=0 and filled=0 and condition90
then begin
if condition1 and (value31 > value31[1] or value7 > value7[1] )
and value7*1.0045 < getField("High","D")
and currentTime > TM and currentTime <=110000
then setposition(minList(position+1,1),GetField("收盤價","Tick"),label:="買1");//有庫存時,不進場加買,維持一張
if condition2 and GetField("收盤價","Tick") < GetField("收盤價","Tick")[1]
then setposition(maxlist(position-1,0),GetField("收盤價","Tick"),label:="賣1");//希望沒有庫存時,不進場放空,亦即減碼至空手
end;
if position<>0 and filled<>0 then begin
value95=100 * (Close - FilledAvgPrice) / FilledAvgPrice; //停利停損%
if filled=1 and condition2 and GetField("收盤價","Tick") < GetField("收盤價","Tick")[1]
then setposition(position-1,value8,label:="賣1-1");
if filled=1 then setposition(0,filledAvgPrice*(1+(x1/100)),label:="買進續漲%停利");
if filled=1 and value95 <=-x2 then setposition(0,close,label:="<買進回跌%停損");
//if filled=-1 and condition91 then setposition(position+1,close,label:="買1-1");
if filled=-1 and value95 <=-X3 then setposition(0,close,label:="賣出續跌%停利");
if filled=-1 and value95 >=x4 then setposition(0,close,label:="賣出回漲%停損");
end;
困擾中..........求救前輩大神~
3 評論