從官方函式 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 迴圈累加計算。
請問小幫手,上述哪一種寫法才是正確的?而這些算法的回傳值不同的原因是甚麼呢?
.jpg?width=690&upscale=false)
.jpg?width=690&upscale=false)
1 評論