(尚未回應) 為什麼 summation(highD(1),5) 跟 summation(GetField("high","D"),5) 回傳的值不同呢?

  •   56 
  • 最後發表   Sadless  2020 十月 06
Sadless 發文於   2020/10/06

從官方函式 HighD() 的定義可以知道,HighD(1)= GetField("High","D")[1];

//HighD(PeriodsAgo)

SetBarMode(1);

input: PeriodsAgo(numericsimple);

HighD = GetField("High","D")[PeriodsAgo];

 

那麼,理論上summation(highD(1),5) 跟 summation(GetField("high","D")[1],5) 應該回傳的相同的值。

 

我寫了一個測試指標腳本:Test.Summation.HighD

//Test.Summation.HighD

variable:HighD_Array(0); HighD_Array=0; HighD_Array = highD(1);//昨天的最高價 variable: sum_HighD_Array(0); sum_HighD_Array=0; variable: i(0); i=0; for i=0 to 4 begin sum_HighD_Array += HighD_Array[i]; end; //================================================================= variable:HighD_GetField_Array(0); HighD_GetField_Array=0; HighD_GetField_Array = GetField("high","D")[1];//昨天的最高價 variable: sum_HighD_GetField_Array(0); sum_HighD_GetField_Array=0; for i=0 to 4 begin sum_HighD_GetField_Array += HighD_GetField_Array[i]; end; variable: sum_HighD_5(0); sum_HighD_5 = 0; variable: sum_HighD_GetField_5(0); sum_HighD_GetField_5=0; //================================================================= for i=1 to 5 begin sum_HighD_5 += highD(i); sum_HighD_GetField_5 += GetField("high","D")[i]; end; //================================================================= plot11(summation(highD(1),5),"1.summation(highD(1),5)"); plot12(summation(GetField("high","D")[1],5),"2.summation,getfield,high,D,5"); plot13(sum_HighD_Array, "3.sum_HighD_Array"); plot14(sum_HighD_GetField_Array, "4.sum_HighD_GetField_Array"); plot15(sum_HighD_5, "5.sum_HighD_5"); plot16(sum_HighD_GetField_5, "6.sum_HighD_GetField_5");

 

結果如下圖,回傳值分為兩派:

  • 腳本裡,1.summation(highD(1),5) 的回傳值 2190 跟 2.summation(GetField("high","D")[1],5) 的回傳值 2167 完全不同。
  • 腳本裡,利用Array變數分別承接 highD(1) 與 GetField("high","D")[1] 之後,裡用 for迴圈累加Array變數,得到了3.sum_HighD_Array  與 4.sum_HighD_GetField_Array,其回傳值皆為2190。其皆與summation(highD(1),5) 相同。
  • 腳本裡,利用迴圈來直接累加 highD(1) 與 GetField("high","D")[1],得到 5.sum_HighD_5跟 6.sum_HighD_GetField_5,其回傳值皆為2167.5。其皆與summation(GetField("high","D")[1],5) 相同。

 

綜合上述實驗結果看來,我猜測只要序列函數被承接到Array之後,序列函數的角色就會改變,因為 summation 裡面也是用 Array變數 來承接序列函數進行 for 迴圈累加計算。

請問小幫手,上述哪一種寫法才是正確的?而這些算法的回傳值不同的原因是甚麼呢?

 

 

 

Sadless 發文於   2020/10/06

我同樣測試了 Volume,也有類似的情形。

 

我寫了一個測試腳本:Test.Summation.Volume

//指標:Test.Summation.Volume

variable: i(0); i=0; //================================================================= variable:Volume_GetField_Array(0); Volume_GetField_Array=0; Volume_GetField_Array = GetField("Volume","D")[1];//昨天的最高價 variable: sum_Volume_GetField_Array(0); sum_Volume_GetField_Array=0; for i=0 to 4 begin sum_Volume_GetField_Array += Volume_GetField_Array[i]; end; //variable: sum_Volume_5(0); sum_Volume_5 = 0; variable: sum_Volume_GetField_5(0); sum_Volume_GetField_5=0; //================================================================= for i=1 to 5 begin sum_Volume_GetField_5 += GetField("Volume","D")[i]; end; //================================================================= plot12(summation(GetField("Volume","D")[1],5),"2.summation,getfield,Volume,D,5"); plot14(sum_Volume_GetField_Array, "4.sum_Volume_GetField_Array"); plot16(sum_Volume_GetField_5, "6.sum_Volume_GetField_5");

 

結果如下圖:

  • 腳本中,2. summation(GetField("Volume","D")[1],5) 與 6.sum_Volume_GetField_5 其回傳值皆為180519。
  • 腳本中,裡用Array變數承接後,用迴圈累加該Array變數的 4.sum_Volume_GetField_Array 其回傳值為166195,與另外兩個不同。

 

綜合上述結果,我猜測,GetField所取得的回傳值,似乎不可以用Array承接,並且用for迴圈進行計算。

請問小幫手,這其中的原因是什麼呢?

 

發表回覆
Close