回測資料抓取有誤

  •   44 
  • 最後發表   jianglin  5 天前
jianglin 發文於   2026/05/18

input: 

    SignalSymbol("FITXN*1.TF", "訊號來源商品(大台全)"), 

    FastLen(8, "MACD快線"), 

    SlowLen(21, "MACD慢線"), 

    MacdLen(5, "MACD柱狀點"); 

 

variable: sOpen(0), sClose(0), sHigh(0), sLow(0), sVolume(0); 

variable: difValue(0), macdValue(0), osiValue(0); 

var: negCount(0); 

var: posCount(0); 

variable: cond1(false), cond2(false); 

variable: condS1(false), condS2(false); 

variable: LongSignal(false), ShortSignal(false); 

 

sOpen = GetSymbolField(SignalSymbol, "Open"); 

sClose = GetSymbolField(SignalSymbol, "Close"); 

sHigh = GetSymbolField(SignalSymbol, "High"); 

sLow = GetSymbolField(SignalSymbol, "Low"); 

sVolume = GetSymbolField(SignalSymbol, "Volume"); 

difValue = EMA(sClose, FastLen) - EMA(sClose, SlowLen); 

macdValue = EMA(difValue, MacdLen); 

osiValue = difValue - macdValue; 

if osiValue < 0 then begin 

    negCount += 1; posCount = 0; 

end else if osiValue > 0 then begin 

    posCount += 1; negCount = 0; 

end else begin 

    negCount = 0; posCount = 0; 

end; 

cond1 =  

cond2 = 

 

LongSignal = (cond1 or cond2); 

condS1 =

condS2 =

ShortSignal = (condS1 or condS2 ); 

if LongSignal then begin

    SetPosition(1, Market);

end 

else if ShortSignal then begin

    SetPosition(-1, Market);

end;

回測抓取的OSC值異常,與軟體上的大有出入 

5分K,2026/5/16 02:20  OSC應該為-7.23

回測資料卻顯示為-9.7

 

不曉得是哪邊出了問題??

附加文件

排序方式: 標準 | 最新
jianglin 發文於   2026/05/18

打錯了 是2026/5/16 02:15 ,簡單說就是所有的資料都不一樣

 

jianglin 發文於   2026/05/18

補充說明,有勾非逐筆,預先執行1000筆資料

虎科大許教授 發文於   2026/05/18

主頻率是5分鐘?

  • 按讚來自於
  • t30116
jianglin 發文於   2026/05/18

對哦 教授

虎科大許教授 發文於   2026/05/19

系統的函數EMA會用所有資料計算。計算OSC,建議使用系統提供的MACD函數。

input: 
    SignalSymbol("FITXN*1.TF", "訊號來源商品(大台全)"), 
    FastLen(8, "MACD快線"), 
    SlowLen(21, "MACD慢線"),
    MacdLen(5, "MACD柱狀點");
variable: sOpen(0), sClose(0), sHigh(0), sLow(0), sVolume(0); 
variable: difValue(0), macdValue(0), osiValue(0); 
var: negCount(0); 
var: posCount(0); 
variable: cond1(false), cond2(false); 
variable: condS1(false), condS2(false); 
variable: LongSignal(false), ShortSignal(false); 
var: WClose(0); 

sOpen = GetSymbolField(SignalSymbol, "Open"); 
sClose = GetSymbolField(SignalSymbol, "Close"); 
sHigh = GetSymbolField(SignalSymbol, "High"); 
sLow = GetSymbolField(SignalSymbol, "Low"); 
sVolume = GetSymbolField(SignalSymbol, "Volume"); 

WClose=(sHigh+sLow+2*sClose)/4;
macd(WClose,FastLen,SlowLen,MacdLen, difValue, macdValue, osiValue);

if osiValue < 0 then begin 
    negCount += 1; posCount = 0; 
end else if osiValue > 0 then begin 
    posCount += 1; negCount = 0; 
end else begin 
    negCount = 0; posCount = 0; 
end; 
cond1 =  
cond2 = 
LongSignal = (cond1 or cond2); 
condS1 =
condS2 =
ShortSignal = (condS1 or condS2 ); 

if LongSignal then begin
    SetPosition(1, Market);
end 
else if ShortSignal then begin
    SetPosition(-1, Market);
end;
print(datetime, osiValue);

  • 按讚來自於
  • t30116
jianglin 發文於   2026/05/19

感謝教授,成功解決問題了

發表回覆
Close