рд╡рд╛рд╕реНрддрд╡рд┐рдХ-рд╕рдордп рд╕реЗрд╡рд╛рдХреЛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ Q рд░ KDB+ рднрд╛рд╖рд╛рдХрд╛ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ

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

рд╡рд╛рд╕реНрддрд╡рд┐рдХ-рд╕рдордп рд╕реЗрд╡рд╛рдХреЛ рдЙрджрд╛рд╣рд░рдг рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ Q рд░ KDB+ рднрд╛рд╖рд╛рдХрд╛ рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ

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

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

рдпрд╕ рд▓реЗрдЦрдорд╛ рд╣рд╛рдореАрд▓реЗ Q рдорд╛ рдкреВрд░реНрдг-рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рд▓рд╛рдЧреВ рдЧрд░реНрдЫреМрдВ рд░ рддрдкрд╛рдИрдВрд▓реЗ рдпрд╕рд▓рд╛рдИ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╡рд╛рд╕реНрддрд╡рд┐рдХ Q рдЪрд╛рд╣рд┐рдиреНрдЫред рддрдкрд╛рдИрдВрд▓реЗ kx рдХрдореНрдкрдиреАрдХреЛ рд╡реЗрдмрд╕рд╛рдЗрдЯрдорд╛ рдирд┐:рд╢реБрд▓реНрдХ рейреи-рдмрд┐рдЯ рд╕рдВрд╕реНрдХрд░рдг рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ - www.kx.comред рддреНрдпрд╣рд╛рдБ, рдпрджрд┐ рддрдкрд╛рдЗрдБ рдЗрдЪреНрдЫреБрдХ рд╣реБрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ, рддрдкрд╛рдЗрдБ Q рдорд╛ рд╕рдиреНрджрд░реНрдн рдЬрд╛рдирдХрд╛рд░реА рдкрд╛рдЙрдиреБрд╣реБрдиреЗрдЫ, рдкреБрд╕реНрддрдХ Q Mortals рдХреЛ рд▓рд╛рдЧреА рд░ рдпрд╕ рд╡рд┐рд╖рдпрдорд╛ рд╡рд┐рднрд┐рдиреНрди рд▓реЗрдЦрд╣рд░реВред

рд╕рдорд╕реНрдпрд╛рдХреЛ рдЧрдарди

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

рд╕реЗрд╡рд╛рд▓реЗ sym рд╕реНрддрдореНрднрдмрд╛рдЯ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЧрдорди рдкреНрд░рддреАрдХрдХреЛ рд▓рд╛рдЧрд┐ рдкреНрд░рддреНрдпреЗрдХ рдорд┐рдиреЗрдЯ рдЧрдгрдирд╛ рдЧрд░реНрдиреБ рдкрд░реНрдЫ рд╕рдордЧреНрд░ рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╕реЗрдЯ - рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп, рдФрд╕рдд рдореВрд▓реНрдп, рдпреЛрдЧ рдЖрдХрд╛рд░, рдЖрджрд┐ред рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реАред рд╕рд░рд▓рддрд╛рдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА рдорд╛рдиреНрдиреЗрдЫреМрдВ рдХрд┐ рд╕рдмреИ рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рдХреНрд░рдорд╢рдГ рдЧрдгрдирд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ, рдЕрд░реНрдерд╛рддреНред рдирдпрд╛рдБ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди, рдпреЛ рджреБрдИ рдирдореНрдмрд░рд╣рд░реВ рдЬрд╛рдиреНрди рдкрд░реНрдпрд╛рдкреНрдд рдЫ - рдкреБрд░рд╛рдиреЛ рд░ рдЖрдЧрдорди рдорд╛рдирд╣рд░реВред рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреА, рдкреНрд░рдХрд╛рд░реНрдп рдЕрдзрд┐рдХрддрдо, рдФрд╕рдд, рдпреЛрдЧ рдорд╛ рдпреЛ рдЧреБрдг рдЫ, рддрд░ рдордзреНрдп рдкреНрд░рдХрд╛рд░реНрдп рдЫреИрдиред

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

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

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

  • рдЙрдЪреНрдЪ - рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп - рдкреНрд░рддрд┐ рдорд┐рдиреЗрдЯ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдпред
  • рдХрдо - рдиреНрдпреВрдирддрдо рдореВрд▓реНрдп - рдиреНрдпреВрдирддрдо рдореВрд▓реНрдп рдкреНрд░рддрд┐ рдорд┐рдиреЗрдЯред
  • рдкрд╣рд┐рд▓реЛ рдореВрд▓реНрдп - рдкрд╣рд┐рд▓реЛ рдореВрд▓реНрдп - рдкреНрд░рддрд┐ рдорд┐рдиреЗрдЯ рдкрд╣рд┐рд▓реЛ рдореВрд▓реНрдпред
  • рдЕрдиреНрддрд┐рдо рдореВрд▓реНрдп - рдЕрдиреНрддрд┐рдо рдореВрд▓реНрдп - рдкреНрд░рддрд┐ рдорд┐рдиреЗрдЯ рдЕрдиреНрддрд┐рдо рдореВрд▓реНрдпред
  • firstSize - рдкрд╣рд┐рд▓реЛ рдЖрдХрд╛рд░ - рдкреНрд░рддрд┐ рдорд┐рдиреЗрдЯ рдкрд╣рд┐рд▓реЛ рд╡реНрдпрд╛рдкрд╛рд░ рдЖрдХрд╛рд░ред
  • рдЕрдиреНрддрд┐рдо рдЖрдХрд╛рд░ - рдЕрдиреНрддрд┐рдо рдЖрдХрд╛рд░ - рдПрдХ рдорд┐рдиреЗрдЯрдорд╛ рдЕрдиреНрддрд┐рдо рд╡реНрдпрд╛рдкрд╛рд░ рдЖрдХрд╛рд░ред
  • 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. Accumulators (рднреЛрд▓реНрдпреБрдо, рдЯрд░реНрдирдУрднрд░, ..) - рд╣рд╛рдореАрд▓реЗ рдЕрдШрд┐рд▓реНрд▓реЛ рдПрдХрдорд╛ рдЖрдЧрдорди рдорд╛рди рдердкреНрдиреБ рдкрд░реНрдЫред
  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];

рд╕реНрдкрд╖реНрдЯрддрд╛рдХреЛ рд▓рд╛рдЧрд┐, рдореИрд▓реЗ рдкрд╛рд░реНрд╕ рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрдВ, рдЬрд╕рд▓реЗ 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 рдорд╛, рд▓реБрдкреНрд╕рдХреЛ рд╕рдЯреНрдЯрд╛ рдирдХреНрд╕рд╛/рдШрдЯрд╛рдЙрдиреЗ рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рд╛рдорд╛рдиреНрдп рдЫред рддрд░ 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 рдорд╛, рд╕реВрдЪреА рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдПрдХ рдкреНрд░рдХрд╛рд░реНрдп рдкрдирд┐ рд╣реЛ рд░ рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рд╕реВрдЪреАрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рдкреНрд░рддреНрдпреЗрдХ (рдирдХреНрд╕рд╛) рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдХрд▓ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВред

рдЧрдгрдирд╛ рдЧрд░рд┐рдПрдХреЛ рд╕реНрддрдореНрднрд╣рд░реВрдХреЛ рд╕реЗрдЯ рдирд┐рд╢реНрдЪрд┐рдд рдЫреИрди рднрдиреЗрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрди, рд╣рд╛рдореА рдорд╛рдерд┐рдХреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЧрддрд┐рд╢реАрд▓ рд░реВрдкрдорд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗрдЫреМрдВред рдкрдЩреНрдХреНрддрд┐ рд░ 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] рд╕реНрддрдореНрдн рджреНрд╡рд╛рд░рд╛ рдпреЛ рдкрд╣рд┐рд▓реЛ рд╣реЛ рднрдиреЗрд░ рдирд┐рд░реНрдзрд╛рд░рдг рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ - рдпрджрд┐ рдпрд╕рдорд╛ реж рдЫ рднрдиреЗ, рдорд╛рди рдкрд╣рд┐рд▓реЛ рд╣реЛред Q рд╕рдБрдЧ рдЪрдпрди рдкреНрд░рдХрд╛рд░реНрдп рдЫ - ?[рдмреБрд▓рд┐рдпрди рд╕реВрдЪреА;рд╕реВрдЪреА рез;рд╕реВрдЪреА реи] - рдЬрд╕рд▓реЗ рдкрд╣рд┐рд▓реЛ рддрд░реНрдХрдХреЛ рдЕрд╡рд╕реНрдерд╛рдХреЛ рдЖрдзрд╛рд░рдорд╛ рд╕реВрдЪреА рез рд╡рд╛ реи рдмрд╛рдЯ рдорд╛рди рдЪрдпрди рдЧрд░реНрдЫ:

// 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 рдкреНрд░рдХрд╛рд░реНрдп (Q рд╕реЗрд╡рд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдпрд╕ рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рд▓рд╛рдЧрд┐ рдкрд░рдореНрдкрд░рд╛рдЧрдд рдирд╛рдо), рдЬрд╕рд▓рд╛рдИ рдЧреНрд░рд╛рд╣рдХрд▓реЗ рдбрд╛рдЯрд╛ рдердкреНрди рдмреЛрд▓рд╛рдЗрдиреНрдЫ:

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

рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрджреИ

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

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

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

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

рдо рдиреЛрдЯ рдЧрд░реНрдиреЗрдЫреБ рдХрд┐ рдорд╛рдерд┐рдХреЛ Q рд▓реЗ рдХреЗ рдЧрд░реНрди рд╕рдХреНрдЫ рднрдиреНрдиреЗ рдорд╛рддреНрд░ рдЕрдВрд╢ рд╣реЛ, рдпрд╕рдорд╛ рдЕрдиреНрдп рдЕрджреНрд╡рд┐рддреАрдп рд╕реБрд╡рд┐рдзрд╛рд╣рд░реВ рдкрдирд┐ рдЫрдиреНред рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдПрдХ рдЕрддреНрдпрдиреНрдд рд╕рд░рд▓ IPC рдкреНрд░реЛрдЯреЛрдХрд▓ рдЬрд╕рд▓реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд Q рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдмреАрдЪрдХреЛ рд╕реАрдорд╛ рдореЗрдЯрд╛рдЙрдБрдЫ рд░ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдпреА рд╕рдпреМрдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рд╣рд░реВрд▓рд╛рдИ рдПрдХрд▓ рдиреЗрдЯрд╡рд░реНрдХрдорд╛ рд╕рдВрдпреЛрдЬрди рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ, рдЬреБрди рд╡рд┐рд╢реНрд╡рдХрд╛ рд╡рд┐рднрд┐рдиреНрди рднрд╛рдЧрд╣рд░реВрдорд╛ рджрд░реНрдЬрдиреМрдВ рд╕рд░реНрднрд░рд╣рд░реВрдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рд╣реБрди рд╕рдХреНрдЫред

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

DDoS рд╕реБрд░рдХреНрд╖рд╛, VPS VDS рд╕рд░реНрднрд░рд╣рд░реВ рднрдПрдХрд╛ рд╕рд╛рдЗрдЯрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рднрд░рдкрд░реНрджреЛ рд╣реЛрд╕реНрдЯрд┐рдЩ рдЦрд░рд┐рдж рдЧрд░реНрдиреБрд╣реЛрд╕реН ЁЯФе DDoS рд╕реБрд░рдХреНрд╖рд╛, VPS VDS рд╕рд░реНрднрд░рд╣рд░реВ рд╕рд╣рд┐рддрдХреЛ рднрд░рдкрд░реНрджреЛ рд╡реЗрдмрд╕рд╛рдЗрдЯ рд╣реЛрд╕реНрдЯрд┐рдЩ рдХрд┐рдиреНрдиреБрд╣реЛрд╕реН | ProHoster