用迴圈 跨頻率抓取前幾根RSI值問題

  •   90 
  • 最後發表   yingtuandaniel  2025 十二月 26
yingtuandaniel 發文於   2025/12/18

欲抓取前五根跨頻率5分K快RSI值,
使用以下兩種方式, 結果不一樣,請問是哪裡的問題?
(1)
print(
xfMin_RSI("5",GetField("Close","5")[1],
xfMin_RSI("5",GetField("Close","5")[2],
xfMin_RSI("5",GetField("Close","5")[3],
xfMin_RSI("5",GetField("Close","5")[4],
xfMin_RSI("5",GetField("Close","5")[5]);

(2)
for i=1 to 5 begin
print( xfMin_RSI("5",GetField("Close","5")[i]);
end;

第一種會顯示正確,第二種數值出錯,兩者有何不同?

排序方式: 標準 | 最新
虎科大許教授 發文於   2025/12/18

xfMin_RSI有三個參數,你提供的範例都只有兩個參數。請提供正確的範例。

yingtuandaniel 發文於   2025/12/18

不好意思原文少打了,確切版如下:

(1)
print(
xfMin_RSI("5",GetField("Close","5")[1],6),
xfMin_RSI("5",GetField("Close","5")[2],6),
xfMin_RSI("5",GetField("Close","5")[3],6),
xfMin_RSI("5",GetField("Close","5")[4],6),
xfMin_RSI("5",GetField("Close","5")[5],6));

(2)
for i=1 to 5 begin
print( xfMin_RSI("5",GetField("Close","5")[i],6));
end;

虎科大許教授 發文於   2025/12/18

RSI會使用到前期資料,你要比較這兩者的差異,必須兩者讀取的資料筆數都要相同,且使用的腳本類型也要相同(不同類型腳本預設的讀取資料筆數不同)。

yingtuandaniel 發文於   2025/12/18

我用在"台股-交易"環境,兩段程式碼緊接前後,主頻率一分鐘,預先執行筆數500,
以今天 12/18 , 6770力積電、時間為中午13點00分 當下為例子:


if time=130000 then begin

print(

xfMin_RSI("5",GetField("Close","5")[1],6),

xfMin_RSI("5",GetField("Close","5")[2],6),

xfMin_RSI("5",GetField("Close","5")[3],6),

xfMin_RSI("5",GetField("Close","5")[4],6),

xfMin_RSI("5",GetField("Close","5")[5],6));

 

For i = 1 to 5 begin

print(xfMin_RSI("5",GetField("Close","5")[i],6));

end;

 

end;


跑出結果:

49.954195 60.799374 83.444340 79.124886 69.021986 
35.657262 33.283571 49.920700 53.254460 41.589330

兩者結果卻有顯著差別





虎科大許教授 發文於   2025/12/26

yingtuandaniel,

沒有跑迴圈呼叫xfMin_RSI函數5次,每次呼叫都是獨立事件,所以可以得到正確答案,但在迴圈裡面呼叫xfMin_RSI函數,雖然跑了5圈,但實際只呼叫一次函數,只是函數被執行了5次,這造成第二次執行時的變數[i]會被第一次“汙染”。這部份雖然程式執行邏輯沒問題,但確實會造成誤解,產品部門及RD部門將會討論,看看是否可找出解決的方向。

發表回覆
Close