關於標準差

  •   225 
  • 最後發表   CL  2022 四月 24
CL 發文於   2022/04/14

請問一個基本的問題:

我想用標準差的公式,透過迴圈計算標準差(因為最終我想要用量加權的均價去畫布林通道),但是不知道為什麼,用公式算出來的標準差跟內建函數的標準差在每日開盤時會很接近,但隨著時間,差距會擴大,0不知道能否幫我看看我的問題在哪裡?最後附上今日的列印值。感謝!(順便上傳給您看圖上有明顯的差異,綠色是正常布林通道,白色是我用迴圈畫的)

——————————————————————

以下是我寫的程式:

input: a2(20,"週期1"),a3(2,"倍數");

vars:mid(0),Sum(0), sqrDiff(0),std(0), std1(0),i(0),ub1(0),lb1(0),ub2(0),lb2(0);

mid=average(close,a2); //20根k的收盤價均價

Sum=0;

sqrDiff=0;

for i=0 to a2-1

 begin

 sqrDiff=square(mid[i]-close[i]);          //收盤價與20均差的平方

 sum=sum+sqrDiff;                             //收盤價與20均差的平方加總

 end;

 

std=squareroot(sum/a2);                //標準差:差的平方加總之20均開平方根

std1=standardDev(close,a2,1);     //內建函數的標準差

 

print(time,"std=",std,"std1=",std1);

——————————————————————

以下為部分列印出來的兩個標準差,前者是我用公式算的,後者是我用內建函數算的:

90000.000000 std= 0.840182 std1= 0.825757    //開盤時很接近

90500.000000 std= 0.867558 std1= 0.864219 

91000.000000 std= 0.898697 std1= 0.893029 

91500.000000 std= 0.950756 std1= 0.954921 

92000.000000 std= 0.968343 std1= 0.978200 

92500.000000 std= 1.048526 std1= 1.053565 

93000.000000 std= 1.082084 std1= 1.077033 

93500.000000 std= 1.089381 std1= 1.085127 

94000.000000 std= 1.087672 std1= 1.082532 

94500.000000 std= 1.086738 std1= 1.079352 

95000.000000 std= 1.091000 std1= 1.066243 

95500.000000 std= 1.087773 std1= 1.072381 

100000.000000 std= 1.092188 std1= 1.071214 

100500.000000 std= 1.091745 std1= 1.047318 

101000.000000 std= 1.087083 std1= 0.993730 

101500.000000 std= 1.098237 std1= 0.943398 

102000.000000 std= 1.103276 std1= 0.864581 

102500.000000 std= 1.116580 std1= 0.810478 

103000.000000 std= 1.145712 std1= 0.762807 

103500.000000 std= 1.192961 std1= 0.724569 

104000.000000 std= 1.015689 std1= 0.724569 

104500.000000 std= 1.005547 std1= 0.746241 

105000.000000 std= 0.981342 std1= 0.739510 

105500.000000 std= 0.942487 std1= 0.762807 

110000.000000 std= 0.921565 std1= 0.749583 

110500.000000 std= 0.845817 std1= 0.766485 

111000.000000 std= 0.844060 std1= 0.810478 

111500.000000 std= 0.831922 std1= 0.788591 

112000.000000 std= 0.839699 std1= 0.732718 

112500.000000 std= 0.844763 std1= 0.657172 

113000.000000 std= 0.837033 std1= 0.609816 

113500.000000 std= 0.832241 std1= 0.556776 

114000.000000 std= 0.827666 std1= 0.486698 

114500.000000 std= 0.835183 std1= 0.414578 

115000.000000 std= 0.827364 std1= 0.384057 

115500.000000 std= 0.819489 std1= 0.432290 

120000.000000 std= 0.797163 std1= 0.426468 

120500.000000 std= 0.798475 std1= 0.450000 

121000.000000 std= 0.806109 std1= 0.535607 

121500.000000 std= 0.825719 std1= 0.659545 

122000.000000 std= 0.769476 std1= 0.675925 

122500.000000 std= 0.754217 std1= 0.686932 

123000.000000 std= 0.759564 std1= 0.668954 

123500.000000 std= 0.745256 std1= 0.670820 

124000.000000 std= 0.748770 std1= 0.637868 

124500.000000 std= 0.754093 std1= 0.653835 

125000.000000 std= 0.729126 std1= 0.678233 

125500.000000 std= 0.730325 std1= 0.621993 

130000.000000 std= 0.735336 std1= 0.614410 

130500.000000 std= 0.740418 std1= 0.597390 

131000.000000 std= 0.747475 std1= 0.511737 

131500.000000 std= 0.749812 std1= 0.463681 

132000.000000 std= 0.769212 std1= 0.430116 

132500.000000 std= 0.772435 std1= 0.430116 

排序方式: 標準 | 最新
XQ小幫手 發文於   2022/04/21

Hello CL,

 

您只需要將 sqrDiff=square(mid[i]-close[i]);  改為 sqrDiff=square(mid-close[i]); 即可。

因為平均價是計算當下的平均價,不需要跟著一起往前。(會取到不同時間點的平均價)

CL 發文於   2022/04/24

太棒了 真是感謝你

發表回覆
Close