class CBookCalculation
Класс для расчёта статистик по данным стакана цен
Сообщите нам, если считаете, что материал размещён без разрешения.
Обращение по товару «cstakan.mqh» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
Библиотека MQL5 для работы с данными рыночной глубины (стакана). Она предоставляет доступ к информации об ордерах и выполняет расчёты объёмов и цен на основе данных стакана.
Класс CMarketDepth является основным интерфейсом для получения данных стакана. Он позволяет выбрать символ, обновлять снимки стакана и проверять наличие данных. Через методы InfoGetInteger и InfoGetDouble доступны свойства: лучшие цены, суммарные объёмы, максимальные объёмы и специальные уровни объёмов.
Класс CBookCalculation выполняет аналитические расчёты на основе данных стакана. Он вычисляет уровни максимальных объёмов, суммарные объёмы, кумулятивные распределения объёмов и отклонения цены по объёму. Расчёты выполняются лениво при первом обращении и кэшируются для последующих вызовов.
Классов: 2 · методов: 23 · конструкторов: 2 · деструкторов: 1 · отдельных функций: 0
class CBookCalculation
Класс для расчёта статистик по данным стакана цен
class CMarketDepth
Класс для доступа к данным рыночной глубины (стакана)
CBookCalculation(CMarketDepth *a_book)
Конструктор класса, принимает указатель на CMarketDepth
void Reset(void)
Сброс ранее рассчитанных данных
int GetMaxVolAskIndex(void)
Получение индекса уровня с максимальным объёмом Ask
long GetMaxVolAsk(void)
Получение максимального объёма Ask
int GetMaxVolBidIndex(void)
Получение индекса уровня с максимальным объёмом Bid
long GetMaxVolBid(void)
Получение максимального объёма Bid
long GetAskVolTotal(void)
Получение суммарного объёма Ask
long GetBidVolTotal(void)
Получение суммарного объёма Bid
long GetAskVolTotalMax(void)
Получение кумулятивного объёма Ask до уровня максимального объёма
long GetBidVolTotalMax(void)
Получение кумулятивного объёма Bid до уровня максимального объёма
long GetAskVolTotalMaxUp(void)
Получение кумулятивного объёма Ask выше уровня максимального объёма
long GetBidVolTotalMaxDn(void)
Получение кумулятивного объёма Bid ниже уровня максимального объёма
int GetSpecVolAskIndex(long a_vol)
Получение индекса уровня Ask с заданным объёмом
long GetSpecVolAsk(long a_vol)
Получение объёма Ask на заданном уровне
int GetSpecVolBidIndex(long a_vol)
Получение индекса уровня Bid с заданным объёмом
long GetSpecVolBid(long a_vol)
Получение объёма Bid на заданном уровне
CMarketDepth()
Конструктор по умолчанию класса CMarketDepth
~CMarketDepth(void)
Деструктор класса CMarketDepth
void Create(const string a_symbol)
Создание и инициализация рыночной глубины для указанного символа
long InfoGetInteger(ENUM_MBOOK_INFO_INTEGER a_property,long a_var)
Получение целочисленного свойства рыночной глубины
double InfoGetDouble(ENUM_MBOOK_INFO_DOUBLE a_property,long a_var)
Получение свойства рыночной глубины типа double
bool Refresh(void)
Обновление данных рыночной глубины
bool IsAvailable(void)
Проверка доступности рыночной глубины
bool SetMarketBookSymbol(string symbol)
Установка символа рыночной глубины
string GetMarketBookSymbol(void)
Получение текущего символа рыночной глубины
double GetDeviationByVol(long a_vol,ENUM_MBOOK_SIDE a_side)
Расчёт отклонения цены по заданному объёму и стороне стакана
??/ / + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / | x x x x x ;0AA @01>BK A> AB0:0=>< F5= 8 53> 40==K<8 x x x x x x |
/ / + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
# p r o p e r t y c o p y r i g h t " C o p y r i g h t 2 0 1 8 , M e t a Q u o t e s S o f t w a r e C o r p . "
# p r o p e r t y l i n k " h t t p s : / / w w w . m q l 5 . c o m "
# i f n d e f _ _ M A R K E T D E P T H _ M Q H _ _
# d e f i n e _ _ M A R K E T D E P T H _ M Q H _ _
/ / + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
# d e f i n e L A S T _ A S K _ I N D E X 0
# d e f i n e L A S T _ B I D _ I N D E X ( m _ d e p t h _ t o t a l - 1 )
e n u m E N U M _ M B O O K _ S I D E
{
M B O O K _ A S K , / / C:07K205B =0 ;8:284=>ABL ?@54>AB02;5==CN ;8<8B=K<8 >@45@0<8 =0 ?@>406C
M B O O K _ B I D / / C:07K205B =0 ;8:284=>ABL ?@54>AB02;5==CN ;8<8B=K<8 >@45@0<8 =0 ?>:C?:C
} ;
/ * !
?@545;O5B <>48D8:0B>@K 4;O ?>;CG5=8O F5;>G8A;5==KE A2>9AB2 AB0:0=0
* /
e n u m E N U M _ M B O O K _ I N F O _ I N T E G E R
{
/ / - 0==05 ?> 8=45:A0< AB0:0=0
M B O O K _ B E S T _ A S K _ I N D E X , / / 8=45:A ;CGH59 F5=K ?@54;>65=8O = 1 9
M B O O K _ B E S T _ B I D _ I N D E X , / / 8=45:A ;CGH59 F5=K A?@>A0 = 2 0
M B O O K _ L A S T _ A S K _ I N D E X , / / 8=45:A EC4H59 8;8 ?>A;54=59 F5=K ?@54;>65=8O = 0
M B O O K _ L A S T _ B I D _ I N D E X , / / 8=45:A EC4H59 8;8 ?>A;54=59 F5=K A?@>A0 = 3 9
/ / - 0==K5 ?> 3;C18=5 AB0:0=0
M B O O K _ D E P T H _ A S K , / / 3;C18=0 AB0:0=0 F5= A> AB>@>=K ?@54;>65=8O 8;8 53> >1I55 :>;8G5AB2> B>@3>2KE C@>2=59
M B O O K _ D E P T H _ B I D , / / 3;C18=0 AB0:0=0 F5= A> AB>@>=K A?@>A0 8;8 53> >1I55 :>;8G5AB2> B>@3>2KE C@>2=59
M B O O K _ D E P T H _ T O T A L , / / >1I0O 3;C18=0 AB0:0=0 F5= 8;8 :>;8G5AB2> B>@3>2KE C@>2=59 =0 ?>:C?:C 8 ?@>406C
/ / - 0==K5 ?> <0:A8<0;L=K< >1J5<0< 2 AB0:0=5
M B O O K _ M A X _ A S K _ V O L U M E , / / <0:A8<0;L=K9 >1J5< ?@54;>65=8O
M B O O K _ M A X _ A S K _ V O L U M E _ I N D E X , / / 8=45:A C@>2=O <0:A8<0;L=>3> >1J5<0 ?@54;>65=8O
M B O O K _ M A X _ B I D _ V O L U M E , / / <0:A8<0;L=K9 >1J5< A?@>A0
M B O O K _ M A X _ B I D _ V O L U M E _ I N D E X , / / 8=45:A C@>2=O <0:A8<0;L=>3> >1J5<0 A?@>A0
/ / - 0==K5 4;O @01>BK 2 0;3>@8B<5 @>1>B0 ?> 7040==><C 7=0G5=8N
M B O O K _ S P E C _ A S K _ V O L U M E , / / >1J5< ?@54;>65=8O =0 =0945==>< 8=45:A5 1;86=53> C@>2=O 1>;LH5 7040==>3> >1J5<0
M B O O K _ S P E C _ A S K _ V O L U M E _ I N D E X , / / 8=45:A 1;86=53> C@>2=O >1J5<0 ?@54;>65=8O 1>;LH5 7040==>3>, >B ;CGH59 F5=K ?@54;>65=8O
M B O O K _ S P E C _ B I D _ V O L U M E , / / >1J5< A?@>A0 =0 =0945==>< 8=45:A5 1;86=53> C@>2=O 1>;LH5 7040==>3> >1J5<0
M B O O K _ S P E C _ B I D _ V O L U M E _ I N D E X , / / 8=45:A 1;86=53> C@>2=O >1J5<0 A?@>A0 1>;LH5 7040==>3>, >B ;CGH59 F5=K A?@>A0
/ / - 0==K5 ?> AC<<0@=K< >1J5<0< 2 AB0:0=5 8 >B 7040==>3> 7=0G5=8O
M B O O K _ A S K _ V O L U M E _ T O T A L , / / AC<<0@=K9 >1J5< ;8<8B=KE >@45@>2 =0 ?@>406C, 4>ABC?=K9 2 B5:CI5< AB0:0=5
M B O O K _ B I D _ V O L U M E _ T O T A L , / / AC<<0@=K9 >1J5< ;8<8B=KE >@45@>2 =0 ?>:C?:C, 4>ABC?=K9 2 B5:CI5< AB0:0=5
M B O O K _ A S K _ V O L U M E _ T O T A L _ M A X , / / AC<<0@=K9 >1J5< ;8<8B=KE >@45@>2 =0 ?@>406C, ?>;CG5==KE >B =0945==>3> >1J5<0 4> F5=K A s k
M B O O K _ B I D _ V O L U M E _ T O T A L _ M A X , / / AC<<0@=K9 >1J5< ;8<8B=KE >@45@>2 =0 ?>:C?:C, ?>;CG5==KE >B =0945==>3> >1J5<0 4> F5=K B i d
M B O O K _ A S K _ V O L U M E _ T O T A L _ M A X _ U P , / / AC<<0@=K9 >1J5< ;8<8B=KE >@45@>2 =0 ?@>406C, ?>;CG5==KE >B =0945==>3> >1J5<0 4> 0 - 3> 8=45:A0
M B O O K _ B I D _ V O L U M E _ T O T A L _ M A X _ D N , / / AC<<0@=K9 >1J5< ;8<8B=KE >@45@>2 =0 ?>:C?:C, ?>;CG5==KE >B =0945==>3> >1J5<0 4> 3 9 8=45:A0
M B O O K _ B U Y _ O R D E R S , / / 25AL >1J5< ;8<8B=KE >@45@>2 =0 ?>:C?:C, 2KAB02;5==KE 2 B5:CI89 <><5=B =0 18@65
M B O O K _ S E L L _ O R D E R S , / / 25AL >1J5< ;8<8B=KE >@45@>2 =0 ?@>406C, 2KAB02;5==KE 2 B5:CI89 <><5=B =0 18@65
} ;
/ * !
?@545;O5B <>48D8:0B>@K 4;O ?>;CG5=8O 25I5AB25==KE A2>9AB2 AB0:0=0
* /
e n u m E N U M _ M B O O K _ I N F O _ D O U B L E
{
/ / 0==K5 ?> B5:CI8< F5=0< AB0:0=0
M B O O K _ B E S T _ A S K _ P R I C E , / / F5=0 A s k - ;CGH53> ?@54;>65=8O
M B O O K _ B E S T _ B I D _ P R I C E , / / F5=0 B i d - ;CGH53> A?@>A0
M B O O K _ L A S T _ A S K _ P R I C E , / / F5=0 EC4H53> 8;8 ?>A;54=53> ?@54;>65=8O
M B O O K _ L A S T _ B I D _ P R I C E , / / F5=0 EC4H53> 8;8 ?>A;54=53> A?@>A0
/ / - 0==K5 4;O @01>BK 2 0;3>@8B<5 @>1>B0 ?> 7040==><C 7=0G5=8N
M B O O K _ S P E C _ A S K _ P R I C E , / / F5=0 7040==>3> ?@54;>65=8O
M B O O K _ S P E C _ B I D _ P R I C E , / / F5=0 7040==>3> A?@>A0
/ / - 0==K5 ?> 8 :>;- 2C 70O2>: 2KAB02;5==KE =0 18@65
M B O O K _ O P E N _ I N T E R E S T , / / >B:@KBK9 8=B5@5A
M B O O K _ B U Y _ O R D E R S _ V O L U M E , / / :>;8G5AB2> >@45@>2 =0 ?>:C?:C, 2KAB02;5==KE 2 B5:CI89 <><5=B =0 18@65
M B O O K _ S E L L _ O R D E R S _ V O L U M E , / / :>;8G5AB2> >@45@>2 =0 ?@>406C, 2KAB02;5==KE 2 B5:CI89 <><5=B =0 18@65
} ;
/ / + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
c l a s s C M a r k e t D e p t h ;
/ * !
\ b r i e f 0AG5B 8=45:A>2 =081>;55 G0AB> 8A?>;L7C5<KE C@>2=59 AB0:0=0 F5=
* /
c l a s s C B o o k C a l c u l a t i o n
{
p r i v a t e :
/ / - - - ?>;O 40==KE <0:A8<C<>2
i n t m _ m a x _ a s k _ i n d e x ; / / 8=45:A <0:A8<0;L=>3> >1J5<0 A?@>A0
l o n g m _ m a x _ a s k _ v o l u m e ; / / >1J5< <0:A8<0;L=>3> A?@>A0
i n t m _ m a x _ b i d _ i n d e x ; / / 8=45:A <0:A8<0;L=>3> >1J5<0 ?@54;>65=8O
l o n g m _ m a x _ b i d _ v o l u m e ; / / >1J5< <0:A8<0;L=>3> ?@54;>65=8O
l o n g m _ s u m _ a s k _ v o l u m e ; / / AC<<0@=K9 >1J5< ;8<8B=KE >@45@>2 =0 ?@>406C, 4>ABC?=K9 2 B5:IC< AB0:0=5
l o n g m _ s u m _ b i d _ v o l u m e ; / / AC<<0@=K9 >1J5< ;8<8B=KE >@45@>2 =0 ?>:C?:C, 4>ABC?=K9 2 B5:CI5< AB0:0=5
l o n g m _ s u m _ a s k _ v o l u m e _ m a x ; / / AC<<0@=K9 >1J5< ;8<8B=KE >@45@>2 =0 ?@>406C, @0AG8B0==K9 >B =0945==>3> >1J5<0
l o n g m _ s u m _ b i d _ v o l u m e _ m a x ; / / AC<<0@=K9 >1J5< ;8<8B=KE >@45@>2 =0 ?>:C?:C, @0AG8B0==K9 >B =0945==>3> >1J5<0
l o n g m _ s u m _ a s k _ v o l u m e _ m a x _ u p ; / / AC<<0@=K9 >1J5< ;8<8B=KE >@45@>2 =0 ?@>406C, @0AG8B0==K9 >B =0945==>3> >1J5<0 4> 0 - 3> 8=45:A0
l o n g m _ s u m _ b i d _ v o l u m e _ m a x _ d n ; / / AC<<0@=K9 >1J5< ;8<8B=KE >@45@>2 =0 ?>:C?:C, @0AG8B0==K9 >B =0945==>3> >1J5<0 4> 3 9 - 3> 8=45:A0
b o o l m _ c a l c _ m a x ; / / D;03, C:07K20NI89 GB> 2A5 =5>1E>48<K5 @0AG5BK <0:A8<0;L=KE 40==KE ?@>872545=K
/ / - - - ?>;O 7040==KE ?0@0<5B@>2
i n t m _ s p e c _ a s k _ i n d e x ; / / 8=45:A 1;86=53> C@>2=O >1J5<0 ?@54;>65=8O 1>;LH5 7040==>3>, >B ;CGH59 F5=K ?@54;>65=8O
l o n g m _ s p e c _ a s k _ v o l u m e ; / / >1J5< ?@54;>65=8O =0 =0945==>< 8=45:A5 1;86=53> C@>2=O 1>;LH5 7040==>3> >1J5<0
i n t m _ s p e c _ b i d _ i n d e x ; / / 8=45:A 1;86=53> C@>2=O >1J5<0 A?@>A0 1>;LH5 7040==>3>, >B ;CGH59 F5=K A?@>A0
l o n g m _ s p e c _ b i d _ v o l u m e ; / / >1J5< A?@>A0 =0 =0945==>< 8=45:A5 1;86=53> C@>2=O 1>;LH5 7040==>3> >1J5<0
b o o l m _ c a l c _ s p e c ; / / D;03, C:07K20NI89 GB> 2A5 =5>1E>48<K5 @0AG5BK 7040==KE ?0@0<5B@>2 ?@>872545=K
C M a r k e t D e p t h * m _ p b o o k ; / / C:070B5;L =0 AB0:0= F5=
p u b l i c :
C B o o k C a l c u l a t i o n ( C M a r k e t D e p t h * a _ b o o k ) ;
/ / ~ C B o o k C a l c u l a t i o n ( v o i d ) ;
v o i d R e s e t ( v o i d ) ; / / A1@>A @0AG5B0
i n t G e t M a x V o l A s k I n d e x ( v o i d ) ; / / ?>;CG8BL 8=45:A <0:A8<0;L=>3> >1J5<0 ?@>4068
l o n g G e t M a x V o l A s k ( v o i d ) ; / / ?>;CG8BL <0:A8<0;L=K9 >1J5< ?@>4068
i n t G e t M a x V o l B i d I n d e x ( v o i d ) ; / / ?>;CG8BL 8=45:A <0:A8<0;L=>3> >1J5<0 ?>:C?:8
l o n g G e t M a x V o l B i d ( v o i d ) ; / / ?>;CG8BL <0:A8<0;L=K9 >1J5< ?>:C?:8
l o n g G e t A s k V o l T o t a l ( v o i d ) ; / / ?>;CG8BL AC<<0@=K9 >1J5< ;8<8B=KE >@45@>2 =0 ?@>406C, 4>ABC?=K9 2 B5:CI5< AB0:0=5
l o n g G e t B i d V o l T o t a l ( v o i d ) ; / / ?>;CG8BL AC<<0@=K9 >1J5< ;8<8B=KE >@45@>2 =0 ?>:C?:C, 4>ABC?=K9 2 B5:CI5< AB0:0=5
l o n g G e t A s k V o l T o t a l M a x ( v o i d ) ; / / ?>;CG8BL AC<<0@=K9 >1J5< ;8<8B=KE >@45@>2 =0 ?@>406C, =0945==KE >B >1J5<0
l o n g G e t B i d V o l T o t a l M a x ( v o i d ) ; / / ?>;CG8BL AC<<0@=K9 >1J5< ;8<8B=KE >@45@>2 =0 ?>:C?:C, =0945==KE >B >1J5<0
l o n g G e t A s k V o l T o t a l M a x U p ( v o i d ) ; / / ?>;CG8BL AC<<0@=K9 >1J5< ;8<8B=KE >@45@>2 =0 ?@>406C, =0945==KE >B >1J5<0 4> 0 - 3> 8=45:A0
l o n g G e t B i d V o l T o t a l M a x D n ( v o i d ) ; / / ?>;CG8BL AC<<0@=K9 >1J5< ;8<8B=KE >@45@>2 =0 ?>:C?:C, =0945==KE >B >1J5<0 4> 3 9 - 3> 8=45:A0
i n t G e t S p e c V o l A s k I n d e x ( l o n g a _ v o l ) ; / / ?>;CG8BL 1;86=89 8=45:A C@>2=O >1J5<0 ?@54>65=8O 1>;LH5 7040==>3>, >B ;CGH59 F5=K ?@>4068
l o n g G e t S p e c V o l A s k ( l o n g a _ v o l ) ; / / ?>;CG8BL >1J5< ?@54;>65=8O =0 =0945==>< 8=45:A5 1;86=53> C@>2=O 1>;LH5 7040==>3> >1J5<0
i n t G e t S p e c V o l B i d I n d e x ( l o n g a _ v o l ) ; / / ?>;CG8BL 1;86=89 8=45:A C@>2=O >1J5<0 A?@>A0 1>;LH5 7040==>3>, >B ;CGH59 F5=K ?>:C?:8
l o n g G e t S p e c V o l B i d ( l o n g a _ v o l ) ; / / ?>;CG8BL >1J5< A?@>A0 =0 =0945==>< 8=45:A5 1;86=53> C@>2=O 1>;LH5 7040==>3> >1J5<0
p r i v a t e :
v o i d C a l c u l a t i o n ( v o i d ) ; / / @0AG5B 8=45:A>2
v o i d C a l c u l a t i o n ( l o n g a _ v o l ) ; / / @0AG5B 8=45:A>2
} ;
/ / + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ * !
>=AB@C:B>@
\ p a r a m C M a r k e t D e p t h * a _ b o o k
* /
C B o o k C a l c u l a t i o n : : C B o o k C a l c u l a t i o n ( C M a r k e t D e p t h * a _ b o o k ) {
R e s e t ( ) ;
m _ p b o o k = a _ b o o k ;
m _ c a l c _ m a x = t r u e ;
m _ c a l c _ s p e c = t r u e ;
}
/ * !
!1@>A @0AG5B0
* /
v o i d C B o o k C a l c u l a t i o n : : R e s e t ( v o i d ) {
m _ m a x _ a s k _ v o l u m e = . 0 ;
m _ m a x _ b i d _ v o l u m e = . 0 ;
m _ m a x _ a s k _ i n d e x = - 1 ;
m _ m a x _ b i d _ i n d e x = - 1 ;
m _ s u m _ a s k _ v o l u m e = . 0 ;
m _ s u m _ b i d _ v o l u m e = . 0 ;
m _ s u m _ a s k _ v o l u m e _ m a x = . 0 ;
m _ s u m _ b i d _ v o l u m e _ m a x = . 0 ;
m _ s u m _ a s k _ v o l u m e _ m a x _ u p = . 0 ;
m _ s u m _ b i d _ v o l u m e _ m a x _ d n = . 0 ;
m _ c a l c _ m a x = f a l s e ;
m _ s p e c _ a s k _ v o l u m e = . 0 ;
m _ s p e c _ b i d _ v o l u m e = . 0 ;
m _ s p e c _ a s k _ i n d e x = 0 ;
m _ s p e c _ b i d _ i n d e x = 0 ;
m _ c a l c _ s p e c = f a l s e ;
}
/ / + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
/ / 0AG5B 8=45:A>2
/ / + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
v o i d C B o o k C a l c u l a t i o n : : C a l c u l a t i o n ( v o i d ) {
i n t _ b e g i n = ( i n t ) m _ p b o o k . I n f o G e t I n t e g e r ( M B O O K _ L A S T _ A S K _ I N D E X ) ; / / - 0 =C;52>9 8=45:A
i n t _ e n d = ( i n t ) m _ p b o o k . I n f o G e t I n t e g e r ( M B O O K _ B E S T _ A S K _ I N D E X ) ; / / - ;CGH0O F5=0 A S K
f o r ( i n t i = _ b e g i n ; i <