рд░рд┐рдЕрд▓-рдЯрд╛рдЗрдо рд╕реЗрд╡реЗрдЪреЗ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рдкрд░реВрди Q рдЖрдгрд┐ KDB+ рднрд╛рд╖реЗрдЪреА рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ

KDB+ рдмреЗрд╕, рдХреНрдпреВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХрд╛рдп рдЖрд╣реЗрдд, рддреНрдпрд╛рдВрдЪреА рддрд╛рдХрдж рдЖрдгрд┐ рдХрдордХреБрд╡рддрддрд╛ рдХрд╛рдп рдЖрд╣реЗрдд рдпрд╛рдмрджреНрджрд▓ рддреБрдореНрд╣реА рдорд╛рдЭреНрдпрд╛ рдорд╛рдЧреАрд▓ рд▓реЗрдЦрд╛рдд рд╡рд╛рдЪреВ рд╢рдХрддрд╛ рд▓реЗрдЦ рдЖрдгрд┐ рдереЛрдбрдХреНрдпрд╛рдд рдкрд░рд┐рдЪрдпрд╛рдд. рд▓реЗрдЦрд╛рдд, рдЖрдореНрд╣реА Q рд╡рд░ рдПрдХ рд╕реЗрд╡рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░реВ рдЬреА рдпреЗрдгрд╛рд░реНтАНрдпрд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣рд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрд▓ рдЖрдгрд┐ "рд░рд┐рдЕрд▓ рдЯрд╛рдЗрдо" рдореЛрдбрдордзреНрдпреЗ рджрд░ рдорд┐рдирд┐рдЯрд╛рд▓рд╛ рд╡рд┐рд╡рд┐рдз рдПрдХрддреНрд░реАрдХрд░рдг рдХрд╛рд░реНрдпрд╛рдВрдЪреА рдЧрдгрдирд╛ рдХрд░реЗрд▓ (рдореНрд╣рдгрдЬреЗ, рдбреЗрдЯрд╛рдЪреНрдпрд╛ рдкреБрдвреАрд▓ рднрд╛рдЧрд╛рдкреВрд░реНрд╡реА рд╕рд░реНрд╡рдХрд╛рд╣реА рдореЛрдЬрдгреНрдпрд╛рд╕рд╛рдареА рд╡реЗрд│ рдЕрд╕реЗрд▓). Q рдЪреЗ рдореБрдЦреНрдп рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рд╣реЗ рдЖрд╣реЗ рдХреА рд╣реА рдПрдХ рд╡реЗрдХреНрдЯрд░ рднрд╛рд╖рд╛ рдЖрд╣реЗ рдЬреА рддреБрдореНрд╣рд╛рд▓рд╛ рдПрдХрд▓ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рд╕рд╣ рдирд╛рд╣реА рддрд░ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдЕреЕрд░реЗ, рдЕреЕрд░реЗ рдЖрдгрд┐ рдЗрддрд░ рдЬрдЯрд┐рд▓ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рд╕рд╣ рдСрдкрд░реЗрдЯ рдХрд░реВ рджреЗрддреЗ. Q рдЖрдгрд┐ рддреНрдпрд╛рдЪреЗ рдирд╛рддреЗрд╡рд╛рдИрдХ K, J, APL рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рднрд╛рд╖рд╛ рддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддреЗрд╕рд╛рдареА рдкреНрд░рд╕рд┐рджреНрдз рдЖрд╣реЗрдд. рдмрд░реНтАНрдпрд╛рдЪрджрд╛, Java рд╕рд╛рд░рдЦреНрдпрд╛ рдкрд░рд┐рдЪрд┐рдд рднрд╛рд╖реЗрдд рдХреЛрдбрдЪреНрдпрд╛ рдЕрдиреЗрдХ рд╕реНрдХреНрд░реАрдиреНрд╕ рдШреЗрдгрд╛рд░рд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдо рддреНрдпрд╛рд╡рд░ рдХрд╛рд╣реА рдУрд│реАрдВрдордзреНрдпреЗ рд▓рд┐рд╣рд┐рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ. рдпрд╛ рд▓реЗрдЦрд╛рдд рдорд▓рд╛ рд╣реЗрдЪ рджрд╛рдЦрд╡рд╛рдпрдЪреЗ рдЖрд╣реЗ.

рд░рд┐рдЕрд▓-рдЯрд╛рдЗрдо рд╕реЗрд╡реЗрдЪреЗ рдЙрджрд╛рд╣рд░рдг рд╡рд╛рдкрд░реВрди Q рдЖрдгрд┐ KDB+ рднрд╛рд╖реЗрдЪреА рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ

рдкрд░рд┐рдЪрдп

KDB+ рд╣рд╛ рдПрдХ рд╕реНрддрдВрднреАрдп рдбреЗрдЯрд╛рдмреЗрд╕ рдЖрд╣реЗ рдЬреЛ рдЦреВрдк рдореЛрдареНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдбреЗрдЯрд╛рд╡рд░ рдХреЗрдВрджреНрд░рд┐рдд рдЖрд╣реЗ, рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрджреНрдзрддреАрдиреЗ (рдкреНрд░рд╛рдореБрдЦреНрдпрд╛рдиреЗ рд╡реЗрд│реЗрдиреБрд╕рд╛рд░) рдСрд░реНрдбрд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рд╣реЗ рдкреНрд░рд╛рдореБрдЦреНрдпрд╛рдиреЗ рд╡рд┐рддреНрддреАрдп рд╕рдВрд╕реНрдерд╛рдВрдордзреНрдпреЗ рд╡рд╛рдкрд░рд▓реЗ рдЬрд╛рддреЗ - рдмрдБрдХрд╛, рдЧреБрдВрддрд╡рдгреВрдХ рдирд┐рдзреА, рд╡рд┐рдорд╛ рдХрдВрдкрдиреНрдпрд╛. Q рднрд╛рд╖рд╛ рд╣реА KDB+ рдЪреА рдЕрдВрддрд░реНрдЧрдд рднрд╛рд╖рд╛ рдЖрд╣реЗ рдЬреА рддреБрдореНрд╣рд╛рд▓рд╛ рдпрд╛ рдбреЗрдЯрд╛рд╕рд╣ рдкреНрд░рднрд╛рд╡реАрдкрдгреЗ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ. Q рд╡рд┐рдЪрд╛рд░рдзрд╛рд░рд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдЖрдгрд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЖрд╣реЗ, рддрд░ рд╕реНрдкрд╖реНрдЯрддреЗрдЪрд╛ рддреНрдпрд╛рдЧ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рд╣реЗ рдпрд╛ рд╡рд╕реНрддреБрд╕реНрдерд┐рддреАрджреНрд╡рд╛рд░реЗ рдиреНрдпрд╛рдпреНрдп рдЖрд╣реЗ рдХреА рд╡реЗрдХреНрдЯрд░ рднрд╛рд╖рд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рд╕рдордЬрдгреЗ рдХрдареАрдг рд╣реЛрдИрд▓ рдЖрдгрд┐ рд░реЗрдХреЙрд░реНрдбрд┐рдВрдЧрдЪреА рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдЖрдгрд┐ рд╕рдореГрджреНрдзрддрд╛ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдПрдХрд╛ рд╕реНрдХреНрд░реАрдирд╡рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдордЪрд╛ рдмрд░рд╛рдЪ рдореЛрдард╛ рднрд╛рдЧ рдкрд╛рд╣рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЗ, рдЬреЗ рд╢реЗрд╡рдЯреА рд╕рдордЬреВрди рдШреЗрдгреЗ рд╕реЛрдкреЗ рдХрд░рддреЗ.

рдпрд╛ рд▓реЗрдЦрд╛рдд рдЖрдореНрд╣реА Q рдордзреНрдпреЗ рдПрдХ рдкреВрд░реНрдг-рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд╛рдЧреВ рдХрд░рддреЛ рдЖрдгрд┐ рддреБрдореНрд╣рд╛рд▓рд╛ рдХрджрд╛рдЪрд┐рдд рддреЛ рд╡рд╛рдкрд░реВрди рдкрд╣рд╛рд╡рд╛рд╕рд╛ рд╡рд╛рдЯреЗрд▓. рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ Q рдЖрд╡рд╢реНрдпрдХ рдЕрд╕реЗрд▓. рддреБрдореНрд╣реА kx рдХрдВрдкрдиреАрдЪреНрдпрд╛ рд╡реЗрдмрд╕рд╛рдЗрдЯрд╡рд░ рдореЛрдлрдд 32-рдмрд┐рдЯ рдЖрд╡реГрддреНрддреА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реВ рд╢рдХрддрд╛ тАУ www.kx.com. рддреЗрдереЗ, рддреБрдореНрд╣рд╛рд▓рд╛ рд╕реНрд╡рд╛рд░рд╕реНрдп рдЕрд╕рд▓реНрдпрд╛рд╕, рддреБрдореНрд╣рд╛рд▓рд╛ Q, рдкреБрд╕реНрддрдХрд╛рд╡рд░реАрд▓ рд╕рдВрджрд░реНрдн рдорд╛рд╣рд┐рддреА рдорд┐рд│реЗрд▓ рдорд░реНрддреНрдпрд╛рдВрд╕рд╛рдареА Q рдЖрдгрд┐ рдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░реАрд▓ рд╡рд┐рд╡рд┐рдз рд▓реЗрдЦ.

рд╕рдорд╕реНрдпреЗрдЪреА рдирд┐рд░реНрдорд┐рддреА

рдПрдХ рд╕реНрд░реЛрдд рдЖрд╣реЗ рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ 25 рдорд┐рд▓реАрд╕реЗрдХрдВрджрд╛рдВрдиреА рдбреЗрдЯрд╛рд╕рд╣ рдЯреЗрдмрд▓ рдкрд╛рдард╡рддреЛ. KDB+ рдЪрд╛ рд╡рд╛рдкрд░ рдкреНрд░рд╛рдореБрдЦреНрдпрд╛рдиреЗ рдлрд╛рдпрдирд╛рдиреНрд╕рдордзреНрдпреЗ рд╣реЛрдд рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдЖрдореНрд╣реА рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░реВ рдХреА рд╣реЗ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдВрдЪреЗ (рдЯреНрд░реЗрдб) рд╕рд╛рд░рдгреА рдЖрд╣реЗ, рдЬреНрдпрд╛рдордзреНрдпреЗ рдЦрд╛рд▓реАрд▓ рд╕реНрддрдВрдн рдЖрд╣реЗрдд: рд╡реЗрд│ (рд╡реЗрд│ рдорд┐рд▓рд┐рд╕реЗрдХрдВрджрдордзреНрдпреЗ), sym (рд╕реНрдЯреЙрдХ рдПрдХреНрд╕реНрдЪреЗрдВрдЬрд╡рд░реАрд▓ рдХрдВрдкрдиреА рдкрджрдирд╛рдо - IBM, AAPL,тАж), рдХрд┐рдВрдордд (рдЬреНрдпрд╛ рдХрд┐рдВрдорддреАрд▓рд╛ рд╢реЗрдЕрд░реНрд╕ рдЦрд░реЗрджреА рдХреЗрд▓реЗ рд╣реЛрддреЗ), рдЖрдХрд╛рд░ (рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдЪрд╛ рдЖрдХрд╛рд░). 25 рдорд┐рд▓реАрд╕реЗрдХрдВрдж рдордзреНрдпрд╛рдВрддрд░ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдЖрд╣реЗ, рдЦреВрдк рд▓рд╣рд╛рди рдирд╛рд╣реА рдЖрдгрд┐ рдЦреВрдк рд▓рд╛рдВрдм рдирд╛рд╣реА. рддреНрдпрд╛рдЪреНрдпрд╛ рдЙрдкрд╕реНрдерд┐рддреАрдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рдбреЗрдЯрд╛ рдЖрдзреАрдЪ рдмрдлрд░ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕реЗрд╡реЗрд╡рд░ рдпреЗрддреЛ. рд╕рдзреНрдпрд╛рдЪреНрдпрд╛ рд▓реЛрдбрд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдбрд╛рдпрдиреЕрдорд┐рдХ рдмрдлрд░рд┐рдВрдЧрд╕рд╣, рд╕реЗрд╡реЗрдЪреНрдпрд╛ рдмрд╛рдЬреВрдиреЗ рдмрдлрд░рд┐рдВрдЧ рд▓рд╛рдЧреВ рдХрд░рдгреЗ рд╕реЛрдкреЗ рд╣реЛрдИрд▓, рдкрд░рдВрддреБ рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдПрдХрд╛ рдирд┐рд╢реНрдЪрд┐рдд рдЕрдВрддрд░рд╛рд╡рд░ рд▓рдХреНрд╖ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░реВ.

рд╕реЗрд╡реЗрдиреЗ рд╕рд┐рдо рд╕реНрддрдВрднрд╛рддреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рдЗрдирдХрдорд┐рдВрдЧ рдЪрд┐рдиреНрд╣рд╛рд╕рд╛рдареА рдкреНрд░рддреНрдпреЗрдХ рдорд┐рдирд┐рдЯрд╛рд▓рд╛ рдПрдХрддреНрд░рд┐рдд рдлрдВрдХреНрд╢рдиреНрд╕рдЪрд╛ рд╕рдВрдЪ рдореЛрдЬрд▓рд╛ рдкрд╛рд╣рд┐рдЬреЗ - рдХрдорд╛рд▓ рдХрд┐рдВрдордд, рд╕рд░рд╛рд╕рд░реА рдХрд┐рдВрдордд, рдмреЗрд░реАрдЬ рдЖрдХрд╛рд░ рдЗ. рдЙрдкрдпреБрдХреНрдд рдорд╛рд╣рд┐рддреА. рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░реВ рдХреА рд╕рд░реНрд╡ рдлрдВрдХреНрд╢рдиреНрд╕рдЪреА рд╡рд╛рдвреАрд╡ рдЧрдгрдирд╛ рдХреЗрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ, рдореНрд╣рдгрдЬреЗ. рдирд╡реАрди рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рджреЛрди рд╕рдВрдЦреНрдпрд╛ рдЬрд╛рдгреВрди рдШреЗрдгреЗ рдкреБрд░реЗрд╕реЗ рдЖрд╣реЗ - рдЬреБрдиреА рдЖрдгрд┐ рдпреЗрдгрд╛рд░реА рдореВрд▓реНрдпреЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдлрдВрдХреНрд╢рдиреНрд╕ рдХрдорд╛рд▓, рд╕рд░рд╛рд╕рд░реА, рдмреЗрд░реАрдЬрдордзреНрдпреЗ рд╣рд╛ рдЧреБрдгрдзрд░реНрдо рдЕрд╕рддреЛ, рдкрд░рдВрддреБ рдордзреНрдп рдлрдВрдХреНрд╢рдирдордзреНрдпреЗ рдирд╛рд╣реА.

рдЖрдореНрд╣реА рдпреЗрдгрд╛рд░рд╛ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рд╡реЗрд│ рдХреНрд░рдорд╛рдиреЗ рдЖрд╣реЗ рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░реВ. рдпрд╛рдореБрд│реЗ рдХреЗрд╡рд│ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдХреНрд╖рдгреА рдХрд╛рдо рдХрд░рдгреНрдпрд╛рдЪреА рд╕рдВрдзреА рдорд┐рд│реЗрд▓. рд╕рд░рд╛рд╡ рдордзреНрдпреЗ, рдХрд╛рд╣реА рдЕрджреНрдпрддрдиреЗ рдЙрд╢реАрд░ рдЭрд╛рд▓реНрдпрд╛рд╕ рд╡рд░реНрддрдорд╛рди рдЖрдгрд┐ рдорд╛рдЧреАрд▓ рдорд┐рдирд┐рдЯрд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЕрд╕рдгреЗ рдкреБрд░реЗрд╕реЗ рдЖрд╣реЗ. рд╕рд╛рдзреЗрдкрдгрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдд рд╡рд┐рдЪрд╛рд░ рдХрд░рдгрд╛рд░ рдирд╛рд╣реА.

рдПрдХрддреНрд░реАрдХрд░рдг рдХрд╛рд░реНрдпреЗ

рдЖрд╡рд╢реНрдпрдХ рдПрдХрддреНрд░реАрдХрд░рдг рдХрд╛рд░реНрдпреЗ рдЦрд╛рд▓реА рд╕реВрдЪреАрдмрджреНрдз рдЖрд╣реЗрдд. рд╕реЗрд╡реЗрд╡рд░реАрд▓ рднрд╛рд░ рд╡рд╛рдврд╡рдгреНрдпрд╛рд╕рд╛рдареА рдореА рддреНрдпрд╛рдкреИрдХреА рд╢рдХреНрдп рддрд┐рддрдХреЗ рдШреЗрддрд▓реЗ:

  • рдЙрдЪреНрдЪ - рдХрдорд╛рд▓ рдХрд┐рдВрдордд - рдкреНрд░рддрд┐ рдорд┐рдирд┐рдЯ рдХрдорд╛рд▓ рдХрд┐рдВрдордд.
  • рдХрдореА - рдХрд┐рдорд╛рди рдХрд┐рдВрдордд - рдкреНрд░рддрд┐ рдорд┐рдирд┐рдЯ рдХрд┐рдорд╛рди рдХрд┐рдВрдордд.
  • рдкрд╣рд┐рд▓реА рдХрд┐рдВрдордд тАУ рдкрд╣рд┐рд▓реА рдХрд┐рдВрдордд тАУ рдкрд╣рд┐рд▓реА рдХрд┐рдВрдордд рдкреНрд░рддрд┐ рдорд┐рдирд┐рдЯ.
  • рд╢реЗрд╡рдЯрдЪреА рдХрд┐рдВрдордд - рд╢реЗрд╡рдЯрдЪреА рдХрд┐рдВрдордд - рдкреНрд░рддрд┐ рдорд┐рдирд┐рдЯ рд╢реЗрд╡рдЯрдЪреА рдХрд┐рдВрдордд.
  • рдкреНрд░рдердо рдЖрдХрд╛рд░ тАУ рдкреНрд░рдердо рдЖрдХрд╛рд░ тАУ рдкреНрд░рддрд┐ рдорд┐рдирд┐рдЯ рдкреНрд░рдердо рд╡реНрдпрд╛рдкрд╛рд░ рдЖрдХрд╛рд░.
  • lastSize - рд╢реЗрд╡рдЯрдЪрд╛ рдЖрдХрд╛рд░ - рдПрдХрд╛ рдорд┐рдирд┐рдЯрд╛рдд рд╢реЗрд╡рдЯрдЪрд╛ рд╡реНрдпрд╛рдкрд╛рд░ рдЖрдХрд╛рд░.
  • numTrades тАУ рдЧрдгрдирд╛ i тАУ рдкреНрд░рддрд┐ рдорд┐рдирд┐рдЯ рд╡реНрдпрд╛рдкрд╛рд░рд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛.
  • рдЦрдВрдб - рдмреЗрд░реАрдЬ рдЖрдХрд╛рд░ - рдкреНрд░рддрд┐ рдорд┐рдирд┐рдЯ рд╡реНрдпрд╛рдкрд╛рд░ рдЖрдХрд╛рд░рд╛рдВрдЪреА рдмреЗрд░реАрдЬ.
  • pvolume тАУ рдмреЗрд░реАрдЬ рдХрд┐рдВрдордд тАУ рдкреНрд░рддрд┐ рдорд┐рдирд┐рдЯ рдХрд┐рдорддреАрдВрдЪреА рдмреЗрд░реАрдЬ, рд╕рд░рд╛рд╕рд░реА рдХрд┐рдВрдорддреАрд╕рд╛рдареА рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.
  • - рдЙрд▓рд╛рдврд╛рд▓реАрдЪреА рдмреЗрд░реАрдЬ рдХрд┐рдВрдордд* рдЖрдХрд╛рд░ - рдкреНрд░рддрд┐ рдорд┐рдирд┐рдЯ рд╡реНрдпрд╡рд╣рд╛рд░рд╛рдВрдЪреА рдПрдХреВрдг рдорд╛рддреНрд░рд╛.
  • avgPrice тАУ pvolume%numTrades тАУ рд╕рд░рд╛рд╕рд░реА рдХрд┐рдВрдордд рдкреНрд░рддрд┐ рдорд┐рдирд┐рдЯ.
  • avgSize тАУ рдЦрдВрдб%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 ╨╛╨▒╤К╤П╤Б╨╜╨╡╨╜ ╨╜╨╕╨╢╨╡

рдореА рд╕реЛрдпреАрд╕рд╛рдареА рд╢рдмреНрджрдХреЛрд╖рд╛рдд sym рдЖрдгрд┐ рд╡реЗрд│ рдЬреЛрдбрд▓реЗ рдЖрд╣реЗ, рдЖрддрд╛ initWith рд╣реА рдЕрдВрддрд┐рдо рдПрдХрддреНрд░рд┐рдд рд╕рд╛рд░рдгреАрдЪреА рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реА рдУрд│ рдЖрд╣реЗ, рдЬрд┐рдереЗ рддреА рдпреЛрдЧреНрдп sym рдЖрдгрд┐ рд╡реЗрд│ рд╕реЗрдЯ рдХрд░рд╛рдпрдЪреА рдЖрд╣реЗ. рддреБрдореНрд╣реА рддреЗ рдЯреЗрдмрд▓рдордзреНрдпреЗ рдирд╡реАрди рдкрдВрдХреНрддреА рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░реВ рд╢рдХрддрд╛.

рдПрдЧреНрд░реАрдЧреЗрд╢рди рдлрдВрдХреНрд╢рди рддрдпрд╛рд░ рдХрд░рддрд╛рдирд╛ рдЖрдореНрд╣рд╛рд▓рд╛ 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

рдпрд╛ рдкрджреНрдзрддреАрдЪрд╛ рдПрдХ рддреЛрдЯрд╛ рдЖрд╣реЗ - рдЧрдгрдирд╛ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕реНрддрдВрднрд╛рдВрдЪрд╛ рд╕рдВрдЪ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЖрд╣реЗ. рд╕реБрджреИрд╡рд╛рдиреЗ, Q рдордзреНрдпреЗ, рд╕рд┐рд▓реЗрдХреНрдЯ рд╣реЗ рдлрдВрдХреНрд╢рди рдореНрд╣рдгреВрди рджреЗрдЦреАрд▓ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдЬреЗрдереЗ рддреБрдореНрд╣реА рдбрд╛рдпрдиреЕрдорд┐рдХрд▓реА рддрдпрд╛рд░ рдХреЗрд▓реЗрд▓реЗ рд╡рд┐рддрд░реНрдХ рдмрджрд▓реВ рд╢рдХрддрд╛:

?[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];

рд╕реНрдкрд╖реНрдЯрддреЗрд╕рд╛рдареА, рдореА рдкрд╛рд░реНрд╕ рдлрдВрдХреНрд╢рди рд╡рд╛рдкрд░рд▓реЗ, рдЬреЗ рдХреНрдпреВ рдПрдХреНрд╕реНрдкреНрд░реЗрд╢рдирд╕рд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧрд▓рд╛ рд╡реНрд╣реЕрд▓реНрдпреВрдордзреНрдпреЗ рдмрджрд▓рддреЗ рдЬреЗ eval рдлрдВрдХреНрд╢рдирд▓рд╛ рдкрд╛рд╕ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ рдЖрдгрд┐ рдЬреЗ рдлрдВрдХреНрд╢рди рд╕рд┐рд▓реЗрдХреНрдЯрдордзреНрдпреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рд╣реЗ рджреЗрдЦреАрд▓ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рдирд┐рд╡рдб рдлрдВрдХреНрд╢рдирдЪреЗ рдкреНрд░реЛрдЬреЗрдХреНрд╢рди (рдореНрд╣рдгрдЬреЗ рдЕрдВрд╢рддрдГ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдпреБрдХреНрддрд┐рд╡рд╛рдж рдЕрд╕рд▓реЗрд▓реЗ рдлрдВрдХреНрд╢рди) рдореНрд╣рдгреВрди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ, рдПрдХ рдпреБрдХреНрддрд┐рд╡рд╛рдж (рдЯреЗрдмрд▓) рдЧрд╣рд╛рд│ рдЖрд╣реЗ. рдЬрд░ рдЖрдкрдг рдЯреЗрдмрд▓рд╡рд░ рдкреНрд░реАрдкреНрд░реЛрд╕реЗрд╕ рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рддрд░ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдХреЙрдореНрдкреНрд░реЗрд╕ рдХреЗрд▓реЗрд▓реЗ рдЯреЗрдмрд▓ рдорд┐рд│реЗрд▓.

рджреБрд╕рд░рд╛ рдЯрдкреНрдкрд╛ рдПрдХрддреНрд░рд┐рдд рд╕рд╛рд░рдгреА рдЕрджреНрдпрддрдирд┐рдд рдХрд░рдд рдЖрд╣реЗ. рдЪрд▓рд╛ рдкреНрд░рдердо рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реНрдпреВрдбреЛрдХреЛрдбрдордзреНрдпреЗ рд▓рд┐рд╣реВ:

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 рдордзреНрдпреЗ, loops рдРрд╡рдЬреА map/reduce рдлрдВрдХреНрд╢рдиреНрд╕ рд╡рд╛рдкрд░рдгреЗ рд╕рд╛рдорд╛рдиреНрдп рдЖрд╣реЗ. рдкрд░рдВрддреБ рдХреНрдпреВ рд╣реА рд╕рджрд┐рд╢ рднрд╛рд╖рд╛ рдЕрд╕рд▓реНрдпрд╛рдиреЗ рдЖрдгрд┐ рдЖрдкрдг рд╕рд░реНрд╡ рдЪрд┐рдиреНрд╣рд╛рдВрд╡рд░ рдПрдХрд╛рдЪ рд╡реЗрд│реА рд╕рд░реНрд╡ рдХреНрд░рд┐рдпрд╛ рд╕рд╣рдЬрдкрдгреЗ рд▓рд╛рдЧреВ рдХрд░реВ рд╢рдХрддреЛ, рдирдВрддрд░ рдкреНрд░рдердо рдЕрдВрджрд╛рдЬреЗрдкрд░реНрдпрдВрдд рдЖрдкрдг рд▓реВрдкрд╢рд┐рд╡рд╛рдп рдЕрдЬрд┐рдмрд╛рдд рдХрд░реВ рд╢рдХрддреЛ, рд╕рд░реНрд╡ рдЪрд┐рдиреНрд╣рд╛рдВрд╡рд░ рдПрдХрд╛рдЪ рд╡реЗрд│реА рдСрдкрд░реЗрд╢рдиреНрд╕ рдХрд░реВ рд╢рдХрддреЛ:

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;тАж)];

рдЖрдореНрд╣реА рдкреБрдиреНрд╣рд╛ рдлрдВрдХреНрд╢рди рдкреНрд░реЛрдЬреЗрдХреНрд╢рди рд╡рд╛рдкрд░рддреЛ. рд╣реЗ рджреЗрдЦреАрд▓ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА Q рдордзреНрдпреЗ, рд╕реВрдЪреА рддрдпрд╛рд░ рдХрд░рдгреЗ рджреЗрдЦреАрд▓ рдПрдХ рдлрдВрдХреНрд╢рди рдЖрд╣реЗ рдЖрдгрд┐ рд╕реВрдЪреАрдЪреА рд╕реВрдЪреА рдорд┐рд│рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдореНрд╣реА рдкреНрд░рддреНрдпреЗрдХ (рдирдХрд╛рд╢рд╛) рдлрдВрдХреНрд╢рди рд╡рд╛рдкрд░реВрди рдХреЙрд▓ рдХрд░реВ рд╢рдХрддреЛ.

рдЧрдгрдирд╛ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕реНрддрдВрднрд╛рдВрдЪрд╛ рд╕рдВрдЪ рдирд┐рд╢реНрдЪрд┐рдд рдирд╛рд╣реА рдпрд╛рдЪреА рдЦрд╛рддреНрд░реА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рдЖрдореНрд╣реА рд╡рд░реАрд▓ рдЕрднрд┐рд╡реНрдпрдХреНрддреА рдЧрддрд┐рд╢реАрд▓рдкрдгреЗ рддрдпрд╛рд░ рдХрд░реВ. рдПрдХрддреНрд░рд┐рдд рдЖрдгрд┐ рдЗрдирдкреБрдЯ рдбреЗрдЯрд╛рдЪрд╛ рд╕рдВрджрд░реНрдн рджреЗрдгреНрдпрд╛рд╕рд╛рдареА рд░реЛ рдЖрдгрд┐ inp рд╡реНрд╣реЗрд░рд┐рдПрдмрд▓реНрд╕рдЪрд╛ рд╡рд╛рдкрд░ рдХрд░реВрди, рдкреНрд░рддреНрдпреЗрдХ рд╕реНрддрдВрднрд╛рдЪреА рдЧрдгрдирд╛ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдкреНрд░рдердо рдлрдВрдХреНрд╢рдиреНрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВрдпрд╛:

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");

рдХрд╛рд╣реА рд╕реНрддрдВрдн рд╡рд┐рд╢реЗрд╖ рдЖрд╣реЗрдд; рддреНрдпрд╛рдВрдЪреЗ рдкрд╣рд┐рд▓реЗ рдореВрд▓реНрдп рдлрдВрдХреНрд╢рдирджреНрд╡рд╛рд░реЗ рдореЛрдЬрд▓реЗ рдЬрд╛рдК рдирдпреЗ. рдЖрдореНрд╣реА рдкрдВрдХреНрддреА [`numTrades] рд╕реНрддрдВрднрд╛рдиреБрд╕рд╛рд░ рддреЗ рдкрд╣рд┐рд▓реЗ рдЖрд╣реЗ рд╣реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реВ рд╢рдХрддреЛ - рдЬрд░ рддреНрдпрд╛рдд 0 рдЕрд╕реЗрд▓, рддрд░ рдореВрд▓реНрдп рдкрд╣рд┐рд▓реЗ рдЖрд╣реЗ. Q рдордзреНрдпреЗ рд╕рд┐рд▓реЗрдХреНрдЯ рдлрдВрдХреНрд╢рди рдЖрд╣реЗ - ?[рдмреВрд▓рд┐рдпрди рд▓рд┐рд╕реНрдЯ;рд▓рд┐рд╕реНрдЯ1;рд▓рд┐рд╕реНрдЯ2] - рдЬреЗ рдкрд╣рд┐рд▓реНрдпрд╛ рд╡рд┐рддрд░реНрдХрд╛рддреАрд▓ рдХрдВрдбрд┐рд╢рдирдиреБрд╕рд╛рд░ рд╕реВрдЪреА 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;

Q рдорд╛рдирдХрд╛рдВрдиреБрд╕рд╛рд░ рд╣реА рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдореА рдПрдХрд╛рдЪ рд╡реЗрд│реА рдореВрд▓реНрдпрд╛рдВрдЪреА рд╕реВрдЪреА рдирд┐рдпреБрдХреНрдд рдХрд░рдд рдЖрд╣реЗ. рд╢реЗрд╡рдЯреА, рдореБрдЦреНрдп рдХрд╛рд░реНрдп рддрдпрд╛рд░ рдХрд░реВрдпрд╛:

// ":",/: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 рдлрдВрдХреНрд╢рди рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реВ:

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 рдлрдВрдХреНрд╢рди (рдХреНрдпреВ рд╕реЗрд╡рд╛рдВрд╕рд╛рдареА рдпрд╛ рдлрдВрдХреНрд╢рдирдЪреЗ рдкрд╛рд░рдВрдкрд╛рд░рд┐рдХ рдирд╛рд╡), рдЬреНрдпрд╛рд▓рд╛ рдХреНрд▓рд╛рдпрдВрдЯ рдбреЗрдЯрд╛ рдЬреЛрдбрдгреНрдпрд╛рд╕рд╛рдареА рдХреЙрд▓ рдХрд░рддреЛ:

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[]

рджреБрд╕рд░реНтАНрдпрд╛ рдХрдиреНрд╕реЛрд▓рдордзреНрдпреЗ, рджреБрд╕рд░реА Q рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реБрд░реВ рдХрд░рд╛ рдЖрдгрд┐ рдкрд╣рд┐рд▓реНрдпрд╛рд╢реА рдХрдиреЗрдХреНрдЯ рдХрд░рд╛:

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 рддреЗ 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 рдореНрд╣рдгрдЬреЗ рджреЛрди рдорд┐рдирд┐рдЯреЗ. рддреБрдореНрд╣реА рдкреНрд░рддреНрдпреЗрдХ реирел рдорд┐рд▓реАрд╕реЗрдХрдВрджрд╛рдВрдиреА резрежрежреж рдкрдВрдХреНрддреАрдВрд╕рд╛рдареА рдкреНрд░рдердо рдзрд╛рд╡рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВ рд╢рдХрддрд╛:

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 рджрд╢рд▓рдХреНрд╖ рдУрд│реА рдкреНрд░рддрд┐ рдорд┐рдирд┐рдЯ) рдЕрддреНрдпрдВрдд рдореЛрдареА рдЖрд╣реЗ; рдЕрд╢рд╛ рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ, рд╕реЗрд╡реЗрдЪреЗ рдЕрдиреЗрдХ рдХреНрд▓реЛрди (рдХрд┐рдВрд╡рд╛ рдЕрдЧрджреА рдбрдЭрдирднрд░ рдХреНрд▓реЛрди) рд▓рд╛рдБрдЪ рдХрд░рдгреЗ рд╕рд╛рдорд╛рдиреНрдп рдЖрд╣реЗ, рдЬреНрдпрд╛рдкреИрдХреА рдкреНрд░рддреНрдпреЗрдХ рд╡рд░реНрдгрд╛рдВрдЪреНрдпрд╛ рдХреЗрд╡рд│ рднрд╛рдЧрд╛рд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░рддреЛ. рддрд░реАрд╣реА, рдореБрдЦреНрдпрддрдГ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрд░реЗрдЬрд╡рд░ рд▓рдХреНрд╖ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдгрд╛рд░реНтАНрдпрд╛ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреЗрд▓реЗрд▓реНрдпрд╛ рднрд╛рд╖реЗрд╕рд╛рдареА рдкрд░рд┐рдгрд╛рдо рдкреНрд░рднрд╛рд╡реА рдЖрд╣реЗ.

рдкреНрд░рд╢реНрди рдЙрджреНрднрд╡реВ рд╢рдХрддреЛ рдХреА рдкреНрд░рддреНрдпреЗрдХ рдЕрджреНрдпрддрдирд╛рдЪреНрдпрд╛ рдЖрдХрд╛рд░рд╛рдиреБрд╕рд╛рд░ рд╡реЗрд│ рдиреЙрди-рд░реЗрдЦреАрдп рдХрд╛ рд╡рд╛рдврддреЛ. рдпрд╛рдЪреЗ рдХрд╛рд░рдг рдореНрд╣рдгрдЬреЗ shrink рдлрдВрдХреНрд╢рди рд╣реЗ C рдлрдВрдХреНрд╢рди рдЖрд╣реЗ, рдЬреЗ updateAgg рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдо рдЖрд╣реЗ. рдПрдХрд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрджреНрдпрддрди рдЖрдХрд╛рд░рд╛рдкрд╛рд╕реВрди (рд╕реБрдорд╛рд░реЗ 10.000) рдкреНрд░рд╛рд░рдВрдн рдХрд░реВрди, updateAgg рддреНрдпрд╛рдЪреНрдпрд╛ рдХрдорд╛рд▓ рдорд░реНрдпрд╛рджреЗрдкрд░реНрдпрдВрдд рдкреЛрд╣реЛрдЪрддреЗ рдЖрдгрд┐ рдирдВрддрд░ рддреНрдпрд╛рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рд╡реЗрд│ рдЕрджреНрдпрддрди рдЖрдХрд╛рд░рд╛рд╡рд░ рдЕрд╡рд▓рдВрдмреВрди рдирд╕рддреЗ. рдкреНрд░рд╛рдердорд┐рдХ рдкрд╛рдпрд░реА Q рдореБрд│реЗ рд╣реА рд╕реЗрд╡рд╛ рдЗрддрдХреНрдпрд╛ рдкреНрд░рдорд╛рдгрд╛рдд рдбреЗрдЯрд╛ рдкрдЪрд╡рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЖрд╣реЗ. рдореЛрдареНрдпрд╛ рдбреЗрдЯрд╛рд╕рд╣ рдХрд╛рдо рдХрд░рддрд╛рдирд╛ рдпреЛрдЧреНрдп рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдирд┐рд╡рдбрдгреЗ рдХрд┐рддреА рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдЖрд╣реЗ рд╣реЗ рд╣реЗ рд╣рд╛рдпрд▓рд╛рдЗрдЯ рдХрд░рддреЗ. рджреБрд╕рд░рд╛ рдореБрджреНрджрд╛ рдореНрд╣рдгрдЬреЗ рдореЗрдорд░реАрдордзреАрд▓ рдбреЗрдЯрд╛рдЪреЗ рдпреЛрдЧреНрдп рд╕рдВрдЪрдпрди. рдЬрд░ рдбреЗрдЯрд╛ рд╕реНрддрдВрднреАрдпрд░рд┐рддреНрдпрд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛ рдирд╕реЗрд▓ рдХрд┐рдВрд╡рд╛ рд╡реЗрд│реЗрдиреБрд╕рд╛рд░ рдСрд░реНрдбрд░ рдХреЗрд▓рд╛ рдЧреЗрд▓рд╛ рдирд╕реЗрд▓, рддрд░ рдЖрдореНрд╣реА TLB рдХреЕрд╢реЗ рдорд┐рд╕ - рдкреНрд░реЛрд╕реЗрд╕рд░ рдЕреЕрдбреНрд░реЗрд╕ рдХреЕрд╢реЗрдордзреНрдпреЗ рдореЗрдорд░реА рдкреГрд╖реНрда рдкрддреНрддрд╛ рдирд╕рдгреЗ рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдЧреЛрд╖реНрдЯреАрдВрд╢реА рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдК. рдкрддреНрддрд╛ рд╢реЛрдзрдгреНрдпрд╛рдд рдЕрдпрд╢рд╕реНрд╡реА рдЭрд╛рд▓реНрдпрд╛рд╕ рд╕реБрдорд╛рд░реЗ 30 рдкрдЯ рдЬрд╛рд╕реНрдд рд╡реЗрд│ рд▓рд╛рдЧрддреЛ рдЖрдгрд┐ рдбреЗрдЯрд╛ рд╡рд┐рдЦреБрд░рд▓реЗрд▓рд╛ рдЕрд╕рд▓реНрдпрд╛рд╕, рдпрд╛рдореБрд│реЗ рд╕реЗрд╡рд╛ рдЕрдиреЗрдХ рд╡реЗрд│рд╛ рдХрдореА рд╣реЛрдК рд╢рдХрддреЗ.

рдирд┐рд╖реНрдХрд░реНрд╖

рдпрд╛ рд▓реЗрдЦрд╛рдд, рдореА рджрд╛рдЦрд╡рд▓реЗ рдЖрд╣реЗ рдХреА KDB+ рдЖрдгрд┐ Q рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗрд╡рд│ рдореЛрдард╛ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЖрдгрд┐ рд╕рд┐рд▓реЗрдХреНрдЯрджреНрд╡рд╛рд░реЗ рд╕рд╣рдЬрдкрдгреЗ рдкреНрд░рд╡реЗрд╢ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареАрдЪ рдирд╛рд╣реА рддрд░ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рд╕реЗрд╡рд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рджреЗрдЦреАрд▓ рдпреЛрдЧреНрдп рдЖрд╣реЗрдд рдЬреЗ рд▓рд╛рдЦреЛ рдкрдВрдХреНрддреА/рдЧреАрдЧрд╛рдмрд╛рдЗрдЯ рдбреЗрдЯрд╛ рдкрдЪрд╡рдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЖрд╣реЗрдд. рдПрдХрдЪ Q рдкреНрд░рдХреНрд░рд┐рдпрд╛ Q рднрд╛рд╖рд╛ рд╕реНрд╡рддрдГрдЪ рдбреЗрдЯрд╛ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЕрд▓реНрдЧреЛрд░рд┐рджрдордЪреНрдпрд╛ рдЕрддреНрдпрдВрдд рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдЖрдгрд┐ рдХрд╛рд░реНрдпрдХреНрд╖рдо рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╛рдареА рддреНрдпрд╛рдЪреНрдпрд╛ рд╡реЗрдХреНрдЯрд░ рд╕реНрд╡рд░реВрдкрд╛рдореБрд│реЗ, рдЕрдВрдЧрднреВрдд SQL рдмреЛрд▓реА рджреБрднрд╛рд╖реА рдЖрдгрд┐ рд▓рд╛рдпрдмреНрд░рд░реА рдлрдВрдХреНрд╢рдиреНрд╕рдЪрд╛ рдПрдХ рдЕрддрд┐рд╢рдп рдпрд╢рд╕реНрд╡реА рд╕рдВрдЪ рдпрд╛рдореБрд│реЗ рдЕрдиреБрдорддреА рджреЗрддреЗ.

рдореА рд▓рдХреНрд╖рд╛рдд рдШреЗрдИрди рдХреА рд╡рд░реАрд▓ рд╣рд╛ рдлрдХреНрдд Q рдХрд╛рдп рдХрд░реВ рд╢рдХрддреЛ рддреНрдпрд╛рдЪрд╛ рдПрдХ рднрд╛рдЧ рдЖрд╣реЗ, рддреНрдпрд╛рдд рдЗрддрд░ рдЕрджреНрд╡рд┐рддреАрдп рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рджреЗрдЦреАрд▓ рдЖрд╣реЗрдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдПрдХ рдЕрддреНрдпрдВрдд рд╕рд╛рдзрд╛ IPC рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЬреЛ рд╡реИрдпрдХреНрддрд┐рдХ Q рдкреНрд░рдХреНрд░рд┐рдпрд╛рдВрдордзреАрд▓ рд╕реАрдорд╛ рдкреБрд╕реВрди рдЯрд╛рдХрддреЛ рдЖрдгрд┐ рддреБрдореНрд╣рд╛рд▓рд╛ рдпрд╛рдкреИрдХреА рд╢реЗрдХрдбреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдПрдХрд╛рдЪ рдиреЗрдЯрд╡рд░реНрдХрдордзреНрдпреЗ рдПрдХрддреНрд░ рдХрд░реВ рджреЗрддреЛ, рдЬреЗ рдЬрдЧрд╛рдЪреНрдпрд╛ рд╡рд┐рд╡рд┐рдз рднрд╛рдЧрд╛рдВрдордзреНрдпреЗ рдбрдЭрдирднрд░ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдЕрд╕реВ рд╢рдХрддрд╛рдд.

рд╕реНрддреНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛