原程式碼
實際交易與回測仍差異很大,為何? - 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;