chunfai116 發表於 16-5-10 16:37

想問每個月的c 平均值以當日的volume 去計算

我想寫一條formula,

係用每日的close 的乘返當日的volume比例去計,

而呢個c 數值只會累計到當前月份, 下月又重新累計,

例如:
第一天, c 21000, v 200,
第二天, c 20800, v 300,
第三天, c 20500, v 150

第一天, C1 =21000,
第二天, C2 ={ + }
第三天, C3 ={ + } + [ 20500 X 150/(200+300+150)

請問各位高手可以點寫??

goodddog 發表於 16-5-12 18:36

本帖最後由 goodddog 於 16-5-12 18:46 編輯

//for 日K棒
Vars:CT(0),VT(0);

CT=iff(Month(date)<>Month(date),Close*Volume,CT+Close*Volume);
VT=iff(Month(date)<>Month(date),Volume,VT+Volume);

AvgClose=CT/VT; //日均價
不知有沒有錯

moneymaker 發表於 16-5-14 18:58

本帖最後由 moneymaker 於 16-5-14 19:37 編輯

amibroker 不是 multichart ....

chhung3 發表於 16-5-16 16:27

CV = C * V;

cumArray = 0;
MonthArray = Month();
function cumtmp(){
        rc = CV;
        rv = V;
        for (i = 1; i < barcount; i++){
                if (MonthArray != MonthArray){
                        rc = CV;
                        rv = V;
                }else{
                        rc = rc + CV;
                        rv = rv + V;
                }
        }
        return rc/rv;
}


tmp = cumtmp();
Plot(tmp, "tmp", colorRed);

magier 發表於 16-5-20 20:17

cv = C * V;

Month_change = (Month() != Ref(Month() ,-1));
accu_cv = Sum(cv,BarsSince(Month_change)+1);
accu_v = Sum(V,BarsSince(Month_change)+1);

result = accu_cv / accu_v;

Plot(result,"result",colorBlue);

chunfai116 發表於 16-5-22 09:32

chhung3 發表於 16-5-16 16:27
CV = C * V;

cumArray = 0;


如果我由上月最後一日開始計起,
又可點寫?

chhung3 發表於 16-5-23 13:21

本帖最後由 chhung3 於 16-5-23 13:23 編輯

chunfai116 發表於 16-5-22 09:32
如果我由上月最後一日開始計起,
又可點寫?
將for loop改成這樣:

for (i = 0; i < barcount - 1; i++){
      if (MonthArray[ i ] != MonthArray){
               rc = CV[ i ];
               rv = V[ i ];
       }else{
                rc = rc + CV;
                rv = rv + V;
       }
}

亦即由每月最後一日重設數值,而之前是每月第一日重設數值。

chunfai116 發表於 16-5-26 09:54

chhung3 發表於 16-5-23 13:21
將for loop改成這樣:

for (i = 0; i < barcount - 1; i++){


改左,但有Eorror ,執行不能

chhung3 發表於 16-5-26 13:49

chunfai116 發表於 16-5-26 09:54
改左,但有Eorror ,執行不能
哦,你用唻炒香港期指﹖

CV = C * V;

cumArray = 0;
MonthArray = Month();
function cumtmp(){
      rc = CV;
      rv = V;
      for (i = 0; i < barcount - 1; i++){
         if ((MonthArray[ i ] != MonthArray) || (i == 0)){
               rc[ i ] = CV[ i ];
               rv[ i ] = V[ i ];
         }else{
                rc[ i ] = rc + CV[ i ];
                rv[ i ] = rv + V[ i ];
         }
      }
      rc = rc + CV[ i ];
      rv = rv + V[ i ];
      return rc/rv;
}


tmp = cumtmp();
Plot(tmp, "tmp", colorRed);

咁樣。不過問題係最後一日因為佢唔識認係唔係最後一日trading day,所以就咁accumulate上去。執行上問題應該不大。

chunfai116 發表於 16-5-27 10:25

chhung3 發表於 16-5-26 13:49
哦,你用唻炒香港期指﹖

CV = C * V;


炒港期呀,

FORMULA 依然唔得,

ERROR 顯示CANT NOT DIVIDED BY ZERO

magier 發表於 16-5-27 10:54

cv = C * V;

Month_change = (Month() != Ref(Month() ,1));
accu_cv = Sum(cv,BarsSince(Month_change)+1);
accu_v = Sum(V,BarsSince(Month_change)+1);

result = accu_cv / accu_v;

Plot(result,"result",colorBlue);

chhung3 發表於 16-5-27 13:11

chunfai116 發表於 16-5-27 10:25
炒港期呀,

FORMULA 依然唔得,


我試過冇事喎。係咪有volume = 0嘅data point呀?

頁: [1]
查看完整版本: 想問每個月的c 平均值以當日的volume 去計算