我有一些舊的日內 1m 柱資料,我正試圖為我正在使用的應用程式清理這些資料,這需要每只股票每天 390 個 1m 柱刻度(上午 9:30 - 下午 16:00)的日內資料。不幸的是,資料越舊,出現的缺口就越多,因為資料只包含在所述分鐘內實際交易的資料。即:沒有交易=沒有交易量=沒有資料。
PCT_CHANGE 由未顯示的底層證券 (CLOSE-OPEN)/OPEN*100 計算,反映了當前 TICK 自開盤以來到收盤時的百分比變化。
例子:
TICK DATA_TICK PCT_CHANGE VOLUME
9:30:00 AM
9:31:00 AM
9:32:00 AM
9:33:00 AM
9:34:00 AM
9:35:00 AM 9:35:00 AM 0 15500
9:36:00 AM 9:36:00 AM 0.06 1500
9:37:00 AM
9:38:00 AM 9:38:00 AM 0.24 4000
9:39:00 AM 9:39:00 AM 0.2 4500
9:40:00 AM 9:40:00 AM 0.34 500
9:41:00 AM
9:42:00 AM 9:42:00 AM 0.34 500
9:43:00 AM
9:44:00 AM
9:45:00 AM
9:46:00 AM
9:47:00 AM 9:47:00 AM 0.13 2000
9:48:00 AM 9:48:00 AM 0.13 1000
9:49:00 AM
9:50:00 AM 9:50:00 AM 0.22 500
9:51:00 AM 9:51:00 AM 0.24 2500
9:52:00 AM 9:52:00 AM 0.24 1000
9:53:00 AM 9:53:00 AM 0.24 2000
9:54:00 AM
9:55:00 AM 9:55:00 AM 0.13 500
9:56:00 AM
9:57:00 AM 9:57:00 AM 0.13 2000
9:58:00 AM 9:58:00 AM 0.24 2000
9:59:00 AM 9:59:00 AM 0.24 500
10:00:00 AM 10:00:00 AM 0.13 500
所以我想要做的是用前一個現有行的值填充缺失的 1m 間隔 PCT_CHANGE 值,在開場分鐘的情況下,然后是 0(零)。所有插入值的音量將為 0。
例子
上午 9:41 pct_change 將 = 0.34 并且音量 = 0
上午 9:43-46 pct_change 將全部 = 0.34 并且音量 = 0。
DB2 中是否有一些巧妙的特性、SQL 陳述句、函式等可以讓我將它們包含在存盤程序中,以運行超過 10 年的多只股票資料?我已經嘗試過,但我對 SQL 的了解非常有限,但我能做的最好的事情就是填補 1 分鐘的空白。在缺少數分鐘的情況下,我會得到可悲的結果。
如果某個善良的靈魂能給我一個如何實作這一目標的例子,我將不勝感激。
非常感謝。
uj5u.com熱心網友回復:
你可以做:
select
t.tick, t.data_tick,
coalesce(t.pct_change, l.pct_change, 0) as pct_change,
coalesce(t.volume, l.volume, 0) as volume
from t
left join (
select t.*, (
select tick from t a where data_tick <= t.tick order by data_tick desc
fetch first 1 rows only
) as related_tick
from t
) r on r.tick = t.tick
left join t l on l.tick = r.related_tick
order by tick
結果(帶有用于測驗目的的修改資料):
TICK DATA_TICK PCT_CHANGE VOLUME
--------- ---------- ----------- ------
09:39:00 0.00 0
09:40:00 09:40:00 0.34 500
09:41:00 0.34 500
09:42:00 09:42:00 0.35 600
09:43:00 0.35 600
09:44:00 0.35 600
09:45:00 0.35 600
09:46:00 0.35 600
09:47:00 09:47:00 0.13 2000
請參閱db<>fiddle的運行示例。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/454995.html
