實際與回測的交易時間點差很大

  •   189 
  • 最後發表   XQYi  2024 五月 20
XQYi 發文於   2024/05/16

實際與回測的交易時間點差很大,以2365為例

實際在09:02就委託了,但回測卻在10:19,差了一個多小時,為何?

與真實更接近,何時會有用tick或秒來進行回測,?

排序方式: 標準 | 最新
虎科大許教授 發文於   2024/05/16

(1)回測與實際差異這麼大,要看程式碼才知道。

(2)用Tick回測,實務上不可行。XQ的運作都是透過雲端運算,用Tick回測要佔用頻寬及運算的時間,根本不可能實現。

XQYi 發文於   2024/05/17

程式碼如下

另如果成交後,平倉時間超過設定的時間尚未成交則調整價位,該如何編寫?

 

//%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;

 

XQYi 發文於   2024/05/20

困擾中..........求救前輩大神~

發表回覆
Close