рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╕реЗрд╡рд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Q рдФрд░ KDB+ рднрд╛рд╖рд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ

рдЖрдк рдореЗрд░реЗ рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреЗрдбреАрдмреА+ рдмреЗрд╕, рдХреНрдпреВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдХреНрдпрд╛ рд╣реИрдВ, рдЙрдирдХреА рддрд╛рдХрдд рдФрд░ рдХрдордЬреЛрд░рд┐рдпрд╛рдВ рдХреНрдпрд╛ рд╣реИрдВред рд▓реЗрдЦ рдФрд░ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкрд░рд┐рдЪрдп рдореЗрдВред рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рдХреНрдпреВ рдкрд░ рдПрдХ рд╕реЗрд╡рд╛ рд▓рд╛рдЧреВ рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЖрдиреЗ рд╡рд╛рд▓реА рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧреА рдФрд░ "рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп" рдореЛрдб рдореЗрдВ рд╣рд░ рдорд┐рдирдЯ рд╡рд┐рднрд┐рдиреНрди рдПрдХрддреНрд░реАрдХрд░рдг рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдЧреА (рдпрд╛рдиреА, рдЗрд╕рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рдЕрдЧрд▓реЗ рднрд╛рдЧ рд╕реЗ рдкрд╣рд▓реЗ рд╕рдм рдХреБрдЫ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реЛрдЧрд╛)ред Q рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рд╡реЗрдХреНрдЯрд░ рднрд╛рд╖рд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдХрд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЙрдирдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ, рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдФрд░ рдЕрдиреНрдп рдЬрдЯрд┐рд▓ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред Q рдФрд░ рдЙрд╕рдХреЗ рд░рд┐рд╢реНрддреЗрджрд╛рд░ K, J, APL рдЬреИрд╕реА рднрд╛рд╖рд╛рдПрдБ рдЕрдкрдиреА рд╕рдВрдХреНрд╖рд┐рдкреНрддрддрд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╕рд┐рджреНрдз рд╣реИрдВред рдЕрдХреНрд╕рд░, рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдЬреЛ рдЬрд╛рд╡рд╛ рдЬреИрд╕реА рдкрд░рд┐рдЪрд┐рдд рднрд╛рд╖рд╛ рдореЗрдВ рдХреЛрдб рдХреА рдХрдИ рд╕реНрдХреНрд░реАрди рд▓реЗрддрд╛ рд╣реИ, рдЙрди рдкрд░ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдпрд╣реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред

рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп рд╕реЗрд╡рд╛ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ Q рдФрд░ KDB+ рднрд╛рд╖рд╛ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ

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

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

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо Q рдореЗрдВ рдПрдХ рдкреВрд░реНрдг рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣реЗрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ Q рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЖрдк kx рдХрдВрдкрдиреА рдХреА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдореБрдлреНрдд 32-рдмрд┐рдЯ рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - www.kx.com. рд╡рд╣рд╛рдВ, рдпрджрд┐ рдЖрдк рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдХреНрдпреВ, рдкреБрд╕реНрддрдХ рдкрд░ рд╕рдВрджрд░реНрдн рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓реЗрдЧреА рдХреНрдпреВ рдирд╢реНрд╡рд░ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдФрд░ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд╡рд┐рднрд┐рдиреНрди рд▓реЗрдЦред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдирд┐рд░реВрдкрдг

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

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

рд╣рдо рдпрд╣ рднреА рдорд╛рдиреЗрдВрдЧреЗ рдХрд┐ рдЖрдиреЗ рд╡рд╛рд▓реА рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рд╕рдордпрдмрджреНрдз рд╣реИред рдЗрд╕рд╕реЗ рд╣рдореЗрдВ рдЕрдВрддрд┐рдо рд╕рдордп рдореЗрдВ рд╣реА рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рдорд┐рд▓реЗрдЧрд╛ред' рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ, рдХреБрдЫ рдЕрдкрдбреЗрдЯ рджреЗрд░ рд╕реЗ рд╣реЛрдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдФрд░ рдкрд┐рдЫрд▓реЗ рдорд┐рдирдЯреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╣реА рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд╕рд░рд▓рддрд╛ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕ рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред

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

рдЖрд╡рд╢реНрдпрдХ рдПрдХрддреНрд░реАрдХрд░рдг рдХрд╛рд░реНрдп рдиреАрдЪреЗ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВред рд╕реЗрд╡рд╛ рдкрд░ рднрд╛рд░ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдпрдерд╛рд╕рдВрднрд╡ рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдХреЛ рд▓рд┐рдпрд╛:

  • рдЙрдЪреНрдЪ - рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп - рдкреНрд░рддрд┐ рдорд┐рдирдЯ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдпред
  • рдХрдо - рдиреНрдпреВрдирддрдо рдХреАрдордд - рдкреНрд░рддрд┐ рдорд┐рдирдЯ рдиреНрдпреВрдирддрдо рдХреАрдорддред
  • рдкреНрд░рдердо рдореВрд▓реНрдп - рдкреНрд░рдердо рдореВрд▓реНрдп - рдкреНрд░рдердо рдореВрд▓реНрдп рдкреНрд░рддрд┐ рдорд┐рдирдЯред
  • рдЕрдВрддрд┐рдо рдореВрд▓реНрдп - рдЕрдВрддрд┐рдо рдореВрд▓реНрдп - рдЕрдВрддрд┐рдо рдореВрд▓реНрдп рдкреНрд░рддрд┐ рдорд┐рдирдЯред
  • рдкрд╣рд▓рд╛ рдЖрдХрд╛рд░ - рдкрд╣рд▓рд╛ рдЖрдХрд╛рд░ - рдкреНрд░рддрд┐ рдорд┐рдирдЯ рдкрд╣рд▓рд╛ рд╡реНрдпрд╛рдкрд╛рд░ рдЖрдХрд╛рд░ред
  • рдЕрдВрддрд┐рдо рдЖрдХрд╛рд░ - рдЕрдВрддрд┐рдо рдЖрдХрд╛рд░ - рдПрдХ рдорд┐рдирдЯ рдореЗрдВ рдЕрдВрддрд┐рдо рд╡реНрдпрд╛рдкрд╛рд░ рдЖрдХрд╛рд░ред
  • numTrades - рдЧрд┐рдирддреА i - рдкреНрд░рддрд┐ рдорд┐рдирдЯ рдЯреНрд░реЗрдбреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ред
  • рдорд╛рддреНрд░рд╛ - рдпреЛрдЧ рдЖрдХрд╛рд░ - рдкреНрд░рддрд┐ рдорд┐рдирдЯ рд╡реНрдпрд╛рдкрд╛рд░ рдЖрдХрд╛рд░ рдХрд╛ рдпреЛрдЧред
  • рдкреАрд╡реЙрд▓реНрдпреВрдо - рдХреБрд▓ рдореВрд▓реНрдп - рдкреНрд░рддрд┐ рдорд┐рдирдЯ рдХреАрдорддреЛрдВ рдХрд╛ рдпреЛрдЧ, рдФрд╕рдд рдореВрд▓реНрдп рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХред
  • - рдХреБрд▓ рдЯрд░реНрдирдУрд╡рд░ рдореВрд▓реНрдп*рдЖрдХрд╛рд░ - рдкреНрд░рддрд┐ рдорд┐рдирдЯ рд▓реЗрдирджреЗрди рдХреА рдХреБрд▓ рдорд╛рддреНрд░рд╛ред
  • рдФрд╕рдд рдореВрд▓реНрдп - pvolume%numTrades - рдкреНрд░рддрд┐ рдорд┐рдирдЯ рдФрд╕рдд рдореВрд▓реНрдпред
  • рдФрд╕рдд рдЖрдХрд╛рд░ - рдорд╛рддреНрд░рд╛% рд╕рдВрдЦреНрдпрд╛ рд╡реНрдпрд╛рдкрд╛рд░ - рдкреНрд░рддрд┐ рдорд┐рдирдЯ рдФрд╕рдд рд╡реНрдпрд╛рдкрд╛рд░ рдЖрдХрд╛рд░ред
  • vwap - рдЯрд░реНрдирдУрд╡рд░%рд╡реЙрд▓реНрдпреВрдо - рд▓реЗрдирджреЗрди рдЖрдХрд╛рд░ рджреНрд╡рд╛рд░рд╛ рднрд╛рд░рд┐рдд рдкреНрд░рддрд┐ рдорд┐рдирдЯ рдФрд╕рдд рдореВрд▓реНрдпред
  • рдХрдорд╡реЙрд▓реНрдпреВрдо - рдпреЛрдЧ рдорд╛рддреНрд░рд╛ - рдкреВрд░реЗ рд╕рдордп рдореЗрдВ рд▓реЗрдирджреЗрди рдХрд╛ рд╕рдВрдЪрд┐рдд рдЖрдХрд╛рд░ред

рдЖрдЗрдП рддреБрд░рдВрдд рдПрдХ рдЧреИрд░-рд╕реНрдкрд╖реНрдЯ рдмрд┐рдВрджреБ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВ - рдЗрди рдХреЙрд▓рдореЛрдВ рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреЗ рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдЖрд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рдПред рдлрд░реНрд╕реНрдЯрдкреНрд░рд╛рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХреБрдЫ рдХреЙрд▓рдореЛрдВ рдХреЛ рд╣рд░ рдмрд╛рд░ рд╢реВрдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░рдВрдн рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП; рдЙрдирдХрд╛ рдорд╛рди рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИред рдЕрдиреНрдп рд╡реЙрд▓реНрдпреВрдо рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╣рдореЗрд╢рд╛ 0 рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕реЗ рдХреЙрд▓рдо рднреА рд╣реИрдВ рдЬрд┐рдирдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдпреБрдХреНрдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдо рд╡реЙрд▓реНрдпреВрдо рдХреЛ рдкрд┐рдЫрд▓реЗ рдорд┐рдирдЯ рд╕реЗ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рд▓рд┐рдП 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 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдХреНрдпреВ рдореЗрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рдпреЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рджрд╛рдПрдВ рд╕реЗ рдмрд╛рдПрдВ) рдХреЗ рдХрд╛рд░рдг рд╕реВрдЪреА рдЙрд▓рдЯреА рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рд▓рдХреНрд╖реНрдп рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдЧрдгрдирд╛ рдЙрдЪреНрдЪ рд╕реЗ рдХрдо рд╡реЙрд▓реНрдпреВрдо рддрдХ рдЬрд╛рдП, рдХреНрдпреЛрдВрдХрд┐ рдХреБрдЫ рдХреЙрд▓рдо рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреЗ рд╣реИрдВред

рдЬрд┐рди рдХреЙрд▓рдореЛрдВ рдХреЛ рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рд╕реЗ рдПрдХ рдирдП рдорд┐рдирдЯ рдореЗрдВ рдХреЙрдкреА рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╕рд┐рдо рдХреЙрд▓рдо рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ:

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 рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдХ рдорд╛рди рдореЗрдВ рдмрджрд▓ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ 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 рдПрдХ рд╕рджрд┐рд╢ рднрд╛рд╖рд╛ рд╣реИ рдФрд░ рд╣рдо рдПрдХ рд╣реА рдмрд╛рд░ рдореЗрдВ рд╕рднреА рдкреНрд░рддреАрдХреЛрдВ рдкрд░ рд╕рднреА рдкрд░рд┐рдЪрд╛рд▓рдиреЛрдВ рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдкрд╣рд▓реЗ рд╕рдиреНрдирд┐рдХрдЯрди рдореЗрдВ рд╣рдо рдмрд┐рдирд╛ рдХрд┐рд╕реА рд▓реВрдк рдХреЗ рд╕рднреА рдкреНрд░рддреАрдХреЛрдВ рдкрд░ рдПрдХ рд╕рд╛рде рд╕рдВрдЪрд╛рд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

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 рдореЗрдВ, рд╕реВрдЪреА рдмрдирд╛рдирд╛ рднреА рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдФрд░ рд╣рдо рд╕реВрдЪрд┐рдпреЛрдВ рдХреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ (рдореИрдк) рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

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

рдпрд╣рд╛рдВ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди (рдШреБрдВрдШрд░рд╛рд▓реЗ рдмреНрд░реЗрд╕рд┐рдЬрд╝ рдореЗрдВ рдПрдХ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐) рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдмреБрд▓рд╛рдпрд╛ред рдпрд╣ рд╡рд░реНрддрдорд╛рди рдорд╛рди (рдкрд╣рд▓рд╛ рддрд░реНрдХ) рдФрд░ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдореИрдВ рдЪреМрдереЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдкрд╛рд╕ рдХрд░рддрд╛ рд╣реВрдВред

рдЖрдЗрдП рдмреИрдЯрд░реА рд╕реНрдкреАрдХрд░ рдЕрд▓рдЧ рд╕реЗ рдЬреЛрдбрд╝реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдирдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рд╕рдорд╛рди рд╣реИ:

// 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:{[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 рджреЛ рдорд┐рдирдЯ рд╣реИ. рдЖрдк рдкрд╣рд▓реЗ рдкреНрд░рддреНрдпреЗрдХ 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 рдорд┐рд▓рд┐рдпрди рдкрдВрдХреНрддрд┐рдпрд╛рдБ) рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИ; рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╕реЗрд╡рд╛ рдХреЗ рдХрдИ рдХреНрд▓реЛрди (рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рджрд░реНрдЬрдиреЛрдВ рдХреНрд▓реЛрди) рд▓реЙрдиреНрдЪ рдХрд░рдирд╛ рдЖрдо рдмрд╛рдд рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗрд╡рд▓ рд╡рд░реНрдгреЛрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рднреА, рдПрдХ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЧрдИ рднрд╛рд╖рд╛ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдо рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИ рдЬреЛ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред

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

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

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

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

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ