Я пытаюсь создать фондовый индекс, и я использую Q для этой цели. Как вы, наверное, можете сказать, я очень новичок в этом. В то время как я построил его в SQL, это занимает слишком много времени, чтобы обработать, поэтому мое обращение к Q.KDB/Q здание индекс фондового рынка
установки до сих пор является следующее:
В таблице; добавить данные в таблицу, сортировать его:
tickers:`ibm`bac`dis`gs`ibm`gs`dis`bac pxs:100 50 30 250 110 240 45 48 dates:2013.05.01 2013.01.05 2013.02.03 2013.02.11 2013.06.17 2013.06.21 2013.04.24 2013.01.06 sectors:`auto`money`funny`money`auto`money`funny`money trades:([sectors;tickers;dates];pxs) `sectors`dates`tickers xasc `trades
Обработки до сих пор (благодаря другим дружны пользователям):
Я рассчитывается, сколько имеет каждое изменение цены акций от в прошлый раз цена была зафиксирована
trades: update delta:{0,1_deltas x}pxs by tickers from trades
Я подсчитал общую рыночную стоимость компонентов секторного индекса
trades: update idxmv:sums[?[delta<>0;delta;pxs]] by sectors from trades
Как это выглядит:
sectors tickers dates | pxs delta idxmv --------------------------| --------------- auto ibm 2013.05.01| 100 0 100 auto ibm 2013.06.17| 110 10 110 funny dis 2013.02.03| 30 0 30 funny dis 2013.04.24| 45 15 45 money bac 2013.01.05| 50 0 50 money bac 2013.01.06| 48 -2 48 money gs 2013.02.11| 250 0 298 money gs 2013.06.21| 240 -10 288
Что я хочу сделать:
Я хочу, чтобы вычислить индекс сектора, который изменяется при изменении ее компонентов; для этого мне нужно вычислить столбец дивизора и фактический столбец индекса. Логика я пытаюсь осуществить следующим образом:
- если
delta != 0
, тоdivisor = the last value of the divisor, in the same sector
- если
delta != 0
, тоindex = idxmv % the value of the divisor computed above
- если
delta = 0
, тоindex = the last value of the index, in the same sector
- если
delta = 0
, тоdivisor = idxmv % the value of the index computed above
, где начальное значение индекса равно 100; все сектора имеют начальное значение индекса 100
- если
Так, по существу, то, что я хочу, чтобы в конечном итоге, что-то похожее на ниже:
sectors tickers dates | pxs delta idxmv divisor index
--------------------------| ------------------------------
auto ibm 2013.05.01| 100 0 100 1 100
auto ibm 2013.06.17| 110 10 110 1 110
funny dis 2013.02.03| 30 0 30 0.30 100
funny dis 2013.04.24| 45 15 45 0.30 150
money bac 2013.01.05| 50 0 50 0.50 100
money bac 2013.01.06| 48 -2 48 0.50 96
money gs 2013.02.11| 250 0 298 3.10 96
money gs 2013.06.21| 240 -10 288 3.10 92.78
Спасибо за вашу помощь ,
Dan
Спасибо за помощь акаш. Это больше, чем я когда-либо получал. Я изучаю, как правильно вычислять последнюю строку, еще раз спасибо за указание некоторых действительно полезных функций. – user1158959