lowest 函數怎麼指定區間?

  •   104 
  • 最後發表   JasonK  2024 二月 27
JasonK 發文於   2024/02/21

例如我想計算從 K index 100 到  K index 105 5 之間的收盤最小值

但以下程式好像會有錯誤

lowest(C[100],5)

排序方式: 標準 | 最新
XS小編 發文於   2024/02/27

Hello JasonK,

 

小編上面解釋的可能不夠清楚,highest / loweset 函數是用節省效能的方式撰寫的函數,所以在 "腳本運作期間,裡面的長度 以及 序列的位置 都不能改變"

並不是在同一個迴圈內 / 同一次洗價運算沒有變化就可以,而是 "從腳本運算開始到結束,都不能改變"。

除了上述的狀況外,跨頻率也會導致函數計算錯誤。

在遇到這些情況時,請使用 simplehighest / simplelowest。

 

JasonK 發文於   2024/02/26

小編你沒看懂我的意思

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 => 正確 (此次迴圈是固定的)

 

 

 

XS小編 發文於   2024/02/26

Hello JasonK,

 

您的value10是被包在for迴圈內,隨著迴圈運算i的增加 value10 的數值也會因此變動。

JasonK 發文於   2024/02/22

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;

XS小編 發文於   2024/02/22

Hello JasonK,

 

highest / lowest 是用節省效能的方式撰寫的函數,郵件中附上的腳本,其中的 lowest(C[value10+1],5) 會因為value10的變動導致錯誤。

在使用這兩個函數時,前面的數列和後面的期數是不能夠變化的。

您可以將其改成 simplelowest,這樣就能夠避免因為參數變動而導致的運算錯誤。

JasonK 發文於   2024/02/22

你好,我已寄信到  XQservice@xq.com.tw
麻煩請確認是否有收到

謝謝

XS小編 發文於   2024/02/21

 Hello JasonK,

 

小編不知道您策略如何設定、腳本如何撰寫的,無法確定問題原因。

不過 lowest(C[100],5) 會是取得往前100根Bar到104根Bar間的最低收盤價。

如果資料引用筆數和資料讀取筆數不足的話,或是商品資料長度不夠的話,可能會因此造成錯誤。

可以先試著 setbackbar(105) 確保可以取得足夠長度的資料。

 

若還是有疑問的話,麻煩提供更詳細的描述讓小編確認 (腳本、策略設定等相關資訊)。

發表回覆
Close