原程式碼
實際交易與回測仍差異很大,為何? - XQ全球贏家官方論壇
以下是GPT強化避免連續委託所修改的程式碼,是否正確?
// %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 = GetField("收盤價", "Tick") <= value7; // close  
value8 = round(open + open * 0.00015 + (value1 * value6) / ATRs, 2);  
condition2 = GetField("收盤價", "Tick") >= value8; // close  
// 整合條件 
input: TM(090200, "進場時間"), P1(10, "操作價位L"), P2(500, "操作價位H"), X1(1, ">買進有漲%停利"); 
condition7 = GetSymbolInfo("處置股") = false; 
condition90 = close > P1 and close < P2 and close < close[1] * 1.05 and condition7; 
// 防止重複操作的旗標 
var: intrabarpersist SentTime(0), intrabarpersist hasOrdered(false); 
// 買賣操作 
if position = 0 and filled = 0 and condition90 and currentTime > TM and currentTime <= 110000 then begin  
    if condition1 and (trueAll(value31 > value31[1], 2) or value7 > value7[1])  
       and value7 * 1.0045 < GetField("High", "D") then begin 
        if not hasOrdered then begin 
            setposition(minList(position + 1, 1), GetField("收盤價", "Tick"), label:="買1-31"); 
            hasOrdered = true; 
        end; 
    end; 
    if condition1 and (trueAll(value31 > value31[1], 2) or value7 > value7[1])  
       and value7 * 1.0045 < GetField("High", "D") then begin 
        if not hasOrdered then begin 
            setposition(minList(position + 1, 1), GetField("收盤價", "Tick"), label:="買1-7"); 
            hasOrdered = true; 
        end; 
    end; 
end; 
if position <> 0 and filled <> 0 then begin  
    value95 = 100 * (Close - FilledAvgPrice) / FilledAvgPrice; // 停利停損%  
    if filled = 1 then begin 
        setposition(0, filledAvgPrice * (1 + (X1 / 100)), label:="買進續漲%停利"); 
        SentTime = GetField("時間", "Tick"); 
        hasOrdered = false; 
    end; 
end; 
// 排隊時間和改價時間設置 
input: CT1(10, "排隊時間秒"), CT2(60, "改價時間分");     
if position = 0 and filled = 1 and GetField("收盤價", "Tick") >= filledAvgPrice * (1 + (X1 / 100)) 
   and GetField("時間", "Tick") >= timeadd(SentTime, "S", CT1) 
   and addSpread(filledAvgPrice * (1 + (X1 / 100)), 0) >= filledAvgPrice * (1 + (0.435 / 100)) then begin 
    setposition(0, addSpread(filledAvgPrice * (1 + (X1 / 100)), 0), label:="排隊則調利"); 
end; 
if position = 0 and filled = 1 and GetField("時間", "Tick") >= timeadd(SentTime, "M", CT2) then begin 
    setposition(0, filledAvgPrice * (1 + (0.45 / 100)), label:="未達委託價調利"); 
end; 
 
 
             
        
         
         
         
     
     分類
    分類
