為什麼用 Array 存 GetSymbolField 的值之後畫圖會有問題?

  •   142 
  • 最後發表   JasonK  2024 六月 04
JasonK 發文於   2024/05/28

 

為什麼用 Array 存 GetSymbolField 的值之後畫圖會有問題?

以下 2 種寫法第 1 種可以,第 2 種不行

 

第 1 種寫法,顯示沒問題

value1 = GetSymbolField("TSE.TW", "收盤價")[0];
value2 = GetSymbolField("TSE.TW", "收盤價")[1];
value3 = Round( (value1-value2)/value2*100, 0);
plot1(value3, "value3");
    

 

第 2 種寫法,會出現錯誤 :停止計算,請檢查腳本算式是否有分母為 0

Array: ArrTypeClose[10](0);
ArrTypeClose[0] = GetSymbolField("TSE.TW", "收盤價");

value1 = ArrTypeClose[0][0];
value2 = ArrTypeClose[0][1];
value3 = Round( (value1-value2)/value2*100, 0);
plot1(value3, "value3");

 

 

排序方式: 標準 | 最新
虎科大許教授 發文於   2024/05/28

問題出在你使用Round。 修改如下就OK了。

value3 = (value1-value2)/value2*100;

 

JasonK 發文於   2024/05/29

感謝大大,你比小編回的還快

虎科大許教授 發文於   2024/05/29

小編任務多,若回覆慢,大家多體諒。

XS小編 發文於   2024/06/04

Hello JasonK,

 

如果您有將 value2 = ArrTypeClose[0][1]; 的 value2 畫出的話,就會注意到在腳本運算第一根Bar時,該值為0。

因為陣列要運算過才會有值,而在運算第一根Bar的時候,陣列的前期值會是預設值 0 (Array: ArrTypeClose[10](0))。

若將預設值改為其他數值 (ex. Array: ArrTypeClose[10](1)) 或是加上檢查 if value2 <> 0 then ... 就不會遇到除以0的狀況。

 

value2 = GetSymbolField("TSE.TW", "收盤價")[1]; 這種方法可以運算是因為 GetSymbolField("TSE.TW", "收盤價")[1] 取的是資料的前期值,前根Bar是否有運算不會影響資料的數值。

故不會有遇到0的狀況。

 

感謝 虎科大許教授 的熱心回覆。

發表回覆
Close