例如我想計算從 K index 100 到 K index 105 5 之間的收盤最小值
但以下程式好像會有錯誤
lowest(C[100],5)
例如我想計算從 K index 100 到 K index 105 5 之間的收盤最小值
但以下程式好像會有錯誤
lowest(C[100],5)
Hello JasonK,
小編上面解釋的可能不夠清楚,highest / loweset 函數是用節省效能的方式撰寫的函數,所以在 "腳本運作期間,裡面的長度 以及 序列的位置 都不能改變"。
並不是在同一個迴圈內 / 同一次洗價運算沒有變化就可以,而是 "從腳本運算開始到結束,都不能改變"。
除了上述的狀況外,跨頻率也會導致函數計算錯誤。
在遇到這些情況時,請使用 simplehighest / simplelowest。
小編你沒看懂我的意思
value10 是包在 for 迴圈會變沒錯
但我問的是同一次迴圈裡為什麼 lowest 會錯?
比如某次迴圈 value10 = 403
value10 = GetBarOffset(GetField("除權息日期")[i]); // 除權息當日 K Index if value10 <> 0 then begin Print("# 5 日 C =", C[value10+1]," ",C[value10+2]," ",C[value10+3]," ",C[value10+4]," ",C[value10+5]," "); Print("# 5 日 最低 C =", lowest(C[value10+1],5)); Print("# K Idx = ", value10); end;
輸出如下,這次迴圈中的 value10 是固定的,但 5 日 最低 C (lowest )是錯的,這樣你知道我的問題嗎?
# 5 日 C = 807.000000 868.000000 840.000000 831.000000 873.000000 // 除權息前 5 日 Close => 正確
# 5 日 最低 C = 785.000000 // 除權息前 5 日最低 Close => 錯誤,預期應該要 807.000000
# K Idx = 403.000000 // 除權息當日 K index = value10 => 正確 (此次迴圈是固定的)
Hello JasonK,
您的value10是被包在for迴圈內,隨著迴圈運算i的增加 value10 的數值也會因此變動。
Hi 小編
為什麼 value10 會變動?
我使用 lowest 的時候 value10 應該是固定的吧? 為什麼會變動?
value10 = GetBarOffset(GetField("除權息日期")[i]); if value10 <> 0 then begin Print("# 5 日 C =", C[value10+1]," ",C[value10+2]," ",C[value10+3]," ",C[value10+4]," ",C[value10+5]," "); Print("# 5 日 最低 C =", lowest(C[value10+1],5)); Print("# K Idx = ", value10); end;
Hello JasonK,
highest / lowest 是用節省效能的方式撰寫的函數,郵件中附上的腳本,其中的 lowest(C[value10+1],5) 會因為value10的變動導致錯誤。
在使用這兩個函數時,前面的數列和後面的期數是不能夠變化的。
您可以將其改成 simplelowest,這樣就能夠避免因為參數變動而導致的運算錯誤。
你好,我已寄信到 XQservice@xq.com.tw
麻煩請確認是否有收到
謝謝
Hello JasonK,
小編不知道您策略如何設定、腳本如何撰寫的,無法確定問題原因。
不過 lowest(C[100],5) 會是取得往前100根Bar到104根Bar間的最低收盤價。
如果資料引用筆數和資料讀取筆數不足的話,或是商品資料長度不夠的話,可能會因此造成錯誤。
可以先試著 setbackbar(105) 確保可以取得足夠長度的資料。
若還是有疑問的話,麻煩提供更詳細的描述讓小編確認 (腳本、策略設定等相關資訊)。
7 評論