ืืืจ ืงืขื ื ืืืืขื ืขื ืืืขืื ืืืึธืก ืื KDB + ืืึทืืข, ืื Q ืคึผืจืึธืืจืึทืืืื ื ืฉืคึผืจืึทื ืืขื ืขื, ืืืึธืก ืืืืขืจ ืกืืจืขื ืืงืืก ืืื ืืืืงื ืึทืกืึทื ืืขื ืขื ืืื ืืืื ืคืจืืขืจืืืงื
ืืงืืื
KDB + ืืื ืึท ืงืึธืืืื ืขืจ ืืึทืืึทืืืืก ืคืึธืืงืืกื ืืืืฃ ืืืืขืจ ืืจืืืก ืึทืืึทืื ืฅ ืคืื ืืึทืื, ืึธืจืืขืจื ืืื ืึท ืกืคึผืขืฆืืคืืฉ ืืืขื (ืืคึฟืจื ืืืจื ืฆืืื). ืขืก ืืื ืืขื ืืฆื ืืคึฟืจื ืืื ืคืื ืึทื ืฆืืขื ืืื ืกืืืืืฆืืขืก - ืืึทื ืงืก, ืื ืืืขืกืืึทื ื ืืขืื, ืคืึทืจืืืืขืจืื ื ืงืึธืืคึผืึทื ืืขืก. ืื Q ืฉืคึผืจืึทื ืืื ืื ืื ืขืจืืขื ืฉืคึผืจืึทื ืคืื KDB + ืืืึธืก ืึทืืึทืื ืืืจ ืฆื ืืคืขืงืืืืืื ืึทืจืืขืื ืืื ืื ืืึทืื. ืื Q ืืืขืึธืืึธืืืข ืืื ืงืืจืฅ ืืื ืขืคืขืงืืืืืงืืึทื, ืืฉืขืช ืงืืขืจืืื ืืื ืืงืจืื ืืขืืืขื. ืืึธืก ืืื ืืขืจืขืืืคืืจืืืงื ืืืจื ืื ืคืึทืงื ืึทื ืื ืืืขืงืืึธืจ ืฉืคึผืจืึทื ืืืขื ืืืื ืฉืืืขืจ ืฆื ืคึฟืึทืจืฉืืืื ืืื ืงืืื ืคืึทื, ืืื ืื ืืจืขืืืึทืื ืืื ืจืืืฉื ืึทืก ืคืื ืื ืจืขืงืึธืจืืื ื ืึทืืึทืื ืืืจ ืฆื ืืขื ืึท ืคืื ืืจืขืกืขืจืข ืืืื ืคืื ืื ืคึผืจืึธืืจืึทื ืืืืฃ ืืืื ืคืึทืจืฉืืขืื, ืืืึธืก ืืขืกืึธืฃ ืืืื ืขืก ืืจืื ืืขืจ ืฆื ืคึฟืึทืจืฉืืืื.
ืืื ืืขื ืึทืจืืืงื ืืืจ ืื ืกืืจืืืขื ื ืึท ืคืื-ืคืืขืืืฉื ืคึผืจืึธืืจืึทื ืืื Q ืืื ืืืจ ืืื ืืืขืื ืฆื ืคึผืจืืืืจื ืขืก. ืฆื ืืึธื ืืึธืก, ืืืจ ืืืขื ืืึทืจืคึฟื ืื ืคืึทืงืืืฉ ืง. ืืืจ ืงืขื ืขื ืืจืืคืงืืคืืข ืื ืคืจืื 32-ืืืกื ืืืขืจืกืืข ืืืืฃ ืื kx ืคืืจืืข ืืืขืืืืืื -
ืืืกืืึธืืื ื ืคืื ืื ืคึผืจืึธืืืขื
ืขืก ืืื ืึท ืืงืืจ ืืืึธืก ืกืขื ืื ืึท ืืืฉ ืืื ืืึทืื ืืขืืขืจ 25 ืืืืืกืขืงืึทื ืื. ืืื ื KDB + ืืื ืืขื ืืฆื ืืคึฟืจื ืืื ืคืื ืึทื ืฆื, ืืืจ ืืืขืื ืืืขืจื ืขืืขื ืึทื ืืึธืก ืืื ืึท ืืืฉ ืคืื ืืจืึทื ืืึทืงืฉืึทื ื (ืืจืืืื), ืืืึธืก ืืื ืื ืคืืืืขื ืืข ืฉืคืืืื: ืฆืืื (ืฆืืื ืืื ืืืืืกืขืงืึทื ืื), sym (ืคึฟืืจืืข ืืึทืฆืืืืขื ืื ื ืืืืฃ ืืขืจ ืืขืจืืข - ืืื, ืึทืึทืคึผื,...), ืคึผืจืืึทื (ืื ืคึผืจืืึทื ืืื ืืืึธืก ืื ืฉืึทืจืขืก ืืขื ืขื ืืขืงืืืคื), ืืจืืืก (ืืจืืืก ืคืื ืื ืืึทืกืข). ืื ืืขืืึทืืขื ืคืื 25 ืืืืืกืขืงืึทื ื ืืื ืึทืจืืืืจืึทืจืืฉ, ื ืืฉื ืฆื ืงืืืื ืืื ื ืืฉื ืฆื ืืึทื ื. ืืืื ืืืึทืืืึทื ืืืื ืึทื ืื ืืึทืื ืงืืืขื ืฆื ืื ืกืขืจืืืืก ืฉืืื ืืึทืคืขืจื. ืขืก ืืืึธืื ืืืื ืืจืื ื ืฆื ืื ืกืืจืืืขื ื ืืึทืคืขืจืื ื ืืืืฃ ืื ืกืขืจืืืืก ืืืึทื, ืึทืจืืึทื ืืขืจืขืื ื ืืื ืึทืืืฉ ืืึทืคืขืจืื ื ืืืคึผืขื ืืื ื ืืืืฃ ืื ืงืจืึทื ื ืืึทืกืข, ืึธืืขืจ ืคึฟืึทืจ ืคึผืึทืฉืืขืก, ืืืจ ืืืขืื ืคืึธืงืืก ืืืืฃ ืึท ืคืึทืจืคืขืกืืืงื ืืขืืึทืืขื.
ืื ืืื ืกื ืืืื ืฆืืืื ืืขืืขืจ ืืื ืื ืคึฟืึทืจ ืืขืืขืจ ืื ืงืึทืืื ื ืกืืืืึธื ืคืื ืื ืกืื ืืืึทื ืึท ืกืืื ืคืื ืึทืืืจืขืืืืืื ื ืคืึทื ืืงืฉืึทื ื - ืืึทืงืกืืืื ืคึผืจืืึทื, ืืืจืืฉื ืืืืขื ืคึผืจืืึทื, ืกืึทืืึทืงื ืืจืืืก, ืขืืง. ื ืืฆืืง ืืื ืคึฟืึธืจืืึทืฆืืข. ืคึฟืึทืจ ืคึผืึทืฉืืขืก, ืืืจ ืืืขืื ืืืขืจื ืขืืขื ืึทื ืึทืืข ืคืึทื ืืงืฉืึทื ื ืงืขื ืขื ืืืื ืงืึทืืงืืึทืืืืืื ืื ืงืจืึทืืขื ืืึทืื, ื.ื. ืฆื ืงืจืืื ืึท ื ืืึท ืืืขืจื, ืขืก ืืื ืืขื ืื ืฆื ืืืืกื ืฆืืืื ื ืืืขืจื - ืื ืึทืื ืืื ืื ืื ืงืึทืืื ื ืืืึทืืืขืก. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืื ืคืึทื ืืงืฉืึทื ื ืืึทืงืก, ืืืจืืฉื ืืืืขื, ืกืึทืืึทืงื ืืึธืื ืืขื ืคืึทืจืืึธื, ืึธืืขืจ ืื ืืืืืึทื ืคึฟืื ืงืฆืืข ืืื ื ืืฉื.
ืืืจ ืืืขืื ืืืื ืืืขืจื ืขืืขื ืึทื ืื ืื ืงืึทืืื ื ืืึทืื ืืืึทื ืืื ืฆืืื ืึธืจืืขืจื. ืืึธืก ืืืขื ืืขืื ืืื ืื ืื ืืขืืขืื ืืืื ืฆื ืึทืจืืขืื ืืืืื ืืื ืื ืืขืฆืืข ืืื ืื. ืืื ืคืืจ, ืขืก ืืื ืืขื ืื ืฆื ืงืขื ืขื ืฆื ืึทืจืืขืื ืืื ืื ืงืจืึทื ื ืืื ืคืจืืขืจืืืงืข ืืื ืื ืืื ืคืึทื ืขืืืขืืข ืืขืจืืืึทื ืืืงืื ืืขื ืืขื ืขื ืฉืคึผืขื. ืคึฟืึทืจ ืคึผืึทืฉืืขืก, ืืืจ ืืืขืื ื ืืฉื ืืึทืืจืึทืืื ืืขื ืคืึทื.
ืึทืืืจืขืืึทืืืึธื ืคืึทื ืืงืฉืึทื ื
ืื ืคืืจืืื ืื ืึทืืืจืขืืึทืืืึธื ืคืึทื ืืงืฉืึทื ื ืืขื ืขื ืืืกืืขื ืืื ืื. ืืื ืืขื ืืืขื ืืื ืคืืืข ืคืื โโืืื ืืื ืืขืืืขื ืฆื ืคืึทืจืืจืขืกืขืจื ืื ืืึทืกืข ืืืืฃ ืื ืกืขืจืืืืก:
- ืืืื - ืืึทืงืก ืคึผืจืืึทื - ืืึทืงืกืืืื ืคึผืจืืึทื ืคึผืขืจ ืืื ืื.
- ื ืืืขืจืืง - ืืื ืคึผืจืืึทื - ืืื ืืืื ืคึผืจืืึทื ืคึผืขืจ ืืื ืื.
- firstPrice - ืขืจืฉืืขืจ ืคึผืจืืึทื - ืขืจืฉืืขืจ ืคึผืจืืึทื ืคึผืขืจ ืืื ืื.
- lastPrice - ืืขืฆืืข ืคึผืจืืึทื - ืืขืฆืืข ืคึผืจืืึทื ืคึผืขืจ ืืื ืื.
- ืคืืจืกืืกืืืข - ืขืจืฉืืขืจ ืืจืืืก - ืขืจืฉืืขืจ ืืึทื ืื ืืจืืืก ืคึผืขืจ ืืื ืื.
- lastSize - ืืขืฆืืข ืืจืืืก - ืืขืฆืืข ืืึทื ืื ืืจืืืก ืืื ืึท ืืื ืื.
- numTrades - ืฆืืืื ืืื - ื ืืืขืจ ืคืื ืืจืืืื ืคึผืขืจ ืืื ืื.
- ืืึทื ื - ืกืึทืืึทืงื ืืจืืืก - ืกืึทืืึทืงื ืคืื ืืึทื ืื ืกืืืขืก ืคึผืขืจ ืืื ืื.
- pvolume - ืกืึทืืึทืงื ืคึผืจืืึทื - ืกืึทืืึทืงื ืคืื ืคึผืจืืืกืึทื ืคึผืขืจ ืืื ืื, ืคืืจืืื ืื ืคึฟืึทืจ avgPrice.
- - ืกืึทืืึทืงื ืืืกืงืขืจ ืคึผืจืืึทื * ืืจืืืก - ืืึทื ืฅ ืืึทื ื ืคืื ืืจืึทื ืืึทืงืฉืึทื ื ืคึผืขืจ ืืื ืื.
- avgPrice - pvolume% numTrades - ืืืจืืฉื ืืืืขื ืคึผืจืืึทื ืคึผืขืจ ืืื ืื.
- avgSize - volume% numTrades - ืืืจืืฉื ืืืืขื ืืึทื ืื ืืจืืืก ืคึผืขืจ ืืื ืื.
- vwap - ืืืกืงืขืจ% ืืึทื ื - ืืืจืืฉื ืืืืขื ืคึผืจืืึทื ืคึผืขืจ ืืื ืื ืืืืืืื ืืืจื ืืจืึทื ืกืึทืงืืืึธื ืืจืืืก.
- cumVolume - ืกืึทืืึทืงื ืืึทื ื - ืึทืงืืืืืึทืืืืืื ืืจืืืก ืคืื ืืจืึทื ืืึทืงืฉืึทื ื ืืืืขืจ ืื ืืื ืฆืข ืฆืืื.
ืืึธืืืจ ืืืืื ืืืกืงืืืืจื ืืืื ื ืื-ืงืืึธืจืขืืืืืง ืคืื ื - ืืื ืฆื ืื ืืฉืึทืืืื ืื ืฉืคืืืื ืคึฟืึทืจ ืื ืขืจืฉืืขืจ ืืึธื ืืื ืคึฟืึทืจ ืืขืืขืจ ืืืืึทืืขืจ ืืื ืื. ืขืืืขืืข ืฉืคืืืื ืคืื ืืขืจ ืขืจืฉืืขืจ ืคึผืจืืื ืืืคึผ ืืืื ืืืื ืื ืืืืึทืืืืขื ืฆื ื ืึทื ืืขืืขืจ ืืึธื; ืืืืขืจ ืืืขืจื ืืื ืึทื ืืืคืืื ื. ืื ืืขืจืข ืืึทื ื ืืืืคึผืก ืืืื ืฉืืขื ืืืง ืืืื ืืึทืฉืืืื ืฆื 0. ืขืก ืืขื ืขื ืืืื ืฉืคืืืื ืืืึธืก ืืึทืจืคื ืึท ืงืึทืืืืื ื ืฆืืืึทื ื - ืืืฉื, cumVolume ืืืื ืืืื ืงืึทืคึผืื ืคืื ืื ืคืจืืขืจืืืงืข ืืื ืื, ืืื ืคึฟืึทืจ ืืขืจ ืขืจืฉืืขืจ ืฉืืขืื ืฆื 0. ืืึธืืืจ ืฉืืขืื ืึทืืข ืื ืคึผืึทืจืึทืืขืืขืจืก ื ืืฆื ืื ืืืขืจืืขืจืืื ืืึทืื ืืืคึผ (ืึทื ืึทืืึธื ืฆื ืึท ืจืขืงืึธืจื):
// list ! list โ ัะพะทะดะฐัั ัะปะพะฒะฐัั, 0n โ float null, 0N โ long null, `sym โ ัะธะฟ ัะธะผะฒะพะป, `sym1`sym2 โ ัะฟะธัะพะบ ัะธะผะฒะพะปะพะฒ
initWith:`sym`time`high`low`firstPrice`lastPrice`firstSize`lastSize`numTrades`volume`pvolume`turnover`avgPrice`avgSize`vwap`cumVolume!(`;00:00;0n;0n;0n;0n;0N;0N;0;0;0.0;0.0;0n;0n;0n;0);
aggCols:reverse key[initWith] except `sym`time; // ัะฟะธัะพะบ ะฒัะตั
ะฒััะธัะปัะตะผัั
ะบะพะปะพะฝะพะบ, reverse ะพะฑัััะฝะตะฝ ะฝะธะถะต
ืืื ืฆืืืขืืขืื ืกืื ืืื ืฆืืื ืฆื ืืขื ืืืขืจืืขืจืืื ืคึฟืึทืจ ืงืึทื ืืืื ืืึทื ืก, ืืืฆื initWith ืืื ืึท ืคืึทืจืืืง ืฉืืจื ืคืื ืื ืืขืฆื ืึทืืืจืขืืึทืืขื ืืืฉ, ืืื ืขืก ืืืืืื ืฆื ืฉืืขืื ืื ืจืืืืืง ืกืื ืืื ืฆืืื. ืืืจ ืงืขื ืขื ื ืืฆื ืขืก ืฆื ืืืืื ื ืืึทืข ืจืึธืื ืฆื ืึท ืืืฉ.
ืืืจ ืืืขืื ืืึทืจืคึฟื aggCols ืืืขื ืืืจ ืฉืึทืคึฟื ืึท ืึทืืืจืขืืึทืืืึธื ืคืื ืงืฆืืข. ืื ืจืฉืืื ืืืื ืืืื ืื ืืืขืจืืื ืจืขืื ืฆื ืืขืจ ืกืืจ ืืื ืืืึธืก ืืืืกืืจืืงื ืืื Q ืืขื ืขื ืขืืืึทืืืึทืืขื (ืคืื ืจืขืื ืฆื ืืื ืงืก). ืืขืจ ืฆืื ืืื ืฆื ืขื ืฉืืจ ืึทื ืื ืืขืืฉืื ืืืื ืคืื ืืืื ืฆื ืงืืืืืึธืืืืข, ืืืืึทื ืขืืืขืืข ืฉืคืืืื ืึธืคืขื ืืขื ืืืืฃ ืื ืคืจืืขืจืืืงืข.
ืฉืคืืืื ืืืึธืก ืืึทืจืคึฟื ืฆื ืืืื ืงืึทืคึผืื ืฆื ืึท ื ืืึทืข ืืื ืื ืคืื ืื ืคืจืืขืจืืืงืข, ืื ืกืื ืืืึทื ืืื ืฆืืืขืืขืื ืคึฟืึทืจ ืงืึทื ืืืื ืืึทื ืก:
rollColumns:`sym`cumVolume;
ืืืฆื ืืึธืืืจ ืฆืขืืืืื ืื ืฉืคืืืื ืืื ืืจืืคึผืขืก ืืืื ืืื ืืื ืืึธื ืืืื ืืขืจืืืึทื ืืืงื. ืืจืืึท ืืืืคึผืก ืงืขื ืขื ืืืื ืืื ืืขืจืฉืืืื:
- ืึทืงืืืืืึทืืืืืขืจื (ืืึทื ื, ืืืกืงืขืจ, ..) - ืืืจ ืืืื ืืืืื ืื ืื ืงืึทืืื ื ืืืขืจื ืฆื ืื ืคืจืืขืจืืืงืข.
- ืืื ืึท ืกืคึผืขืฆืืขื ืคืื ื (ืืืื, ื ืืืขืจืืง, ..) - ืืขืจ ืขืจืฉืืขืจ ืืืขืจื ืืื ืื ืืื ืื ืืื ืืขื ืืืขื ืคืื ืื ืื ืงืึทืืื ื ืืึทืื, ืื ืื ืืื ืืขื ืขื ืงืึทืืงืืึทืืืืืื ืืื ืื ืคึฟืื ืงืฆืืข.
- ืื ืืื. ืฉืืขื ืืืง ืงืึทืืงืืึทืืืืืื ื ืืฆื ืึท ืคึฟืื ืงืฆืืข.
ืืึธืืืจ ืืขืคืื ืืจื ืืืขืจืืึทืืึทืื ืคึฟืึทืจ ืื ืงืืืกื:
accumulatorCols:`numTrades`volume`pvolume`turnover;
specialCols:`high`low`firstPrice`firstSize;
ืืขืืฉืื ืกืืจ
ืืืจ ืืืขืื ืืขืจืืืึทื ืืืงื ืื ืืขืืืื ืืึทื ืืืฉ ืืื ืฆืืืื ืกืืึทืืขืก. ืคึฟืึทืจ ืขืคืขืงืืืืืงืืึทื, ืืืจ ืขืจืฉืืขืจ ืืึทื ืฉืจืืืคึผื ืื ืื ืงืึทืืื ื ืืืฉ ืึทืืื ืึทื ืขืก ืืื ืืืืื ืืืื ืจืืืขืจื ืคึฟืึทืจ ืืขืืขืจ ืืึทืจืึทืงืืขืจ ืืื ืืื ืื. ืืขืจ ืคืึทืงื ืึทื ืึทืืข ืืื ืืืขืจ ืคืึทื ืืงืฉืึทื ื ืืขื ืขื ืื ืงืจืึทืืขื ืืึทื ืืื ืึทืกืกืึธืกืืึทืืืืืข ืืขืจืึทื ืืื ืึทื ืืขืจ ืจืขืืืืืึทื ืคืื ืืขื ื ืึธื ืฉืจืื ืืืขื ื ืืฉื ืืืืฉื. ืืืจ ืงืขื ืืึทื ืฉืจืืืคึผื ืื ืืืฉ ืืื ืกืขืืขืงืืืจื:
select high:max price, low:min price โฆ by sym,time.minute from table
ืืขื ืืืคึฟื ืืื ืึท ืืืกืึธืจื - ืื ืกืืื ืคืื ืงืึทืืงืืึทืืืืืื ืฉืคืืืื ืืื ืคึผืจืขืืขืคืื ืขื. ืฆืื ืืืืง, ืืื ืง, ืืืืกืงืืืึทืื ืืื ืืืื ืืืคึผืืึทืืขื ืึทื ืืื ืึท ืคืื ืงืฆืืข ืืื ืืืจ ืงืขื ืขื ืคืึทืจืืืึทืื ืืื ืึทืืืงืึทืืื ืืืฉืืคื ืึทืจืืืืขื ืื:
?[table;whereClause;byClause;selectClause]
ืืื ืืืขื ื ืืฉื ืืึทืฉืจืืึทืื ืืื ืืขืืึทื ืืขื ืคึฟืึธืจืืึทื ืคืื ืื ืึทืจืืืืขื ืื; ืืื ืืื ืืืขืจ ืคืึทื, ืืืืื ืืืจื ืืื ืืืืกืงืืืึทืื ืืืืกืืจืืงื ืืืขื ืืืื ื ืื-ืืจืืืืืึทื ืืื ืืื ืืึธื ืืืื ืืืงืฉืึทื ืขืจืื ืคืื ืื ืคืึธืจืขื ืฉืคืืืื! ืืืืกืืจืืงื. ืืืื, ืื ืฉืจืื ืืงืื ื ืคึฟืื ืงืฆืืข ืงืขื ืขื ืืืื ืืืคืืื ื ืืื ืืืื:
selExpression:`high`low`firstPrice`lastPrice`firstSize`lastSize`numTrades`volume`pvolume`turnover!parse each ("max price";"min price";"first price";"last price";"first size";"last size";"count i";"sum size";"sum price";"sum price*size"); // each ััะพ ััะฝะบัะธั map ะฒ Q ะดะปั ะพะดะฝะพะณะพ ัะฟะธัะบะฐ
preprocess:?[;();`sym`time!`sym`time.minute;selExpression];
ืคึฟืึทืจ ืงืืขืจืืื, ืืื ืืขืืืืื ื ืื ืคึผืึทืจืก ืคึฟืื ืงืฆืืข, ืืืึธืก ืืืจื ืก ืึท ืฉืืจืืงื ืืื ืึท Q ืืืืกืืจืืง ืืื ืึท ืืืขืจื ืืืึธืก ืงืขื ืขื ืืืื ืืืจืืืขืืื ืืขื ืฆื ืื ืขืืืึทื ืคึฟืื ืงืฆืืข ืืื ืืืึธืก ืืื ืคืืจืืื ืื ืืื ืื ืคืื ืงืฆืืข ืืืืกืงืืืึทืื. ืืืื ืืึธื ืึทื ืคึผืจืขืคึผืจืึธืกืขืกืก ืืื ืืืคืืื ื ืืื ืึท ืคึผืจืืืขืงืฆืืข (ื"ื ืึท ืคึฟืื ืงืฆืืข ืืื ืืืื ืืืคืืื ื ืึทืจืืืืขื ืื) ืคืื ืื ืืืืกืงืืืึทืื ืคึฟืื ืงืฆืืข, ืืืื ืึทืจืืืืขื ื (ืื ืืืฉ) ืืื ืคืขืื ืืืง. ืืืื ืืืจ ืฆืืืืืื ืคึผืจืขืคึผืจืึธืกืขืกืก ืฆื ืึท ืืืฉ, ืืืจ ืืืขืื ืืึทืงืืืขื ืึท ืงืึทืืคึผืจืขืกื ืืืฉ.
ืื ืจืืข ืืื ืข ืืื ืึทืคึผืืืืืื ื ืื ืึทืืืจืขืืึทืืขื ืืืฉ. ืืื ืก ืขืจืฉืืขืจ ืฉืจืืึทืื ืื ืึทืืืขืจืืืึทื ืืื ืคึผืกืขืืืืึธืงืึธืืข:
for each sym in inputTable
idx: row index in agg table for sym+currentTime;
aggTable[idx;`high]: aggTable[idx;`high] | inputTable[sym;`high];
aggTable[idx;`volume]: aggTable[idx;`volume] + inputTable[sym;`volume];
โฆ
ืืื Q, ืขืก ืืื ืคึผืจืึธืกื ืฆื ื ืืฆื ืืึทืคึผืข / ืจืขืืืฆืืจื ืคืึทื ืืงืฉืึทื ื ืึทื ืฉืืึธื ืคืื ืืืคึผืก. ืืืขืจ ืืื ื Q ืืื ืึท ืืืขืงืืึธืจ ืฉืคึผืจืึทื ืืื ืืืจ ืงืขื ืขื ืืืืื ืฆืืืืืื ืึทืืข ืึทืคึผืขืจืืืฉืึทื ื ืฆื ืึทืืข ืกืืืืึธืืก ืืื ืึทืืึธื, ืืขืืึธืื ืฆื ืึท ืขืจืฉืืขืจ ืืขืจื ืขื ืืขืจื ืืืจ ืงืขื ืขื ืืึธื ืึธื ืึท ืฉืืืืฃ ืืื ืึทืืข, ืืืจืืคืืจื ืึทืคึผืขืจืืืฉืึทื ื ืืืืฃ ืึทืืข ืกืืืืึธืืก ืืื ืึทืืึธื:
idx:calcIdx inputTable;
row:aggTable idx;
aggTable[idx;`high]: row[`high] | inputTable`high;
aggTable[idx;`volume]: row[`volume] + inputTable`volume;
โฆ
ืึธืืขืจ ืืืจ ืงืขื ืขื ืืืื ืืืืึทืืขืจ, Q ืืื ืึท ืืื ืฆืืง ืืื ืืึธืจ ืฉืืึทืจืง ืึธืคึผืขืจืึทืืึธืจ - ืื ืืขื ืขืจืึทืืืืขื ืึทืกืืื ืืึทื ื ืึธืคึผืขืจืึทืืึธืจ. ืขืก ืึทืืึทืื ืืืจ ืฆื ืืืืฉื ืึท ืกืืื ืคืื ืืืึทืืืขืก ืืื ืึท ืงืึธืืคึผืืขืงืก ืืึทืื ืกืืจืืงืืืจ ืืื ืึท ืจืฉืืื ืคืื ืื ืืืกืื, ืคืึทื ืืงืฉืึทื ื ืืื ืึทืจืืืืขื ืื. ืืื ืืื ืืืขืจ ืคืึทื ืขืก ืงืืงื ืืื ืืึธืก:
idx:calcIdx inputTable;
rows:aggTable idx;
// .[target;(idx0;idx1;..);function;argument] ~ target[idx 0;idx 1;โฆ]: function[target[idx 0;idx 1;โฆ];argument], ะฒ ะฝะฐัะตะผ ัะปััะฐะต ััะฝะบัะธั โ ััะพ ะฟัะธัะฒะฐะธะฒะฐะฝะธะต
.[aggTable;(idx;aggCols);:;flip (row[`high] | inputTable`high;row[`volume] + inputTable`volume;โฆ)];
ืฆืื ืืึทืืืืขืจื, ืฆื ืืึทืฉืืืืขื ืฆื ืึท ืืืฉ ืืืจ ืืึทืจืคึฟื ืึท ืจืฉืืื ืคืื ืจืึธืื, ื ืืฉื ืฉืคืืืื, ืืื ืืืจ ืืึธืื ืฆื ืืจืึทื ืกืคึผืึธืกืืจื ืื ืืึทืืจืืฅ (ืจืฉืืื ืคืื ืฉืคืืืื ืฆื ืจืฉืืื ืคืื ืจืึธืื) ืืื ืื ืคืืืคึผ ืคึฟืื ืงืฆืืข. ืืึธืก ืืื ืืืึทืขืจ ืคึฟืึทืจ ืึท ืืจืืืก ืืืฉ, ืึทืืื ืึทื ืฉืืึธื, ืืืจ ืฆืืืืืื ืึท ืืขื ืขืจืึทืืืืขื ืึทืกืืื ืืึทื ื ืฆื ืืขืืขืจ ืืืึทื ืกืขืคึผืขืจืึทืืื, ื ืืฆื ืื ืืึทืคึผืข ืคืื ืงืฆืืข (ืืืึธืก ืงืืงื ืืื ืึท ืึทืคึผืึธืกืืจืึธืคืข):
.[aggTable;;:;]'[(idx;)each aggCols; (row[`high] | inputTable`high;row[`volume] + inputTable`volume;โฆ)];
ืืืจ ืืืืืขืจ ื ืืฆื ืคึฟืื ืงืฆืืข ืคึผืจืืืขืงืฆืืข. ืืืื ืืึธื ืึทื ืืื ืง, ืงืจืืืืืื ื ืึท ืจืฉืืื ืืื ืืืื ืึท ืคึฟืื ืงืฆืืข ืืื ืืืจ ืงืขื ืขื ืจืืคื ืขืก ื ืืฆื ืื ืืขืืขืจ (ืืึทืคึผืข) ืคึฟืื ืงืฆืืข ืฆื ืืึทืงืืืขื ืึท ืจืฉืืื ืคืื ืจืฉืืืืช.
ืฆื ืขื ืฉืืจ ืึทื ืื ืกืืื ืคืื ืงืึทืืงืืึทืืืืืื ืฉืคืืืื ืืื ื ืืฉื ืคืึทืจืคืขืกืืืงื, ืืืจ ืืืขืื ืืึทืื ืื ืืืืื ืืืืกืืจืืง ืืื ืึทืืืงืึทืืื. ืืื ืก ืขืจืฉืืขืจ ืืขืคืื ืืจื ืคืึทื ืืงืฉืึทื ื ืฆื ืจืขืืขื ืขื ืืขืืขืจ ืืืึทื, ื ืืฆื ืื ืจืืืขืจื ืืื ืื ืคึผ ืืืขืจืืึทืืึทืื ืฆื ืึธืคึผืฉืืงื ืฆื ืื ืึทืืืจืขืืึทืืขื ืืื ืึทืจืืึทื ืฉืจืืึทื ืืึทืื:
aggExpression:`high`low`firstPrice`lastPrice`firstSize`lastSize`avgPrice`avgSize`vwap`cumVolume!
("row[`high]|inp`high";"row[`low]&inp`low";"row`firstPrice";"inp`lastPrice";"row`firstSize";"inp`lastSize";"pvolume%numTrades";"volume%numTrades";"turnover%volume";"row[`cumVolume]+inp`volume");
ืขืืืขืืข ืฉืคืืืื ืืขื ืขื ืกืคึผืขืฆืืขื; ืืืืขืจ ืขืจืฉืืขืจ ืืืขืจื ืืึธื ื ืืฉื ืืืื ืงืึทืืงืืึทืืืืืื ืืืจื ืื ืคึฟืื ืงืฆืืข. ืืืจ ืงืขื ืขื ืืึทืฉืืืืขื ืึทื ืขืก ืืื ืืขืจ ืขืจืฉืืขืจ ืืืจื ืื ืจืืืขืจื [`ื ืืืืจืึทืืขืก] ืืืึทื - ืืืื ืขืก ืึผืืื 0, ืื ืืืขืจื ืืื ืขืจืฉืืขืจ. ืง ืืื ืึท ืืืืกืงืืืึทืื ืคึฟืื ืงืฆืืข - ?[Boolean list;list1;list2] - ืืืึธืก ืกืึทืืขืงืฅ ืึท ืืืขืจื ืคืื ืจืฉืืื 1 ืึธืืขืจ 2 ืืืคึผืขื ืืื ื ืืืืฃ ืื ืฆืืฉืืึทื ื ืืื ืืขืจ ืขืจืฉืืขืจ ืึทืจืืืืขื ื:
// high -> ?[isFirst;inp`high;row[`high]|inp`high]
// @ - ัะพะถะต ะพะฑะพะฑัะตะฝะฝะพะต ะฟัะธัะฒะฐะธะฒะฐะฝะธะต ะดะปั ัะปััะฐั ะบะพะณะดะฐ ะธะฝะดะตะบั ะฝะตะณะปัะฑะพะบะธะน
@[`aggExpression;specialCols;{[x;y]"?[isFirst;inp`",y,";",x,"]"};string specialCols];
ืืึธ ืืื ืืขืจืืคื ืึท ืืขื ืขืจืึทืืืืขื ืึทืกืืื ืืึทื ื ืืื ืืืื ืคึฟืื ืงืฆืืข (ืึทื ืืืืกืืจืืง ืืื ืืขืืจืืึทืืื ืืจืืืกืึทื). ืขืก ืืืงืืื ืื ืงืจืึทื ื ืืืขืจื (ืืขืจ ืขืจืฉืืขืจ ืึทืจืืืืขื ื) ืืื ืึทื ื ืึธื ืึทืจืืืืขื ื, ืืืึธืก ืืื ืคืึธืจื ืืื ืื 4 ืคึผืึทืจืึทืืขืืขืจ.
ืืึธืืืจ ืืืืื ืืึทืืึทืจืืืข ืกืคึผืืงืขืจื ืกืขืคึผืขืจืึทืืื, ืืืืึทื ืื ืคืื ืงืฆืืข ืืื ืื ืืขืืืข ืคึฟืึทืจ ืืื:
// volume -> row[`volume]+inp`volume
aggExpression[accumulatorCols]:{"row[`",x,"]+inp`",x } each string accumulatorCols;
ืืึธืก ืืื ืึท ื ืึธืจืืึทื ืึทืกืืื ืืึทื ื ืืืื ืง ืกืืึทื ืืึทืจืืก, ืึธืืขืจ ืืื ืืึทืฉืืืืขื ืึท ืจืฉืืื ืคืื ืืืึทืืืขืก ืืื ืึทืืึธื. ืฆืื ืกืืฃ, ืืึธืื ืืื ืื ืืึทืื ืื ืืืืคึผื ืคึฟืื ืงืฆืืข:
// ":",/:aggExprs ~ map[{":",x};aggExpr] => ":row[`high]|inp`high" ะฟัะธัะฒะพะธะผ ะฒััะธัะปะตะฝะฝะพะต ะทะฝะฐัะตะฝะธะต ะฟะตัะตะผะตะฝะฝะพะน, ะฟะพัะพะผั ััะพ ะฝะตะบะพัะพััะต ะบะพะปะพะฝะบะธ ะทะฐะฒะธััั ะพั ัะถะต ะฒััะธัะปะตะฝะฝัั
ะทะฝะฐัะตะฝะธะน
// string[cols],'exprs ~ map[,;string[cols];exprs] => "high:row[`high]|inp`high" ะทะฐะฒะตััะธะผ ัะพะทะดะฐะฝะธะต ะฟัะธัะฒะฐะธะฒะฐะฝะธั. ,โ ัะฐััะธััะพะฒัะฒะฐะตััั ะบะฐะบ map[concat]
// ";" sv exprs โ String from Vector (sv), ัะพะตะดะธะฝัะตั ัะฟะธัะพะบ ัััะพะบ ะฒััะฐะฒะปัั โ;โ ะฟะพััะตะดะธะฝะต
updateAgg:value "{[aggTable;idx;inp] row:aggTable idx; isFirst_0=row`numTrades; .[aggTable;;:;]'[(idx;)each aggCols;(",(";"sv string[aggCols],'":",/:aggExpression aggCols),")]}";
ืืื ืืขื ืืืืกืืจืืง, ืืื ืืื ืึทืืืงืึทืืื ืฉืึทืคึฟื ืึท ืคึฟืื ืงืฆืืข ืคืื โโืึท ืฉืืจืืงื ืืืึธืก ืึผืืื ืื ืืืืกืืจืืง ืืื ืืขืืขืื ืืืืื. ืืขืจ ืจืขืืืืืึทื ืืืขื ืงืืงื ืืื ืืึธืก:
{[aggTable;idx;inp] rows:aggTable idx; isFirst_0=row`numTrades; .[aggTable;;:;]'[(idx;)each aggCols ;(cumVolume:row[`cumVolume]+inp`cumVolume;โฆ ; high:?[isFirst;inp`high;row[`high]|inp`high])]}
ืื ืืืึทื ืืคืฉืืฆืื ื ืกืืจ ืืื ืื ืืืขืจืืื ืืืืึทื ืืื Q ืื ืืคืฉืืฆืื ื ืกืืจ ืืื ืคืื ืจืขืื ืฆื ืืื ืงืก.
ืืืฆื ืืืจ ืืึธืื ืฆืืืื ืืืืคึผื ืคืึทื ืืงืฉืึทื ื ื ืืืืืง ืคึฟืึทืจ ืืฉืืื ืืช, ืืืจ ื ืึธืจ ืืึทืจืคึฟื ืฆื ืืืืื ืึท ืืืกื ืื ืคืจืึทืกืืจืึทืงืืฉืขืจ ืืื ืื ืืื ืกื ืืื ืืจืืื.
ืืขืฆื ืืจืื
ืืืจ ืืึธืื ืคึผืจืขืคึผืจืึธืกืขืกืก ืืื ืืขืจืืืึทื ืืืงืืึทื ืคืึทื ืืงืฉืึทื ื ืืืึธืก ืืึธื ืึทืืข ืื ืึทืจืืขื. ืืืขืจ ืขืก ืืื ื ืึธื ื ืืืืืง ืฆื ืขื ืฉืืจ ืื ืจืืืืืง ืืืขืจืืึทื ื ืืืจื ืืื ืื ืืื ืจืขืืขื ืขื ืื ืืขืงืกืื ืคึฟืึทืจ ืึทืืืจืขืืึทืืืึธื. ืขืจืฉืืขืจ ืคืื ืึทืืข, ืืึธืื ืืื ืื ืืขืคืื ืืจื ืื ืื ืื ืคึฟืื ืงืฆืืข:
init:{
tradeAgg:: 0#enlist[initWith]; // ัะพะทะดะฐะตะผ ะฟััััั ัะธะฟะธะทะธัะพะฒะฐะฝะฝัั ัะฐะฑะปะธัั, enlist ะฟัะตะฒัะฐัะฐะตั ัะปะพะฒะฐัั ะฒ ัะฐะฑะปะธัั, ะฐ 0# ะพะทะฝะฐัะฐะตั ะฒะทััั 0 ัะปะตะผะตะฝัะพะฒ ะธะท ะฝะตะต
currTime::00:00; // ะฝะฐัะฝะตะผ ั 0, :: ะพะทะฝะฐัะฐะตั, ััะพ ะฟัะธัะฒะฐะธะฒะฐะฝะธะต ะฒ ะณะปะพะฑะฐะปัะฝัั ะฟะตัะตะผะตะฝะฝัั
currSyms::`u#`symbol$(); // `u# - ะฟัะตะฒัะฐัะฐะตั ัะฟะธัะพะบ ะฒ ะดะตัะตะฒะพ, ะดะปั ััะบะพัะตะฝะธั ะฟะพะธัะบะฐ ัะปะตะผะตะฝัะพะฒ
offset::0; // ะธะฝะดะตะบั ะฒ tradeAgg, ะณะดะต ะฝะฐัะธะฝะฐะตััั ัะตะบััะฐั ะผะธะฝััะฐ
rollCache:: `sym xkey update `u#sym from rollColumns#tradeAgg; // ะบัั ะดะปั ะฟะพัะปะตะดะฝะธั
ะทะฝะฐัะตะฝะธะน roll ะบะพะปะพะฝะพะบ, ัะฐะฑะปะธัะฐ ั ะบะปััะพะผ sym
}
ืืืจ ืืืขืื ืืืื ืืขืคืื ืืจื ืื ืืขืื ืคึฟืื ืงืฆืืข, ืืืึธืก ืืืขื ืืืืฉื ืื ืงืจืึทื ื ืืื ืื:
roll:{[tm]
if[currTime>tm; :init[]]; // ะตัะปะธ ะฟะตัะตะฒะฐะปะธะปะธ ะทะฐ ะฟะพะปะฝะพัั, ัะพ ะฟัะพััะพ ะฒัะทะพะฒะตะผ init
rollCache,::offset _ rollColumns#tradeAgg; // ะพะฑะฝะพะฒะธะผ ะบัั โ ะฒะทััั roll ะบะพะปะพะฝะบะธ ะธะท aggTable, ะพะฑัะตะทะฐัั, ะฒััะฐะฒะธัั ะฒ rollCache
offset::count tradeAgg;
currSyms::`u#`$();
}
ืืืจ ืืึทืจืคึฟื ืึท ืคึฟืื ืงืฆืืข ืฆื ืืืืื ื ืืึทืข ืืืชืืืช:
addSyms:{[syms]
currSyms,::syms; // ะดะพะฑะฐะฒะธะผ ะฒ ัะฟะธัะพะบ ะธะทะฒะตััะฝัั
// ะดะพะฑะฐะฒะธะผ ะฒ ัะฐะฑะปะธัั sym, time ะธ rollColumns ะฒะพัะฟะพะปัะทะพะฒะฐะฒัะธัั ะพะฑะพะฑัะตะฝะฝัะผ ะฟัะธัะฒะฐะธะฒะฐะฝะธะตะผ.
// ะคัะฝะบัะธั ^ ะฟะพะดััะฐะฒะปัะตั ะทะฝะฐัะตะฝะธั ะฟะพ ัะผะพะปัะฐะฝะธั ะดะปั roll ะบะพะปะพะฝะพะบ, ะตัะปะธ ัะธะผะฒะพะปะฐ ะฝะตั ะฒ ะบััะต. value flip table ะฒะพะทะฒัะฐัะฐะตั ัะฟะธัะพะบ ะบะพะปะพะฝะพะบ ะฒ ัะฐะฑะปะธัะต.
`tradeAgg upsert @[count[syms]#enlist initWith;`sym`time,cols rc;:;(syms;currTime), (initWith cols rc)^value flip rc:rollCache ([] sym: syms)];
}
ืืื ืืขืกืึธืฃ, ืื ืืคึผื ืคึฟืื ืงืฆืืข (ืืขืจ ืืจืืืืฆืืื ืขืืขืจ ื ืึธืืขื ืคึฟืึทืจ ืืขื ืคึฟืื ืงืฆืืข ืคึฟืึทืจ ืง ืืึทืืื ืื ืืก), ืืืึธืก ืืื ืืขืจืืคื ืืืจื ืืขื ืงืืืขื ื ืฆื ืืืืื ืืึทืื:
upd:{[tblName;data] // tblName ะฝะฐะผ ะฝะต ะฝัะถะฝะพ, ะฝะพ ะพะฑััะฝะพ ัะตัะฒะธั ะพะฑัะฐะฑะฐััะฒะฐะตั ะฝะตัะบะพะปัะบะพ ัะฐะฑะปะธั
tm:exec distinct time from data:() xkey preprocess data; // preprocess & calc time
updMinute[data] each tm; // ะดะพะฑะฐะฒะธะผ ะดะฐะฝะฝัะต ะดะปั ะบะฐะถะดะพะน ะผะธะฝััั
};
updMinute:{[data;tm]
if[tm<>currTime; roll tm; currTime::tm]; // ะฟะพะผะตะฝัะตะผ ะผะธะฝััั, ะตัะปะธ ะฝะตะพะฑั
ะพะดะธะผะพ
data:select from data where time=tm; // ัะธะปัััะฐัะธั
if[count msyms:syms where not (syms:data`sym)in currSyms; addSyms msyms]; // ะฝะพะฒัะต ัะธะผะฒะพะปั
updateAgg[`tradeAgg;offset+currSyms?syms;data]; // ะพะฑะฝะพะฒะธะผ ะฐะณัะตะณะธัะพะฒะฐะฝะฝัั ัะฐะฑะปะธัั. ะคัะฝะบัะธั ? ะธัะตั ะธะฝะดะตะบั ัะปะตะผะตะฝัะพะฒ ัะฟะธัะบะฐ ัะฟัะฐะฒะฐ ะฒ ัะฟะธัะบะต ัะปะตะฒะฐ.
};
ืึทื ืก ืึทืืข. ืืึธ ืืื ืื ืืึทื ืฅ ืงืึธื ืคืื ืืื ืืืขืจ ืืื ืกื, ืืื ืฆืืืขืืืื, ืืืืื ืึท ืืืกื ืฉืืจืืช:
initWith:`sym`time`high`low`firstPrice`lastPrice`firstSize`lastSize`numTrades`volume`pvolume`turnover`avgPrice`avgSize`vwap`cumVolume!(`;00:00;0n;0n;0n;0n;0N;0N;0;0;0.0;0.0;0n;0n;0n;0);
aggCols:reverse key[initWith] except `sym`time;
rollColumns:`sym`cumVolume;
accumulatorCols:`numTrades`volume`pvolume`turnover;
specialCols:`high`low`firstPrice`firstSize;
selExpression:`high`low`firstPrice`lastPrice`firstSize`lastSize`numTrades`volume`pvolume`turnover!parse each ("max price";"min price";"first price";"last price";"first size";"last size";"count i";"sum size";"sum price";"sum price*size");
preprocess:?[;();`sym`time!`sym`time.minute;selExpression];
aggExpression:`high`low`firstPrice`lastPrice`firstSize`lastSize`avgPrice`avgSize`vwap`cumVolume!("row[`high]|inp`high";"row[`low]&inp`low";"row`firstPrice";"inp`lastPrice";"row`firstSize";"inp`lastSize";"pvolume%numTrades";"volume%numTrades";"turnover%volume";"row[`cumVolume]+inp`volume");
@[`aggExpression;specialCols;{"?[isFirst;inp`",y,";",x,"]"};string specialCols];
aggExpression[accumulatorCols]:{"row[`",x,"]+inp`",x } each string accumulatorCols;
updateAgg:value "{[aggTable;idx;inp] row:aggTable idx; isFirst_0=row`numTrades; .[aggTable;;:;]'[(idx;)each aggCols;(",(";"sv string[aggCols],'":",/:aggExpression aggCols),")]}"; / '
init:{
tradeAgg::0#enlist[initWith];
currTime::00:00;
currSyms::`u#`symbol$();
offset::0;
rollCache:: `sym xkey update `u#sym from rollColumns#tradeAgg;
};
roll:{[tm]
if[currTime>tm; :init[]];
rollCache,::offset _ rollColumns#tradeAgg;
offset::count tradeAgg;
currSyms::`u#`$();
};
addSyms:{[syms]
currSyms,::syms;
`tradeAgg upsert @[count[syms]#enlist initWith;`sym`time,cols rc;:;(syms;currTime),(initWith cols rc)^value flip rc:rollCache ([] sym: syms)];
};
upd:{[tblName;data] updMinute[data] each exec distinct time from data:() xkey preprocess data};
updMinute:{[data;tm]
if[tm<>currTime; roll tm; currTime::tm];
data:select from data where time=tm;
if[count msyms:syms where not (syms:data`sym)in currSyms; addSyms msyms];
updateAgg[`tradeAgg;offset+currSyms?syms;data];
};
ืืขืกืืื ื
ืืื ืก ืงืึธื ืืจืึธืืืจื ืื ืคืึธืจืฉืืขืืื ื ืคืื ืื ืืื ืกื. ืฆื ืืึธื ืืึธืก, ืืึธืื ืืื ืื ืืืืคื ืขืก ืืื ืึท ืืึทืืื ืืขืจ ืคึผืจืึธืฆืขืก (ืฉืืขืื ืื ืงืึธื ืืื ืื service.q ืืขืงืข) ืืื ืจืืคื ืื init ืคืื ืงืฆืืข:
q service.q โp 5566
q)init[]
ืืื ืื ืื ืืขืจ ืงืึทื ืกืึธืื, ืึธื ืืืื ืื ืจืืข ืง ืคึผืจืึธืฆืขืก ืืื ืคืึทืจืืื ืื ืฆื ืืขืจ ืขืจืฉืืขืจ:
h:hopen `:host:5566
h:hopen 5566 // ะตัะปะธ ะพะฑะฐ ะฝะฐ ะพะดะฝะพะผ ั
ะพััะต
ืขืจืฉืืขืจ, ืืึธืื ืืื ืื ืืึทืื ืึท ืจืฉืืื ืคืื ืกืืืืึธืืก - 10000 ืืจืขืงืืขื ืืื ืืืืื ืึท ืคึฟืื ืงืฆืืข ืฆื ืฉืึทืคึฟื ืึท ืืจืึทืค - ืืืฉ. ืืื ืืขืจ ืฆืืืืืืขืจ ืงืึทื ืกืึธืื:
syms:`IBM`AAPL`GOOG,-9997?`8
rnd:{[n;t] ([] sym:n?syms; time:t+asc n#til 25; price:n?10f; size:n?10)}
ืืื ืฆืืืขืืขืื ืืจืื ืคืึทืงืืืฉ ืกืืืืึธืืก ืฆื ืืขืจ ืจืฉืืื ืฆื ืืึทืื ืขืก ืืจืื ืืขืจ ืฆื ืงืืงื ืคึฟืึทืจ ืืื ืืื ืื ืืืฉ. ืื rnd ืคึฟืื ืงืฆืืข ืงืจืืืืฅ ืึท ืืจืึทืค - ืืืฉ ืืื n ืจืึธืื, ืืื ืื ืฆืืื ืืืขืจืื ืคืื t ืฆื ื + 25 ืืืืืกืขืงืึทื ืื.
ืืืฆื ืืืจ ืงืขื ืขื ืคึผืจืืืืจื ืฆื ืฉืืงื ืืึทืื ืฆื ืื ืืื ืกื (ืืืื ืื ืขืจืฉืืขืจ ืฆืขื ืฉืขื):
{h (`upd;`trade;rnd[10000;x])} each `time$00:00 + til 60*10
ืืืจ ืงืขื ื ืงืึธื ืืจืึธืืืจื ืืื ืื ืกืขืจืืืืก ืึทื ืื ืืืฉ ืืื ืืขืจืืืึทื ืืืงื:
c 25 200
select from tradeAgg where sym=`AAPL
-20#select from tradeAgg where sym=`AAPL
ืืขืจ ืจืขืืืืืึทื:
sym|time|high|low|firstPrice|lastPrice|firstSize|lastSize|numTrades|volume|pvolume|turnover|avgPrice|avgSize|vwap|cumVolume
--|--|--|--|--|--------------------------------
AAPL|09:27|9.258904|9.258904|9.258904|9.258904|8|8|1|8|9.258904|74.07123|9.258904|8|9.258904|2888
AAPL|09:28|9.068162|9.068162|9.068162|9.068162|7|7|1|7|9.068162|63.47713|9.068162|7|9.068162|2895
AAPL|09:31|4.680449|0.2011121|1.620827|0.2011121|1|5|4|14|9.569556|36.84342|2.392389|3.5|2.631673|2909
AAPL|09:33|2.812535|2.812535|2.812535|2.812535|6|6|1|6|2.812535|16.87521|2.812535|6|2.812535|2915
AAPL|09:34|5.099025|5.099025|5.099025|5.099025|4|4|1|4|5.099025|20.3961|5.099025|4|5.099025|2919
ืืึธืืืจ ืืืฆื ืืืจืืคืืจื ืืึทืกืข ืืขืกืืื ื ืฆื ืืขืคึฟืื ืขื ืืื ืคืื ืืึทืื ืื ืกืขืจืืืืก ืงืขื ืขื ืคึผืจืึธืฆืขืก ืคึผืขืจ ืืื ืื. ืืึธืื ืืืจ ืืขืจืืึธื ืขื ืืืจ ืึทื ืืืจ ืฉืืขืื ืื ืืขืจืืืึทื ืืืงื ืืขืืึทืืขื ืฆื 25 ืืืืืกืขืงืึทื ืื. ืึทืงืงืึธืจืืื ืืื, ืื ืืื ืกื ืืืื (ืืื ืืืจืืฉื ืืืืขื) ืคึผืึทืกืืง ืืื ืืื ืืกืืขืจ 20 ืืืืืกืขืงืึทื ืื ืคึผืขืจ ืืขืจืืืึทื ืืืงื ืฆื ืืขืื ื ืืฆืขืจืก ืฆืืื ืฆื ืืขืื ืืึทืื. ืึทืจืืึทื ืื ืคืืืืขื ืืข ืืื ืื ืจืืข ืคึผืจืึธืฆืขืก:
tm:10:00:00.000
stressTest:{[n] 1 string[tm]," "; times,::h ({st:.z.T; upd[`trade;x]; .z.T-st};rnd[n;tm]); tm+:25}
start:{[n] times::(); do[4800;stressTest[n]]; -1 " "; `min`avg`med`max!(min times;avg times;med times;max times)}
4800 ืืื ืฆืืืื ืืื ืื. ืืืจ ืงืขื ืขื ืคึผืจืืืืจื ืฆื ืืืืคื ืขืจืฉืืขืจ ืคึฟืึทืจ 1000 ืจืึธืื ืืขืืขืจ 25 ืืืืืกืขืงืึทื ืื:
start 1000
ืืื ืืืื ืคืึทื, ืืขืจ ืจืขืืืืืึทื ืืื ืึทืจืื ืึท ืคึผืึธืจ ืคืื ืืืืืกืขืงืึทื ืื ืคึผืขืจ ืืขืจืืืึทื ืืืงื. ืึทืืื ืืื ืืืขื ืืื ืคืึทืจืืจืขืกืขืจื ืื ื ืืืขืจ ืคืื ืจืึธืื ืฆื 10.000:
start 10000
ืืขืจ ืจืขืืืืืึทื:
min| 00:00:00.004
avg| 9.191458
med| 9f
max| 00:00:00.030
ืืืืืขืจ, ืืึธืจื ืืฉื ืกืคึผืขืฆืืขื, ืึธืืขืจ ืืึธืก ืืื 24 ืืืืืึธื ืฉืืจืืช ืคึผืขืจ ืืื ืื, 400 ืืืืื ื ืคึผืขืจ ืกืขืงืื ืืข. ืคึฟืึทืจ ืืขืจ ืืื 25 ืืืืืกืขืงืึทื ืื, ืืขืจ ืืขืจืืืึทื ืืืงื ืกืืึธืื ืึทืจืึธืคึผ ืืืืื 5 ืืื, ืืฉืืขืืช ืืืขื ืื ืืื ืื ืืื ืืขืืืื. ืืื ืก ืคืึทืจืืจืขืกืขืจื ืฆื 100.000:
start 100000
ืืขืจ ืจืขืืืืืึทื:
min| 00:00:00.013
avg| 25.11083
med| 24f
max| 00:00:00.108
q)sum times
00:02:00.532
ืืื ืืืจ ืงืขื ืขื ืืขื, ืื ืืื ืกื ืงืขื ืขื ืงืืื ืงืึธืคึผืข, ืึธืืขืจ ืคืื ืืขืกืืืืขืื ืขืก ืืึทื ืืืืฉืื ืฆื ืืืืืื ืคืืึธืื. ืึทืืึท ืึท ืืึทื ื ืคืื ืืึทืื (240 ืจืึธืื ืคึผืขืจ ืืื ืื) ืืื ืืึธืจ ืืจืืืก; ืืื ืึทืืึท ืงืึทืกืขืก, ืขืก ืืื ืคึผืจืึธืกื ืฆื ืงืึทืืขืจ ืขืืืขืืข ืงืืึธืื ื (ืึธืืขืจ ืืคืืื ืืึทืืึทื ื ืคืื ืงืืึธืื ื) ืคืื ืื ืืื ืกื, ืืขืืขืจ ืคืื ืืืึธืก ืคึผืจืึทืกืขืกืึทื ืืืืื ืืืื ืคืื ืื ืืืชืืืช. ื ืึธื, ืืขืจ ืจืขืืืืืึทื ืืื ืืืคึผืจืขืกืืื ืคึฟืึทืจ ืึท ืื ืืขืจืคึผืจืึทืืึทื ืฉืคึผืจืึทื ืืืึธืก ืคืึธืืงืืกืื ืืคึฟืจื ืืืืฃ ืืึทืื ืกืืึธืจืืืืฉ.
ืื ืงืฉืื ืงืขื ืืืืคืฉืืืื ืืื ืฆื ืืืึธืก ืฆืืื ืืืืงืกื ื ืื-ืืื ืขืึทืจืื ืืื ืื ืืจืืืก ืคืื ืืขืืขืจ ืืขืจืืืึทื ืืืงื. ืื ืกืืื ืืื ืึทื ืื ืืึทื ืฉืจืืืคึผื ืคืื ืงืฆืืข ืืื ืคืืงืืืฉ ืึท C ืคืื ืงืฆืืข, ืืืึธืก ืืื ืคืื ืืขืจ ืขืคืขืงืืืื ืืื updateAgg. ืกืืึทืจืืื ื ืคืื ืึท ืืืืขืจ ืืขืจืืืึทื ืืืงื ืืจืืืก (ืึทืจืื 10.000), updateAgg ืจืืืฉืึทื ืืืื ืกืืขืืืข ืืื ืืขืจื ืึธื ืื ืืืจืืคืืจืื ื ืฆืืื ืืื ื ืืฉื ืึธืคืขื ืืขื ืืืืฃ ืื ืืขืจืืืึทื ืืืงื ืืจืืืก. ืขืก ืืื ืจืขืื ืฆื ืืขืจ ืคึผืจืืืืืึทื ืขืจื ืฉืจืื ืง ืึทื ืื ืืื ืกื ืืื ืืืืืืช ืฆื ืงืืฆืขืจ ืึทืืึท ืืืึทืืืืื ืคืื ืืึทืื. ืืึธืก ืืืืืืืฅ ืืื ืืืืืืืง ืขืก ืืื ืฆื ืงืืืึทืื ืื ืจืขืื ืึทืืืขืจืืืึทื ืืืขื ืืจืืขืื ืืื ืืจืืืก ืืึทืื. ืื ืื ืืขืจ ืคืื ื ืืื ืื ืจืืืืืง ืกืืึธืจืืืืฉ ืคืื ืืึทืื ืืื ืืึผืจืื. ืืืื ืื ืืึทืื ืืขื ืขื ื ืืฉื ืกืืึธืจื ืงืึธืืืื ืึทืจืื ืึธืืขืจ ืืขื ืขื ื ืืฉื ืึธืจืืขืจื ืืืจื ืฆืืึทื, ืืืจ ืืืึธืื ืืืื ืืึทืงืึทื ื ืืื ืึทืืึท ืึท ืืึทื ืืื ืึท ืืื ืงืึทืฉ ืืืก - ืืขืจ ืึทืืืขืง ืคืื ืึท ืืึผืจืื ืืืึทื ืึทืืจืขืก ืืื ืื ืคึผืจืึทืกืขืกืขืจ ืึทืืจืขืก ืงืึทืฉ. ืืืื ืคึฟืึทืจ ืึทื ืึทืืจืขืก ื ืขืื ืืืขืื 30 ืืื ืืขืจ ืืืื ื ืื ืืขืจืึธืื, ืืื ืืืื ืื ืืึทืื ืืขื ืขื ืฆืขืืืึธืจืคื, ืขืก ืงืขื ืคึผืึทืืขืืขื ืื ืืื ืกื ืขืืืขืืข ืืึธื.
ืกืึธืฃ
ืืื ืืขื ืึทืจืืืงื, ืืื ืืขืืืืื ืึทื ืื KDB + ืืื Q ืืึทืืึทืืืืก ืืขื ืขื ืคึผืึทืกืืง ื ืื ืืืืื ืคึฟืึทืจ ืกืืึธืจืื ื ืืจืืืก ืืึทืื ืืื ืืืืื ืึทืงืกืขืก ืขืก ืืืจื ืกืขืืขืงื, ืึธืืขืจ ืืืื ืคึฟืึทืจ ืงืจืืืืืื ื ืืึทืื ืคึผืจืึทืกืขืกืื ื ืืึทืืื ืื ืืก ืืืึธืก ืืขื ืขื ืืืืืขืืืืืง ืฆื ืืืืืืฉืขืกืืื ืืื ืืขืจืืขืจ ืคืื ืืืืืึทื ื ืคืื ืจืึธืื / ืืืืืืืื ืคืื ืืึทืื ืืคืืื ืืื ืืืื Q ืคึผืจืึธืฆืขืก. ืื Q ืฉืคึผืจืึทื ืืื ืึทืืึทืื ืคึฟืึทืจ ืืึธืจ ืงืึทื ืกืืืก ืืื ืขืคืขืงืืืื ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืึทืืืขืจืืืึทืื ืฉืืึทืืืช ืฆื ืืึทืื ืคึผืจืึทืกืขืกืื ื ืจืขืื ืฆื ืืืื ืืืขืงืืึธืจ ื ืึทืืืจ, ืึท ืืขืืืื-ืืื SQL ืืืึทืืขืงื ืืืขืจืืขืฆืขืจ ืืื ืึท ืืืืขืจ ืืขืจืึธืื ืืึทื ื ืคืื ืืืืืืึธืืขืง ืคืึทื ืืงืฉืึทื ื.
ืืื ืืืขื ืืึธื ืึทื ืื ืืืืื ืืื ื ืึธืจ ืืืื ืคืื ืืืึธืก Q ืงืขื ืขื ืืึธื, ืขืก ืืื ืื ืืขืจืข ืืื ืฆืืง ืคึฟืขืึดืงืืืื. ืืืฉื, ืึท ืืึธืจ ืคึผืฉืื IPC ืคึผืจืึธืืึธืงืึธื ืืืึธืก ืืจืืืกืื ืื ืืจืขื ืขืฅ ืฆืืืืฉื ืืืื Q ืคึผืจืึทืกืขืกืึทื ืืื ืึทืืึทืื ืืืจ ืฆื ืคืึทืจืืื ืื ืืื ืืขืจืืขืจ ืคืื ืื ืคึผืจืึทืกืขืกืึทื ืืื ืึท ืืืื ื ืขืฅ, ืืืึธืก ืงืขื ืขื ืืืื ืืืื ืืืืฃ ืืึทืืึทื ื ืคืื ืกืขืจืืืขืจืก ืืื ืคืึทืจืฉืืืขื ืข ืืืืื ืคืื ืืขืจ ืืืขืื.
ืืงืืจ: www.habr.com