欲抓取前五根跨頻率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;
第一種會顯示正確,第二種數值出錯,兩者有何不同?
用迴圈 跨頻率抓取前幾根RSI值問題
- 90
- 最後發表 yingtuandaniel 2025 十二月 26
xfMin_RSI有三個參數,你提供的範例都只有兩個參數。請提供正確的範例。
不好意思原文少打了,確切版如下:
(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;
RSI會使用到前期資料,你要比較這兩者的差異,必須兩者讀取的資料筆數都要相同,且使用的腳本類型也要相同(不同類型腳本預設的讀取資料筆數不同)。
我用在"台股-交易"環境,兩段程式碼緊接前後,主頻率一分鐘,預先執行筆數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
兩者結果卻有顯著差別
yingtuandaniel,
沒有跑迴圈呼叫xfMin_RSI函數5次,每次呼叫都是獨立事件,所以可以得到正確答案,但在迴圈裡面呼叫xfMin_RSI函數,雖然跑了5圈,但實際只呼叫一次函數,只是函數被執行了5次,這造成第二次執行時的變數[i]會被第一次“汙染”。這部份雖然程式執行邏輯沒問題,但確實會造成誤解,產品部門及RD部門將會討論,看看是否可找出解決的方向。
5 評論