0

Postgresql でテクニカル指標のカスタム関数を構築しようとしていますが、いくつかの疑問が頭に浮かびました。1 つ目は、この指標 (移動平均、RSI、MACD、RSI、MFI などの一般的な指標) を既に持っているライブラリまたはプラグインの場合です。

2 番目の質問は、コーディングしようとしているインジケーターに関するものです。MFI (マネー フロー インデックス) インジケーターは次のように定義されます。

  • 典型的な価格を計算します: (高値 + 安値 + 終値) / 3
  • 現金の流れを計算します: 典型的な価格 x 出来高
  • マネー フロー比率の計算: (14 期間の正のマネー フロー) / (14 期間の負のマネー フロー) (**)
  • MFI の計算: 100 – 100 / (1 + マネー フロー比率)

私がすでに行ったことはこれです:

with actual_close as (
    select 
    date, 
    (high+low+close)/3*1000 v_ty_price,  --This is the typical price x volume, since in this case is always 1000
    close actual_close
    from eurusd_ohlc
), 
prev_close as(
                select date,
                      v_ty_price,
                      actual_close,
                      lag(actual_close,1) over(order by date) prev_close 
                      from actual_close), 
totals as (
    select date,
           v_ty_price, 
           actual_close, 
           prev_close, 
           actual_close-prev_close close_dif 
           from prev_close
)

select date, sum(close_dif) over(rows between 14 preceding and current row) from totals 

次の出力が得られます。

-------------------------------------------------------
|          date             |         sum             |
|2020-02-20 03:27:35.140751 |         NULL            |
|2020-02-20 04:19:17.088462 |   -6.000000000017103e-05|
|2020-02-20 05:54:44.060929 |           0             |
|2020-02-20 06:41:32.916934 |   -0.0006200000000000649|

この出力は、(**) で使用する必要があるものです。その部分は次のようになります。

  • 最後の 14 行を取得
  • すべての正の数を足し合わせ、すべての負の数を足し合わせる
  • すべてのプラスの合計をすべてのマイナスで割ります。

したがって、最後の 14 行が次のようになっていると仮定します。

sum
-0.1
-0.6
1.2
0.1
1.5
-1
1
-0.2
0
-1
1
1.5
1.1
-1.1

したがって、それぞれの合計は次のようになります。

pos_sum = 1.2 + 0.1 + 1.5 + 1 + 0 + 1 + 1.5 + 1.1

neg_sum = 0.1 + 0.6 + 1 + 0.2 + 1 + 1.1

次に、マネー フロー比率が pos_sum/neg_sum として計算されます (OBS: MFI は 0 から 100 の間の有界指標であり、neg_sum = 0 の場合、マネー フロー比率は 100 です)。

そして、最後に 100 – 100 / (1 + マネー フロー比率) を実行して MFI を計算します。

私が問題を抱えている部分は、pos_sum と neg_sum の計算にあります。これらの項を計算し、ローリング方式で行うにはどうすればよいですか? (または移動ウィンドウ)

前もって感謝します!どんな提案でも大歓迎です:)

4

2 に答える 2