XS 加上average後數值變負數

  •   163 
  • 最後發表   liubig  2021 九月 02
liubig 發文於   2021/08/27

小編你好
剛接觸XS語法我在測試,目前使用簡單的價格分析的時候,發現使用average會使我的原始數值改變,而且average似乎被系統判定為0,為避免我自己語法下錯我有自己另外print出來看看否有誤,在還沒加上average之前都很正常但一加上average後所有原本數值都會不一樣,plot在技術分析圖的時候會顯示"關於計算停止,請檢查腳本分母是否為0"

再麻煩你解決謝謝


 沒加average之前

程式碼:

Variable: test(0),avg_test(0);
value1 = close[1] -open[1];

if value1 >0 then 
test = test + value1*3
else
test = test + value1*2;

avg_test=average(test,10);

value2 = absValue(test-average(test,10));
print(NumToStr(time, 0),"test",test,"avg",average(test,10),"差:",100*absValue(test-average(test,10)));

print結果

112400 test 13483.000000 avg 13502.500000 差: 1950.000000 

112400 test 13483.000000 avg 13502.500000 差: 1950.000000 

112400 test 13483.000000 avg 13502.500000 差: 1950.000000 

112400 test 13483.000000 avg 13502.500000 差: 1950.000000 

112400 test 13483.000000 avg 13502.500000 差: 1950.000000 

112400 test 13483.000000 avg 13502.500000 差: 1950.000000 

112400 test 13483.000000 avg 13502.500000 差: 1950.000000 

112400 test 13483.000000 avg 13502.500000 差: 1950.000000 

112400 test 13483.000000 avg 13502.500000 差: 1950.000000 

112400 test 13483.000000 avg 13502.500000 差: 1950.000000 

112400 test 13483.000000 avg 13502.500000 差: 1950.000000 

 

此時數值皆為正常


 加average之後

程式碼:

Variable: test(0),avg_test(0);
value1 = close[1] -open[1];

if value1 >0 then 
test = test + value1*3
else
test = test + value1*2;

avg_test=average(test,10);

value2 = absValue(test-average(test,10));
print(NumToStr(time, 0),"test",test,"avg",average(test,10),"差:",100*absValue(test-average(test,10))/average(test,10));

在print裡面最後加上average就開始出問題

print結果

171800 test -72.000000 avg -52.600000 差: -36.882129 

171900 test -45.000000 avg -48.700000 差: -7.597536 

172000 test -12.000000 avg -43.000000 差: -72.093023 

172100 test -3.000000 avg -37.900000 差: -92.084433 

172200 test 6.000000 avg -33.400000 差: -117.964072 

172300 test 12.000000 avg -29.500000 差: -140.677966 

172400 test 6.000000 avg -26.000000 差: -123.076923 

172500 test 6.000000 avg -22.100000 差: -127.149321 

172600 test 2.000000 avg -15.800000 差: -112.658228 

172700 test 11.000000 avg -8.900000 差: -223.595506 


 

所有數值都跟前一個不一樣,average也不為0但圖跑出分母為0

附圖為顯示為0的技術分析

再麻煩了

附加文件

排序方式: 標準 | 最新
liubig 發文於   2021/08/27

哈囉~小幫手在嗎?

liubig 發文於   2021/08/30
GaryChiang 發文於   2021/08/30

average(test,10)

可能為0, 

在print之前先判斷它是不是0, 再執行, 應該就可以了!

 

liubig 發文於   2021/08/30

感謝G大熱心回答~~
我在average已經有print average(test,10)出來囉
那目前是顯示負數也不為0

另外我比較好奇的是,

原本數值,以這時間點舉例

112400 test 13483.000000 avg 13502.500000 差: 1950.000000

只是多除以average(test,10),會變成這樣

172400 test 6.000000 avg -26.000000 差: -123.076923 

會差這麼多嗎?

GaryChiang 發文於   2021/08/30

還有一點! 

test值一直在變動

建議寫成

test = test[1] + value1*3 

這樣應該會比較好!

你可以試試!

liubig 發文於   2021/08/30

好的!感謝G大

我會這樣寫是因為平常在寫其他程式語言沒有前一根K棒的概念

我改一下

在後來這個問題我自己找到解決方式了,就是先把average存到某個value裡面,在去除就不會出現這問題

像這樣

value5 = average(test,10);

print (absValue(test-average(test,10))/value5 );

我在想也是像您說一樣,我的test值一直都在變動,XS函數同步性太差,呼叫print的時候average還沒算好,直接爆return 0,某種程度來說這性能是不是有點堪憂阿...?簡單的average都回不出來

 

 

是說....................XS小幫手回復速度有夠慢

這個他們自己函數問題,也要回答那麼久,而且還只是測試階段而已,之後如果要實際開發不就大爆炸?

XQ小幫手 發文於   2021/09/02

Hello liubig,

 

您第一個average(test,10)的值會是0。

因為test在預先讀取筆數的時候會是0,所以您第一次計算 average(test,10) 時會是10個0的平均。

關於讀取筆數的相關說明可以參考此篇文章

 

關於您腳本的運算數字問題,小幫手用指標腳本作回測時沒有出現問題。

您可以把運算的數字全都print出來檢查即可得知。

附上小幫手測試的截圖。

 

另外補充,小幫手在回覆題目時會從討論區後面的頁數往前回。(優先回覆先發問的用戶)

如果下方有回覆的話會導致題目被往前推,讓小幫手更晚看到題目。

再加上近來用戶問題數量增加,所以發問後需要麻煩您多等一陣子。

 

感謝 GaryChiang 的熱心回覆。

附加文件

發表回覆
Close