ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืคื•ืŸ ื“ื™ Q ืื•ืŸ KDB + ืฉืคึผืจืึทืš ืžื™ื˜ ื“ื™ ื‘ื™ื™ืฉืคึผื™ืœ ืคื•ืŸ ืึท ืคืึทืงื˜ื™ืฉ-ืฆื™ื™ื˜ ื“ื™ื ืกื˜

ืื™ืจ ืงืขื ื˜ ืœื™ื™ืขื ืขืŸ ื•ื•ืขื’ืŸ ื•ื•ืึธืก ื“ื™ KDB + ื‘ืึทื–ืข, ื“ื™ Q ืคึผืจืึธื’ืจืึทืžืžื™ื ื’ ืฉืคึผืจืึทืš ื–ืขื ืขืŸ, ื•ื•ืึธืก ื–ื™ื™ืขืจ ืกื˜ืจืขื ื’ืงื˜ืก ืื•ืŸ ื•ื•ื™ืงื ืึทืกืึทื– ื–ืขื ืขืŸ ืื™ืŸ ืžื™ื™ืŸ ืคืจื™ืขืจื“ื™ืงืŸ ืึทืจื˜ื™ืงืœ ืื•ืŸ ื‘ืขืงื™ืฆืขืจ ืื™ืŸ ื“ื™ ื”ืงื“ืžื”. ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ, ืžื™ืจ ื™ื ืกื˜ืจื•ืžืขื ื˜ ืึท ื“ื™ื ืกื˜ ืื•ื™ืฃ Q ื•ื•ืึธืก ื•ื•ืขื˜ ืคึผืจืึธืฆืขืก ื“ื™ ื™ื ืงืึทืžื™ื ื’ ื“ืึทื˜ืŸ ื˜ื™ื™ึทืš ืื•ืŸ ืจืขื›ืขื ืขืŸ ืคืึทืจืฉื™ื“ืŸ ืึทื’ื’ืจืขื’ืึทื˜ื™ืึธืŸ ืคืึทื ื’ืงืฉืึทื ื– ื™ืขื“ืขืจ ืžื™ื ื•ื˜ ืื™ืŸ "ืคืึทืงื˜ื™ืฉ ืฆื™ื™ื˜" ืžืึธื“ืข (ื“"ื” ืขืก ื•ื•ืขื˜ ื”ืึธื‘ืŸ ืฆื™ื™ื˜ ืฆื• ืจืขื›ืขื ืขืŸ ืึทืœืฅ ืื™ื™ื“ืขืจ ื“ืขืจ ื•ื•ื™ื™ึทื˜ืขืจ ื—ืœืง ืคื•ืŸ ื“ืึทื˜ืŸ). ื“ืขืจ ื”ื•ื™ืคึผื˜ ืฉื˜ืจื™ืš ืคื•ืŸ Q ืื™ื– ืึทื– ืขืก ืื™ื– ืึท ื•ื•ืขืงื˜ืึธืจ ืฉืคึผืจืึทืš ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืึทืจื‘ืขื˜ืŸ ื ื™ืฉื˜ ืžื™ื˜ ืื™ื™ืŸ ืึทื‘ื“ื–ืฉืขืงืฅ, ืึธื‘ืขืจ ืžื™ื˜ ื–ื™ื™ืขืจ ืขืจื™ื™ื–, ืขืจื™ื™ื– ืคื•ืŸ ืขืจื™ื™ื– ืื•ืŸ ืื ื“ืขืจืข ืงืึธืžืคึผืœืขืงืก ืึทื‘ื“ื–ืฉืขืงืฅ. ืฉืคึผืจืึทื›ืŸ ืึทื–ืึท ื•ื•ื™ Q ืื•ืŸ ื–ื™ื™ืŸ ืงืจื•ื‘ื™ื K, J, APL ื–ืขื ืขืŸ ื‘ืึทืจื™ืžื˜ ืคึฟืึทืจ ื–ื™ื™ืขืจ ืงื•ืจืฅ. ืึธืคื˜, ืึท ืคึผืจืึธื’ืจืึทื ื•ื•ืึธืก ื ืขืžื˜ ืขื˜ืœืขื›ืข ืกืงืจื™ื ื– ืคื•ืŸ ืงืึธื“ ืื™ืŸ ืึท ื‘ืึทืงืึทื ื˜ ืฉืคึผืจืึทืš ื•ื•ื™ ื–'ืื‘ื ืงืขื ืขืŸ ื–ื™ื™ืŸ ื’ืขืฉืจื™ื‘ืŸ ืื•ื™ืฃ ื–ื™ื™ ืื™ืŸ ืขื˜ืœืขื›ืข ืฉื•ืจื•ืช. ื“ืึธืก ืื™ื– ื•ื•ืึธืก ืื™ืš ื•ื•ื™ืœืŸ ืฆื• ื‘ืึทื•ื•ื™ื™ึทื–ืŸ ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ.

ืคึฟืขื™ึดืงื™ื™ื˜ืŸ ืคื•ืŸ ื“ื™ Q ืื•ืŸ KDB + ืฉืคึผืจืึทืš ืžื™ื˜ ื“ื™ ื‘ื™ื™ืฉืคึผื™ืœ ืคื•ืŸ ืึท ืคืึทืงื˜ื™ืฉ-ืฆื™ื™ื˜ ื“ื™ื ืกื˜

ื”ืงื“ืžื”

KDB + ืื™ื– ืึท ืงืึธืœื•ืžื ืขืจ ื“ืึทื˜ืึทื‘ื™ื™ืก ืคืึธื•ืงื™ืกื˜ ืื•ื™ืฃ ื–ื™ื™ืขืจ ื’ืจื•ื™ืก ืึทืžืึทื•ื ืฅ ืคื•ืŸ ื“ืึทื˜ืŸ, ืึธืจื“ืขืจื“ ืื™ืŸ ืึท ืกืคึผืขืฆื™ืคื™ืฉ ื•ื•ืขื’ (ื‘ืคึฟืจื˜ ื“ื•ืจืš ืฆื™ื™ื˜). ืขืก ืื™ื– ื’ืขื ื™ืฆื˜ ื‘ืคึฟืจื˜ ืื™ืŸ ืคื™ื ืึทื ืฆื™ืขืœ ืื™ื ืกื˜ื™ื˜ื•ืฆื™ืขืก - ื‘ืึทื ืงืก, ื™ื ื•ื•ืขืกืžืึทื ื˜ ื’ืขืœื˜, ืคืึทืจื–ื™ื›ืขืจื•ื ื’ ืงืึธืžืคึผืึทื ื™ืขืก. ื“ื™ Q ืฉืคึผืจืึทืš ืื™ื– ื“ื™ ื™ื ืขืจืœืขืš ืฉืคึผืจืึทืš ืคื•ืŸ KDB + ื•ื•ืึธืก ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื™ืคืขืงื˜ื™ื•ื•ืœื™ ืึทืจื‘ืขื˜ืŸ ืžื™ื˜ ื“ื™ ื“ืึทื˜ืŸ. ื“ื™ Q ื™ื“ืขืึธืœืึธื’ื™ืข ืื™ื– ืงื•ืจืฅ ืื•ืŸ ืขืคืขืงื˜ื™ื•ื•ืงื™ื™ึทื˜, ื‘ืฉืขืช ืงืœืขืจื™ื˜ื™ ืื™ื– ืžืงืจื™ื‘ ื’ืขื•ื•ืขืŸ. ื“ืึธืก ืื™ื– ื’ืขืจืขื›ื˜ืคืืจื˜ื™ืงื˜ ื“ื•ืจืš ื“ื™ ืคืึทืงื˜ ืึทื– ื“ื™ ื•ื•ืขืงื˜ืึธืจ ืฉืคึผืจืึทืš ื•ื•ืขื˜ ื–ื™ื™ืŸ ืฉื•ื•ืขืจ ืฆื• ืคึฟืึทืจืฉื˜ื™ื™ืŸ ืื™ืŸ ืงื™ื™ืŸ ืคืึทืœ, ืื•ืŸ ื“ื™ ื‘ืจืขื•ื•ืึทื˜ื™ ืื•ืŸ ืจื™ื˜ืฉื ืึทืก ืคื•ืŸ ื“ื™ ืจืขืงืึธืจื“ื™ื ื’ ืึทืœืึทื•ื– ืื™ืจ ืฆื• ื–ืขืŸ ืึท ืคื™ืœ ื’ืจืขืกืขืจืข ื˜ื™ื™ืœ ืคื•ืŸ ื“ื™ ืคึผืจืึธื’ืจืึทื ืื•ื™ืฃ ืื™ื™ืŸ ืคืึทืจืฉื˜ืขืœืŸ, ื•ื•ืึธืก ืœืขืกืึธืฃ ืžืื›ื˜ ืขืก ื’ืจื™ื ื’ืขืจ ืฆื• ืคึฟืึทืจืฉื˜ื™ื™ืŸ.

ืื™ืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ืžื™ืจ ื™ื ืกื˜ืจื•ืžืขื ื˜ ืึท ืคื•ืœ-ืคืœืขื“ื–ืฉื“ ืคึผืจืึธื’ืจืึทื ืื™ืŸ Q ืื•ืŸ ืื™ืจ ื–ืืœ ื•ื•ืขืœืŸ ืฆื• ืคึผืจื•ื‘ื™ืจืŸ ืขืก. ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืื™ืจ ื•ื•ืขื˜ ื“ืึทืจืคึฟืŸ ื“ื™ ืคืึทืงื˜ื™ืฉ ืง. ืื™ืจ ืงืขื ืขืŸ ืืจืืคืงืืคื™ืข ื“ื™ ืคืจื™ื™ 32-ื‘ื™ืกืœ ื•ื•ืขืจืกื™ืข ืื•ื™ืฃ ื“ื™ kx ืคื™ืจืžืข ื•ื•ืขื‘ื–ื™ื™ื˜ืœ - www.kx.com. ื“ืึธืจื˜, ืื•ื™ื‘ ืื™ืจ ื–ืขื ื˜ ืื™ื ื˜ืขืจืขืกื™ืจื˜, ืื™ืจ ื•ื•ืขื˜ ื’ืขืคึฟื™ื ืขืŸ ืจืขืคึฟืขืจืขื ืฅ ืื™ื ืคึฟืึธืจืžืึทืฆื™ืข ืื•ื™ืฃ Q, ื“ืขื ื‘ื•ืš ืง ืคึฟืึทืจ ืžืึธืจื˜ืึทืœื– ืื•ืŸ ืคืึทืจืฉื™ื“ืŸ ืึทืจื˜ื™ืงืœืขืŸ ืื•ื™ืฃ ื“ืขื ื˜ืขืžืข.

ื•ื™ืกื–ืึธื’ื•ื ื’ ืคื•ืŸ ื“ื™ ืคึผืจืึธื‘ืœืขื

ืขืก ืื™ื– ืึท ืžืงื•ืจ ื•ื•ืึธืก ืกืขื ื“ื– ืึท ื˜ื™ืฉ ืžื™ื˜ ื“ืึทื˜ืŸ ื™ืขื“ืขืจ 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;

ืื™ืฆื˜ ืœืึธืžื™ืจ ืฆืขื˜ื™ื™ืœืŸ ื“ื™ ืฉืคืืœื˜ืŸ ืื™ืŸ ื’ืจื•ืคึผืขืก ืœื•ื™ื˜ ื•ื•ื™ ื–ื™ื™ ื–ืึธืœ ื–ื™ื™ืŸ ื“ืขืจื”ื™ื™ึทื ื˜ื™ืงื˜. ื“ืจื™ื™ึท ื˜ื™ื™ืคึผืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืื•ื ื˜ืขืจืฉื™ื™ื“ืŸ:

  1. ืึทืงื™ื•ืžื™ืึทืœื™ื™ื˜ืขืจื– (ื‘ืึทื ื“, ื•ื™ืกืงืขืจ, ..) - ืžื™ืจ ืžื•ื–ืŸ ืœื™ื™ื’ืŸ ื“ื™ ื™ื ืงืึทืžื™ื ื’ ื•ื•ืขืจื˜ ืฆื• ื“ื™ ืคืจื™ืขืจื“ื™ืงืข.
  2. ืžื™ื˜ ืึท ืกืคึผืขืฆื™ืขืœ ืคื•ื ื˜ (ื”ื•ื™ืš, ื ื™ื“ืขืจื™ืง, ..) - ื“ืขืจ ืขืจืฉื˜ืขืจ ื•ื•ืขืจื˜ ืื™ืŸ ื“ื™ ืžื™ื ื•ื˜ ืื™ื– ื’ืขื ื•ืžืขืŸ ืคื•ืŸ ื“ื™ ื™ื ืงืึทืžื™ื ื’ ื“ืึทื˜ืŸ, ื“ื™ ืžื ื•ื—ื” ื–ืขื ืขืŸ ืงืึทืœืงื™ืึทืœื™ื™ื˜ื™ื“ ืžื™ื˜ ื“ื™ ืคึฟื•ื ืงืฆื™ืข.
  3. ืžื ื•ื—ื”. ืฉื˜ืขื ื“ื™ืง ืงืึทืœืงื™ืึทืœื™ื™ื˜ื™ื“ ื ื™ืฆืŸ ืึท ืคึฟื•ื ืงืฆื™ืข.

ืœืึธืžื™ืจ ื“ืขืคื™ื ื™ืจืŸ ื•ื•ืขืจื™ืึทื‘ืึทืœื– ืคึฟืึทืจ ื“ื™ ืงืœืืกืŸ:

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

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’