(已解決 跨頻率比較時,不要用 CountIf) CountIf怎麼使用?

  •   185 
  • 最後發表   Sadless  2021 六月 18
Sadless 發文於   2021/06/14

我想要計算在頻率為分K時,前一天有幾根分K是漲停價,以下是指標的程式碼。

{指標 Test.TrueCount_High_UpLimit_1D}
{測試對象 2021/06/11 笙科(5272) 漲停價為35}

SetTotalBar(270*22*12*1);

var:_UpLimit_1D(0),         {昨天的漲停價} 
    _Count_UpLimit_1D(0),   {昨天有幾根分K是漲停價}
    _Count_UpLimit_1D_const(0); {2021/06/11 笙科(5272) 漲停價為35}


_UpLimit_1D
    = GetField("漲停價", "D")[1];

_Count_UpLimit_1D 
    = CountIf(High[mod(currentbar, 270)]=_UpLimit_1D, 270);

_Count_UpLimit_1D_const
    = CountIf(High[mod(currentbar, 270)]=35, 270); 
        {2021/06/11 笙科(5272) 漲停價為35}


Plot1(_Count_UpLimit_1D, "_Count_UpLimit_1D");
Plot2(_Count_UpLimit_1D_const, "_Count_UpLimit_1D_const");

Plot1 畫的是用變數 _UpLimit_1D 來做邏輯判斷,而Plot2 畫的是直接用常數35來做邏輯判斷,理論上這兩個畫出來的應該要是一樣的。因為_UpLimit_1D是前一天的漲停價,2021/06/11 笙科(5272) 漲停價為35。

但是畫出來不相同,如下圖。

我的猜測是因為_UpLimit_1D 是日頻率"D"的變數,所以導致CountIf(High[mod(currentbar, 270)]=_UpLimit_1D, 270)變成在用日頻率"D"在進行,而不是用"分頻率"在進行。請問這個問題要如何解決?

_UpLimit_1D
    = GetField("漲停價", "D")[1];

 

排序方式: 標準 | 最新
XQ小幫手 發文於   2021/06/16

 Hello Sadless,

 

小幫手會在換日時用for迴圈去計算,因為 countif 是計算區間內,所以您的 _UpLimit_1D 也會一直往前移而導致計算出錯。

附上指標腳本供您參考。

附加文件

Sadless 發文於   2021/06/17

 有方法可以把 _UpLimit_1D 變成不會移動的常數嗎?

XQ小幫手 發文於   2021/06/18

Hello Sadless,

 

就小幫手所知是沒有的。

如果您會需要重複使用相同的code,想要簡化腳本的話可撰寫函數腳本來運用在其他腳本上。

發表回覆
Close