LIP/Arch/RU/LIP_v01.004/Include/LIP_Fun1_5_v1.004.mqh
super.admin 291e846eab convert
2025-05-30 15:03:51 +02:00

531 lines
45 KiB
MQL5

//============================================================================================= MQL5 ===
// LibreInfoPDO Function1_5 v1.004 MQL5
// Основные функции алгоритма
// Librecoin (c)2014-2017
//======================================================================================================
#property strict
//============================================================================================= MQL5 ===
// INCLUDE - подключаемые модули
//------------------------------------------------------------------------------------------------------
//----- Обратные ссылки на основной файл проекта
#include "LIP_Ref_5_v1.004.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()
//
//============================================================================================= MQL5 ===
// CalcPositionsSumm() - подсчет суммы позиций с отбором по инструменту магику тикету
// Вход:
// iSymbol - инструмент
// iSelSym - режим отбора по инструменту
// iMagic - magic
// iSelMag - режим отбора по magic
// iTicket - тикет
// iSelTick - режим отбора по тикету
//------------------------------------------------------------------------------------------------------
double CalcPositionsSumm( string &iSymSelect[],
string &iSymEliminat[],
enSelSymMode iSelSym,
ulong &iMagSelect[],
ulong &iMagEliminat[],
enSelMagMode iSelMag,
long &iTickSelect[],
long &iTickEliminat[],
enSelTickMode iSelTick){
//-----
double
PosSumm=0.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;}}//Проверка соответствия тикета модели по критерию выбора
PosSumm+=PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP);
}}//for(int i=PositionsTotal()-1;i>=0;i--)
}}//if(PositionsTotal()>0)
return(PosSumm);
}//CalcPositionsSumm()
//
//============================================================================================= MQL5 ===
// CalcHistoryDealsSumm() - подсчет суммы сделок с отбором по инструменту магику тикету
// Вход:
// iSymbol - инструмент
// iSelSym - режим отбора по инструменту
// iMagic - magic
// iSelMag - режим отбора по magic
// iTicket - тикет
// iSelTick - режим отбора по тикету
//------------------------------------------------------------------------------------------------------
double CalcHistoryDealsSumm( string &iSymSelect[],
string &iSymEliminat[],
enSelSymMode iSelSym,
ulong &iMagSelect[],
ulong &iMagEliminat[],
enSelMagMode iSelMag,
long &iTickSelect[],
long &iTickEliminat[],
enSelTickMode iSelTick){
double
DealSumm=0.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;}}//Проверка соответствия тикета модели по критерию выбора
DealSumm+=HistoryDealGetDouble(Deal_Tick,DEAL_PROFIT)+HistoryDealGetDouble(Deal_Tick,DEAL_SWAP);
}}//for(int i=HistoryDealsTotal()-1;i>=0;i--)
}}//if(HistoryOrdersTotal()>0)
return(DealSumm);
}//CalcHistoryDealsSumm()