用自訂函數 算 跨頻率 BAR 的 bollingerBand

  •   217 
  • 最後發表   PF  2021 十二月 17
PF 發文於   2021/12/15

自訂函數 - my_fx_test

以一分鐘來跑, 想拿到15分鐘的 my_fx_test 的 BBand:

upper_15min_bar1 = bollingerBand(my_fx_test("15")[15],bb_length,2);

// 有發現要使用 BAR [15]  (因為 15分鐘 (1*15) ) 才可以拿到 15min 的BAR1
// my_fx_test 是可以一支跨頻率的FX 去計算 open close high low. 

===================================================

我想 bollingerBand 沒辦法以每次 +15 支的方法去算  15min 的 bollingerBand,
即 如果長度是20的話, 他就會用 bar 15, 16, 17, 18, 19.... 35, 所以會算錯,
而不是 " bar 15, 30, 45, 60......到15min的第20根"

(知道  bollingerBand (GetField("成交量", "D")[1], 20) 這寫法是不會有 BAR / 算錯的問題, 但我用自訂函數算bollingerBand時會)

 

請問可以如何解決 或避開這問題? 我策略要同時比對我的FX 的bollingerBand

謝謝

XQ小幫手 發文於   2021/12/17

Hello PF,

 

小幫手想到的方法是您自行判斷取得所需的15分鐘資料,然後運算布林通道。

這邊提供小幫手寫的簡單範例指標:

array: _15min_value[10](0);

var: _average(0), _std(0), _sum(0), _bup(0), _bdown(0);

 

if currentBar > 15*11 then begin

    

    //當下這根Bar的資料

    _15min_value[1] = close;

    value2 = 1;

    value3 = 1;

 

    while value2 < 10 begin     //抓取前10根15分鐘Bar的資料

        if (minute(time[value3]) = 14 or minute(time[value3]) = 29 

    or minute(time[value3]) = 44 or minute(time[value3]) = 59) then begin

        value2 += 1;

            _15min_value[value2] = close[value3];

    end;

value3 += 1;

end;

    

    //計算平均值和標準差

    _average = array_sum(_15min_value, 1, 10) / 10;

    _sum = 0;

    for value1 = 1 to 10 begin

        _sum += square(_15min_value[value1] - _average);

end;

    _std = squareRoot((_sum / 10));

 

    _bup = _average + (2 * _std);

    _bdown = _average - (2 * _std);

end;

 

裡面的close只要改成您要運算的數列 (ex. value10 = my_fx_test("15");) 即可。

如果您函數裡面只是用 getsymbolfield 去取資訊的話,小幫手建議您直接寫在腳本用 bollingerband(getsymbolfield(......), 20, 2) 這樣就不用跑上面漫長的運算。

另外之所以是取第14, 29, 44, 59 分鐘的Bar是因為XQ的時間是以Bar開始的時間為準,所以1分鐘頻率14分的收盤價會等同於15分鐘頻率00分的收盤價,同理類推。

發表回覆
Close