COCO研究院

 找回密碼
 註冊
搜索
查看: 2619|回復: 11

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

[複製鏈接]
發表於 16-5-10 16:37 | 顯示全部樓層 |閱讀模式
我想寫一條formula,

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

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

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

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

請問各位高手可以點寫??
發表於 16-5-12 18:36 | 顯示全部樓層
本帖最後由 goodddog 於 16-5-12 18:46 編輯

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

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

AvgClose=CT/VT; //日均價
不知有沒有錯
發表於 16-5-14 18:58 | 顯示全部樓層
本帖最後由 moneymaker 於 16-5-14 19:37 編輯

amibroker 不是 multichart ....
發表於 16-5-16 16:27 | 顯示全部樓層
CV = C * V;

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


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

評分

參與人數 1金錢 +2 收起 理由
lwhuang + 2 太強了

查看全部評分

發表於 16-5-20 20:17 | 顯示全部樓層
  1. cv = C * V;

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

  5. result = accu_cv / accu_v;

  6. Plot(result,"result",colorBlue);
複製代碼

評分

參與人數 1金錢 +2 收起 理由
lwhuang + 2 太強了

查看全部評分

 樓主| 發表於 16-5-22 09:32 | 顯示全部樓層
chhung3 發表於 16-5-16 16:27
CV = C * V;

cumArray = 0;

如果我由上月最後一日開始計起,
又可點寫?
發表於 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[i + 1]){
               rc = CV[ i ];
               rv = V[ i ];
       }else{
                rc = rc[i - 1] + CV;
                rv = rv[i - 1] + V;
       }
}

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

 樓主| 發表於 16-5-26 09:54 | 顯示全部樓層
chhung3 發表於 16-5-23 13:21
將for loop改成這樣:

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

改左,但有Eorror ,  執行不能
發表於 16-5-26 13:49 | 顯示全部樓層
chunfai116 發表於 16-5-26 09:54
改左,但有Eorror ,  執行不能

哦,你用唻炒香港期指﹖

CV = C * V;

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


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

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

 樓主| 發表於 16-5-27 10:25 | 顯示全部樓層
chhung3 發表於 16-5-26 13:49
哦,你用唻炒香港期指﹖

CV = C * V;

炒港期呀,

FORMULA 依然唔得,

ERROR 顯示CANT NOT DIVIDED BY ZERO
發表於 16-5-27 10:54 | 顯示全部樓層
  1. cv = C * V;

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

  5. result = accu_cv / accu_v;

  6. Plot(result,"result",colorBlue);
複製代碼
發表於 16-5-27 13:11 | 顯示全部樓層
chunfai116 發表於 16-5-27 10:25
炒港期呀,

FORMULA 依然唔得,

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

您需要登錄後才可以回帖 登錄 | 註冊

本版積分規則

手機版|Archiver|站長信箱|廣告洽詢|COCO研究院

GMT+8, 24-11-22 10:36

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回復 返回頂部 返回列表
理財討論網站 |