//============================================================================================= MQL5 === // LibreInfoPDO Function1_5 v1.003 MQL5 // Основные функции алгоритма // Librecoin (c)2014-2017 //====================================================================================================== #property strict //============================================================================================= MQL5 === // INCLUDE - подключаемые модули //------------------------------------------------------------------------------------------------------ //----- Обратные ссылки на основной файл проекта #include "LIP_Ref_5_v1.003.mqh" //============================================================================================= MQL5 === // MAIN FUNCTIONS //------------------------------------------------------------------------------------------------------ // //============================================================================================= MQL5 === // CalcPositionsTotal() - подсчет количества позиций с отбором по инструменту // Вход: // iSymbol - инструмент // iSelSym - режим отбора по инструменту // iMagic - magic // iSelMag - режим отбора по magic // iTicket - тикет // iSelTick - режим отбора по тикету //------------------------------------------------------------------------------------------------------ int CalcPositionsTotal( string &iSymSelect[], string &iSymEliminat[], enSelSymMode iSelSym, ulong &iMagSelect[], ulong &iMagEliminat[], enSelMagMode iSelMag, long &iTickSelect[], long &iTickEliminat[], enSelTickMode iSelTick){ //----- int nPosition=0; //----- int iPositionsTotal=PositionsTotal(); {if(iPositionsTotal>0) { {for(int i=PositionsTotal()-1;i>=0;i--) { ulong Pos_Tick=PositionGetTicket(i); //Выбираем позицию по номеру в списке {if(Pos_Tick<=0){continue;}} //Неудачно - следующий string PosSymbol=PositionGetString(POSITION_SYMBOL); {if(!CheckSym(PosSymbol,iSymSelect,iSymEliminat,iSelSym)){continue;}}//Проверка соответствия символа модели по критерию выбора ulong PosMagic=PositionGetInteger(POSITION_MAGIC); {if(!CheckMag(PosMagic,iMagSelect,iMagEliminat,iSelMag)){continue;}}//Проверка соответствия магика модели по критерию выбора long PosTicket=PositionGetInteger(POSITION_TICKET); {if(!CheckTick(PosTicket,inSelectTick,inEliminatTick,iSelTick)){continue;}}//Проверка соответствия тикета модели по критерию выбора nPosition++; }}//for(int i=PositionsTotal()-1;i>=0;i--) }}//if(PositionsTotal()>0) return(nPosition); }//CalcPositionsTotal() // //============================================================================================= MQL5 === // CalcOrdersTotal() - подсчет количества ордеров с отбором по инструменту // Вход: // iSymbol - инструмент // iSelSym - режим отбора по инструменту // iMagic - magic // iSelMag - режим отбора по magic // iTicket - тикет // iSelTick - режим отбора по тикету //------------------------------------------------------------------------------------------------------ int CalcOrdersTotal( string &iSymSelect[], string &iSymEliminat[], enSelSymMode iSelSym, ulong &iMagSelect[], ulong &iMagEliminat[], enSelMagMode iSelMag, long &iTickSelect[], long &iTickEliminat[], enSelTickMode iSelTick){ int nOrder=0; //----- {if(OrdersTotal()>0) { {for(int i=OrdersTotal()-1;i>=0;i--) { ulong Ord_Tick=OrderGetTicket(i); //Выбираем ордер по номеру в списке {if(Ord_Tick<=0){continue;}} //Неудачно - следующий {if(!CheckSym(OrderGetString(ORDER_SYMBOL),iSymSelect,iSymEliminat,iSelSym)){continue;}}//Проверка соответствия символа модели по критерию выбора {if(!CheckMag(OrderGetInteger(ORDER_MAGIC),iMagSelect,iMagEliminat,iSelMag)){continue;}}//Проверка соответствия магика модели по критерию выбора {if(!CheckTick(OrderGetInteger(ORDER_TICKET),inSelectTick,inEliminatTick,iSelTick)){continue;}}//Проверка соответствия тикета модели по критерию выбора nOrder++; }}//for(int i=OrdersTotal()-1;i>=0;i--) }}//if(OrdersTotal()>0) return(nOrder); }//CalcOrdersTotal() // //============================================================================================= MQL5 === // CalcHistoryOrdersTotal() - подсчет количества ордеров в истории с отбором по инструменту // Вход: // iSymbol - инструмент // iSelSym - режим отбора по инструменту // iMagic - magic // iSelMag - режим отбора по magic // iTicket - тикет // iSelTick - режим отбора по тикету //------------------------------------------------------------------------------------------------------ int CalcHistoryOrdersTotal(string &iSymSelect[], string &iSymEliminat[], enSelSymMode iSelSym, ulong &iMagSelect[], ulong &iMagEliminat[], enSelMagMode iSelMag, long &iTickSelect[], long &iTickEliminat[], enSelTickMode iSelTick){ int nOrder=0; //----- {if(HistoryOrdersTotal()>0) { {for(int i=HistoryOrdersTotal()-1;i>=0;i--) { ulong Ord_Tick=HistoryOrderGetTicket(i); //Выбираем ордер в истории по номеру в списке {if(Ord_Tick<=0){continue;}} //Неудачно - следующий {if(!CheckSym(HistoryOrderGetString(Ord_Tick,ORDER_SYMBOL),iSymSelect,iSymEliminat,iSelSym)){continue;}}//Проверка соответствия символа модели по критерию выбора {if(!CheckMag(HistoryOrderGetInteger(Ord_Tick,ORDER_MAGIC),iMagSelect,iMagEliminat,iSelMag)){continue;}}//Проверка соответствия магика модели по критерию выбора {if(!CheckTick(HistoryOrderGetInteger(Ord_Tick,ORDER_TICKET),inSelectTick,inEliminatTick,iSelTick)){continue;}}//Проверка соответствия тикета модели по критерию выбора nOrder++; }}//for(int i=HistoryOrdersTotal()-1;i>=0;i--) }}//if(HistoryOrdersTotal()>0) return(nOrder); }//CalcHistoryOrdersTotal() // //============================================================================================= MQL5 === // CalcHistoryDealsTotal() - подсчет количества сделок с отбором по инструменту // Вход: // iSymbol - инструмент // iSelSym - режим отбора по инструменту // iMagic - magic // iSelMag - режим отбора по magic // iTicket - тикет // iSelTick - режим отбора по тикету //------------------------------------------------------------------------------------------------------ int CalcHistoryDealsTotal( string &iSymSelect[], string &iSymEliminat[], enSelSymMode iSelSym, ulong &iMagSelect[], ulong &iMagEliminat[], enSelMagMode iSelMag, long &iTickSelect[], long &iTickEliminat[], enSelTickMode iSelTick){ int nDeal=0; //----- {if(HistoryDealsTotal()>0) { {for(int i=HistoryDealsTotal()-1;i>=0;i--) { ulong Deal_Tick=HistoryDealGetTicket(i); //Выбираем сделку по номеру в списке {if(Deal_Tick<=0){continue;}} //Неудачно - следующий {if(!CheckSym(HistoryDealGetString(Deal_Tick,DEAL_SYMBOL),iSymSelect,iSymEliminat,iSelSym)){continue;}}//Проверка соответствия символа модели по критерию выбора {if(!CheckMag(HistoryDealGetInteger(Deal_Tick,DEAL_MAGIC),iMagSelect,iMagEliminat,iSelMag)){continue;}}//Проверка соответствия магика модели по критерию выбора {if(!CheckTick(HistoryDealGetInteger(Deal_Tick,DEAL_TICKET),inSelectTick,inEliminatTick,iSelTick)){continue;}}//Проверка соответствия тикета модели по критерию выбора nDeal++; }}//for(int i=HistoryDealsTotal()-1;i>=0;i--) }}//if(HistoryOrdersTotal()>0) return(nDeal); }//CalcHistoryDealsTotal() // //============================================================================================= MQL5 === // CheckSym() - Проверка соответствия символа модели по критерию выбора // Вход: // aSymbol - проверяемый инструмент // iSymSelect - массив отбора образцов // iSymEliminat- массив отсева образцов // iSelSym - критерий выбора //------------------------------------------------------------------------------------------------------ bool CheckSym(string aSymbol, string &iSymSelect[], string &iSymEliminat[], enSelSymMode iSelSym){ //----- bool Result=false; //----- {switch(iSelSym) { case SelSym_all: { Result=true; break; } case SelSym_curr: { {if((aSymbol!=iSymSelect[0])&&(iSymSelect[0]!="")){break;}}//Отбор по символу Result=true; break; } case SelSym_user: { {if((aSymbol!=iSymSelect[0])&&(iSymSelect[0]!="")){break;}}//Отбор по символу Result=true; break; } case SelSym_but: { {if((aSymbol==iSymEliminat[0])&&(iSymEliminat[0]!="")){break;}}//Отбор по символу Result=true; break; } case SelSym_list://по списку отбора { //Проверка наличия символа в списке отбора Result=false; {for(int i=0;i<=nSymSelectList-1;i++) { {if((aSymbol==iSymSelect[i])&&(iSymSelect[i]!=""))//Отбор по символу { Result=true; break; }}//if((aSymbol==iSymSelect[i])&&(iSymSelect[i]!="")) }}//for(int i=0;i<=nSymSelectList-1;i++) break; } case SelSym_butlist://по списку отсева { //Проверка наличия символа в списке отсева Result=true; {for(int i=0;i<=nSymEliminatList-1;i++) { {if((aSymbol==iSymEliminat[i])&&(iSymEliminat[i]!=""))//Отсев по символу { Result=false; break; }}//if((aSymbol==iSymEliminat[i])&&(iSymEliminat[i]!="")) }}//for(int i=0;i<=nSymSelectList-1;i++) break; } case SelSym_listbutlist://по спискам отбора и отсева { //Проверка наличия символа в списке отбора Result=false; {for(int i=0;i<=nSymSelectList-1;i++) { {if((aSymbol==iSymSelect[i])&&(iSymSelect[i]!=""))//Отбор по символу { //Проверка наличия символа в списке отсева Result=true; {for(int j=0;j<=nSymEliminatList-1;j++) { {if((aSymbol==iSymEliminat[j])&&(iSymEliminat[j]!=""))//Отсев по символу { Result=false; break; }}//if((aSymbol==iSymEliminat[j])&&(iSymEliminat[j]!="")) }}//for(int j=0;j<=nSymEliminatList-1;j++) break; }}//if((aSymbol==iSymSelect[i])&&(iSymSelect[i]!="")) }}//for(int i=0;i<=nSymSelectList-1;i++) break; } default: { break; } }}//switch(iSelSym) return(Result); }//CheckSym() // //============================================================================================= MQL5 === // CheckMag() - Проверка соответствия магика по критерию выбора // Вход: // aMagic - проверяемый магик // iMagSelect - массив отбора образцов // iMagEliminat - массив отсева образцов // iSelMag - критерий выбора //------------------------------------------------------------------------------------------------------ bool CheckMag(ulong aMagic, ulong &iMagSelect[], ulong &iMagEliminat[], enSelMagMode iSelMag){ //----- bool Result=false; //----- {switch(iSelMag) { case SelMag_all: { Result=true; break; } case SelMag_user: { {if(aMagic!=iMagSelect[0]){break;}}//Отбор по магику Result=true; break; } case SelMag_but: { {if(aMagic==iMagEliminat[0]){break;}}//Отбор по магику Result=true; break; } case SelMag_list://по списку отбора { //Проверка наличия магика в списке отбора Result=false; {for(int i=0;i<=nMagSelectList-1;i++) { {if(aMagic==iMagSelect[i])//Отбор по магику { Result=true; break; }}//if((aMagic==iMagSelect[i])&&(iMagSelect[i]!=0)) }}//for(int i=0;i<=nMagSelectList-1;i++) break; } case SelMag_butlist://по списку отсева { //Проверка наличия магика в списке отсева Result=true; {for(int i=0;i<=nMagEliminatList-1;i++) { {if(aMagic==iMagEliminat[i])//Отсев по магику { Result=false; break; }}//if((aMagic==iMagEliminat[i])&&(iMagEliminat[i]!=0)) }}//for(int i=0;i<=nMagSelectList-1;i++) break; } case SelMag_listbutlist://по спискам отбора и отсева { //Проверка наличия магика в списке отбора Result=false; {for(int i=0;i<=nMagSelectList-1;i++) { {if(aMagic==iMagSelect[i])//Отбор по магику { //Проверка наличия магика в списке отсева Result=true; {for(int j=0;j<=nMagEliminatList-1;j++) { {if(aMagic==iMagEliminat[j])//Отсев по магику { Result=false; break; }}//if((aMagic==iMagEliminat[j])&&(iMagEliminat[j]!=0)) }}//for(int j=0;j<=nMagEliminatList-1;j++) break; }}//if((aMagic==iMagSelect[i])&&(iMagSelect[i]!=0)) }}//for(int i=0;i<=nMagSelectList-1;i++) break; } default: { break; } }}//switch(iSelSym) return(Result); }//CheckMag() // //============================================================================================= MQL5 === // CheckTick() - Проверка соответствия тикета по критерию выбора // Вход: // aTicket - проверяемый тикет // iTickSelect - массив отбора образцов // iTickEliminat - массив отсева образцов // iSelTick - критерий выбора //------------------------------------------------------------------------------------------------------ bool CheckTick( long aTicket, long &iTickSelect[], long &iTickEliminat[], enSelTickMode iSelTick){ //----- bool Result=false; //----- {switch(iSelTick) { case SelTick_all: { Result=true; break; } case SelTick_user: { {if((aTicket!=iTickSelect[0])&&(iTickSelect[0]!=0)){break;}}//Отбор по тикету Result=true; break; } case SelTick_but: { {if((aTicket==iTickEliminat[0])&&(iTickEliminat[0]!=0)){break;}}//Отбор по тикету Result=true; break; } case SelTick_list://по списку отбора { //Проверка наличия тикета в списке отбора Result=false; {for(int i=0;i<=nTickSelectList-1;i++) { {if((aTicket==iTickSelect[i])&&(iTickSelect[i]!=0))//Отбор по тикету { Result=true; break; }}//if((aTicket==iTickSelect[i])&&(iTickSelect[i]!=0)) }}//for(int i=0;i<=nTickSelectList-1;i++) break; } case SelTick_butlist://по списку отсева { //Проверка наличия тикета в списке отсева Result=true; {for(int i=0;i<=nTickEliminatList-1;i++) { {if((aTicket==iTickEliminat[i])&&(iTickEliminat[i]!=0))//Отсев по тикету { Result=false; break; }}//if((aTicket==iTickSelect[i])&&(iTickSelect[i]!=0)) }}//for(int i=0;i<=nTickSelectList-1;i++) break; } case SelTick_listbutlist://по спискам отбора и отсева { //Проверка наличия тикета в списке отбора Result=false; {for(int i=0;i<=nTickSelectList-1;i++) { {if((aTicket==iTickSelect[i])&&(iTickSelect[i]!=0))//Отбор по тикету { //Проверка наличия тикета в списке отсева Result=true; {for(int j=0;j<=nTickEliminatList-1;j++) { {if((aTicket==iTickEliminat[j])&&(iTickEliminat[j]!=0))//Отсев по тикету { Result=false; break; }}//if((aTicket==iTickEliminat[j])&&(iTickEliminat[j]!=0)) }}//for(int j=0;j<=nTickEliminatList-1;j++) break; }}//if((aTicket==iTickSelect[i])&&(iTickSelect[i]!=0)) }}//for(int i=0;i<=nTickSelectList-1;i++) break; } default: { break; } }}//switch(iSelSym) return(Result); }//CheckTick() //