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

554 lines
57 KiB
MQL5

//============================================================================================= MQL5 ===
// LibreInfoPDO Main_5 v1.002 MQL5
// Модуль обработки событий
// LibreCoin (c)2014-2017
//======================================================================================================
#property strict
//============================================================================================= MQL5 ===
// INCLUDE - подключаемые модули
//------------------------------------------------------------------------------------------------------
//----- Обратные ссылки на основной файл проекта
#include "LIP_Ref_5_v1.002.mqh"
//============================================================================================= MQL5 ===
// EVENT PROCESSING MODULE
//------------------------------------------------------------------------------------------------------
//
//============================================================================================= MQL5 ===
// On_Init() - инициализация советника
//------------------------------------------------------------------------------------------------------
ENUM_INIT_RETCODE On_Init(){
//----- Счетчики и настройки счетчиков
gnTick=0;
gInTimer=false;
//----- Определяем имя программы
ProgramName=MQLInfoString(MQL_PROGRAM_NAME);
//----- Рассчитываем короткое имя индикатора
ChartID_Str=IntegerToString(ChartID());
IndicatorShortName=vers+" "+StringSubstr(ChartID_Str,StringLen(ChartID_Str)-3);
IndicatorSetString(INDICATOR_SHORTNAME,IndicatorShortName);
//----- Глобальные параметры
TheSymbol=Symbol();
//----- Настройки для отбора по инструменту
{switch(SymSel)
{
case SymSel_all:
{
inSymbolSelector="";
break;
}
case SymSel_curr:
{
inSymbolSelector=TheSymbol;
break;
}
case SymSel_user:
{
inSymbolSelector=SymbolSelector;
break;
}
case SymSel_but:
{
inSymbolSelector=SymbolSelector;
break;
}
default:
{
inSymbolSelector="";
}
}}//switch(SymSel)
//----- Настройки для отбора по магику
{switch(MagSel)
{
case MagSel_all:
{
inMagicSelector=0;
break;
}
case MagSel_user:
{
inMagicSelector=MagicSelector;
break;
}
case MagSel_but:
{
inMagicSelector=MagicSelector;
break;
}
default:
{
inMagicSelector=0;
}
}}//switch(MagSel)
//----- Настройки для отбора по тикету
{switch(TickSel)
{
case TickSel_all:
{
inTickSelector=0;
break;
}
case TickSel_user:
{
inTickSelector=TicketSelector;
break;
}
case TickSel_but:
{
inTickSelector=TicketSelector;
break;
}
default:
{
inTickSelector=0;
}
}}//switch(MagSel)
//----- Настройки таймера
{if(!MQLInfoInteger(MQL_TESTER))//Не тестирование
{
int err=-1;
int count=50;
{while((err!=0)&&(count>0))
{
ResetLastError();
EventSetMillisecondTimer(MSTimerSet); //Установка таймера XXX миллисекунд
err=GetLastError();
{if(err!=0)
{
Sleep(50);
Print("EventSetMillisecondTimer n=",count," err >>",err);
}}//if(err!=0)
count--;
}}//while((err!=0)&&(count>0))
}}//if(!MQLInfoInteger(MQL_TESTER))
//----- Установка и расчет параметров окна индикатора
IndicatorSetInteger(INDICATOR_DIGITS,0);
nSubWindow=ChartWindowFind(0,IndicatorShortName);//Что странно, ожидалось что будет работать ProgramName
IndHeigh=ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,nSubWindow);
IndicatorSetDouble(INDICATOR_MINIMUM,0.0);
IndicatorSetDouble(INDICATOR_MAXIMUM,IndHeigh);
nFirstBar=(int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR);
kScale=(double)ChartGetInteger(0,CHART_WIDTH_IN_BARS)/ChartGetInteger(0,CHART_WIDTH_IN_PIXELS);//Расчет масштаба графика (баров на пиксел)
//----- Запрашиваем историю сделок и ордеров за указанный период серверного времени.
{if(!HistorySelect(0,TimeCurrent()))
{
Print("HistorySelect Error!");
return(INIT_FAILED);
}}//Если неудачно - выходим
//----- Определение количества ордеров, сделок, позиций. Создание графических объектов.
nColo=0; //Счетчик колонок вывода
//----- Открытые позиции
{if(PositionsView)
{
Positions_Total=PositionsTotal(); //Текущие позиции
Positions_Total_Sel=PositionsTotalSel(inSymbolSelector,SymSel,
inMagicSelector,MagSel,
inTickSelector,TickSel);//Текущие позиции отобранные
ColoLabelCreate("LIP",ColoStep*nColo,
"Position="+IntegerToString(Positions_Total_Sel)+"/"+IntegerToString(Positions_Total));//Создаём графический объект заголовка колонки
ColoCreate("LIP",ColoStep*nColo,Positions_Total); //Создаём графический объект для колонки позиций
Positions_Total_Old=Positions_Total; //Текущие позиции в буфер
Positions_Total_Sel_Old=Positions_Total_Sel; //Текущие позиции отобранные в буфер
nColo++;
}}//if(PositionsView)
//----- Открытые отложенные ордера
{if(OrdersView)
{
Orders_Total=OrdersTotal(); //Текущие лимитные ордера
Orders_Total_Sel=OrdersTotalSel(inSymbolSelector,SymSel,
inMagicSelector,MagSel,
inTickSelector,TickSel); //Текущие лимитные ордера отобранные
ColoLabelCreate("LIO",ColoStep*nColo,
"Order="+IntegerToString(Orders_Total_Sel)+"/"+IntegerToString(Orders_Total));//Создаём графический объект заголовка колонки
ColoCreate("LIO",ColoStep*nColo,Orders_Total); //Создаём графический объект для колонки ордеров
Orders_Total_Old=Orders_Total; //Текущие лимитные ордера в буфер
Orders_Total_Sel_Old=Orders_Total_Sel; //Текущие лимитные ордера отобранные в буфер
nColo++;
}}//if(OrdersView)
//----- Выполненные ордера в истории
{if(HistoryOrdersView)
{
History_Orders_Total=HistoryOrdersTotal(); //Закрытые рыночные ордера
History_Orders_Total_Sel=HistoryOrdersTotalSel(inSymbolSelector,SymSel,
inMagicSelector,MagSel,
inTickSelector,TickSel);//Закрытые рыночные ордера отобранные
ColoLabelCreate("LHO",ColoStep*nColo,
"History_Order="+IntegerToString(History_Orders_Total_Sel)+"/"+IntegerToString(History_Orders_Total));//Создаём графический объект заголовка колонки
ColoCreate("LHO",ColoStep*nColo,History_Orders_Total); //Создаём графический объект для колонки ордеров в истории
History_Orders_Total_Old=History_Orders_Total; //Закрытые рыночные ордера в буфер
History_Orders_Total_Sel_Old=History_Orders_Total_Sel; //Закрытые рыночные ордера отобранные в буфер
nColo++;
}}//if(HistoryOrdersView)
//----- Сделки в истории
{if(HistoryDealsView)
{
History_Deals_Total=HistoryDealsTotal(); //Совершенные сделки (выполненные ордера)
History_Deals_Total_Sel=HistoryDealsTotalSel(inSymbolSelector,SymSel,
inMagicSelector,MagSel,
inTickSelector,TickSel);//Совершенные сделки (выполненные ордера) отобранные
ColoLabelCreate("LHD",ColoStep*nColo,
"History_Deal="+IntegerToString(History_Deals_Total_Sel)+"/"+IntegerToString(History_Deals_Total));//Создаём графический объект заголовка колонки
ColoCreate("LHD",ColoStep*nColo,History_Deals_Total); //Создаём графический объект для колонки сделок в истории
History_Deals_Total_Old=History_Deals_Total; //Совершенные сделки (выполненные ордера) в буфер
History_Deals_Total_Sel_Old=History_Deals_Total_Sel; //Совершенные сделки (выполненные ордера) отобранные в буфер
nColo++;
}}//if(HistoryDealsView)
//-----
return(INIT_SUCCEEDED);
}//On_Init()
//
//============================================================================================= MQL5 ===
// On_Tick() - Основной обработчик тиков
//------------------------------------------------------------------------------------------------------
void On_Tick(){
//----- Прерываем загрузку, если индикатор уже есть
{if((ChartWindowFind(0,IndicatorShortName)>=0)&&(ChartWindowFind(0,ProgramName)>=0))
{
Print("Abort loading indicator: ",ProgramName);
ChartIndicatorDelete(0,ChartWindowFind(0,ProgramName),ProgramName);
}}//if(ChartWindowFind(0,IndicatorShortName)>=0)
//-----
//{if(!gInTimer)
//{
gnTick++;
// gInTimer=false;
//}}//if(!InTimer)
{if(gnTick>4294967000)
{
gnTick=100;
}}//if(gnTick>4294967000)
//----- Установка и расчет параметров окна индикатора
nSubWindow=ChartWindowFind(0,IndicatorShortName);
IndHeigh=ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,nSubWindow);
IndicatorSetDouble(INDICATOR_MINIMUM,0.0);
IndicatorSetDouble(INDICATOR_MAXIMUM,IndHeigh);
nFirstBar=(int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR);
kScale=(double)ChartGetInteger(0,CHART_WIDTH_IN_BARS)/ChartGetInteger(0,CHART_WIDTH_IN_PIXELS);
//----- Запрашиваем историю сделок и ордеров за указанный период серверного времени.
{if(!HistorySelect(0,TimeCurrent()))
{
Print("HistorySelect Error!");
return;
}}//Если неудачно - выходим
//----- Определение количества ордеров, сделок, позиций. Вывод графических объектов.
nColo=0; //Счетчик колонок вывода
//----- Список открытых позиций
{if(PositionsView)
{
Positions_Total=PositionsTotal(); //Текущие позиции
Positions_Total_Sel=PositionsTotalSel(inSymbolSelector,SymSel,
inMagicSelector,MagSel,
inTickSelector,TickSel);//Текущие позиции отобранные
{if(Positions_Total_Sel!=Positions_Total_Sel_Old) //Пересчет - перерисовка при изменении количества
{
ColoDelete("LIP",Positions_Total_Old); //Колонка позиций
ColoCreate("LIP",ColoStep*nColo,Positions_Total);
}}//if(Positions_Total_Sel!=Positions_Total_Sel_Old)
ColoLabelMove("LIP",ColoStep*nColo,"Position="+IntegerToString(Positions_Total_Sel)+"/"+IntegerToString(Positions_Total));//Заголовок колонки
//-----
{if(Positions_Total>=0)
{
nRow=0;
CopyTime(TheSymbol,PERIOD_CURRENT,(nFirstBar-(int)((ColoStep*nColo+ColoShift)*kScale)),1,gTime);
{for(int i=Positions_Total-1;i>=0;i--)
{
sTXW="LIP_"+IntegerToString(i); //Устанавливаем имя для текcтового объекта
ObjectSetString(0,sTXW,OBJPROP_TEXT," "); //Обнуление строки вывода
ulong Pos_Tick=PositionGetTicket(i); //Выбираем позицию по номеру в списке
{if(Pos_Tick<=0){continue;}} //Неудачно - следующий
{if(!SymCheck(PositionGetString(POSITION_SYMBOL),inSymbolSelector,SymSel)){continue;}}//Не тот символ - следующий
{if(!MagCheck(PositionGetInteger(POSITION_MAGIC),inMagicSelector,MagSel)){continue;}}//Проверка соответствия магика модели по критерию выбора
{if(!TickCheck(PositionGetInteger(POSITION_TICKET),inTickSelector,TickSel)){continue;}}//Проверка соответствия тикета модели по критерию выбора
ENUM_POSITION_TYPE OrdType=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE);
PosTypeString=EnumToString(OrdType);
StringReplace(PosTypeString,"POSITION_TYPE_","");
PositionDataString= " "+
IntegerToString(i)+"."+
PositionGetString(POSITION_SYMBOL)+" "+
PosTypeString+" ["+
IntegerToString(Pos_Tick)+"-"+
IntegerToString(PositionGetInteger(POSITION_MAGIC))+"-"+
DoubleToString(PositionGetDouble(POSITION_VOLUME),2)+"-"+
DoubleToString(PositionGetDouble(POSITION_PRICE_OPEN),
(int)SymbolInfoInteger(PositionGetString(POSITION_SYMBOL),SYMBOL_DIGITS))+"]="+
DoubleToString(PositionGetDouble(POSITION_PROFIT),2)+" "+
"";
ResetLastError();
{if(!ObjectSetInteger(
0, //Идентификатор чарта
sTXW, //Имя объекта
OBJPROP_TIME, //Изменяем координату времени объекта
gTime[0]
))
{
Print("ObjectSetInteger0 Error=",GetLastError());
continue;
}}//if(!ObjectSetInteger(...
ResetLastError();
{if(!ObjectSetDouble(
0, //Идентификатор чарта
sTXW, //Имя объекта
OBJPROP_PRICE, //Изменяем координату цены объекта
IndHeigh-11*(nRow+1)
))
{
Print("ObjectSetDouble0 Error=",GetLastError());
continue;
}else{
nRow++;
}}//if(!ObjectSetDouble(...
ObjectSetString(0,sTXW,OBJPROP_TEXT,PositionDataString+"");
}}//for(int i=Positions_Total-1;i>=0;i--)
}}//if(Positions_Total>=0)
//----- Запомним текущие счетчики
Positions_Total_Old=Positions_Total; //Текущие позиции
Positions_Total_Sel_Old=Positions_Total_Sel; //Текущие позиции отобранные
//----- Инкремент счетчика колонок
nColo++;
}}//if(PositionsView)
//----- Список открытых отложенных ордеров
{if(OrdersView)
{
Orders_Total=OrdersTotal(); //Текущие лимитные ордера
Orders_Total_Sel=OrdersTotalSel(inSymbolSelector,SymSel,
inMagicSelector,MagSel,
inTickSelector,TickSel); //Текущие лимитные ордера отобранные
{if(Orders_Total_Sel!=Orders_Total_Sel_Old) //Пересчет - перерисовка при изменении количества
{
ColoDelete("LIO",Orders_Total_Old); //Колонка ордеров
ColoCreate("LIO",ColoStep*nColo,Orders_Total);
}}//if(Orders_Total_Sel!=Orders_Total_Sel_Old)
ColoLabelMove("LIO",ColoStep*nColo,"Order="+IntegerToString(Orders_Total_Sel)+"/"+IntegerToString(Orders_Total));//Заголовок колонки
//-----
{if(Orders_Total>=0)
{
nRow=0;
CopyTime(TheSymbol,PERIOD_CURRENT,(nFirstBar-(int)((ColoStep*nColo+ColoShift)*kScale)),1,gTime);
{for(int i=Orders_Total-1;i>=0;i--)
{
sTXW="LIO_"+IntegerToString(i); //Устанавливаем имя для текcтового объекта
ObjectSetString(0,sTXW,OBJPROP_TEXT," "); //Обнуление строки вывода
ulong Ord_Tick=OrderGetTicket(i); //Выбираем ордер по номеру в списке
{if(Ord_Tick<=0){continue;}} //Неудачно - следующий
{if((SymSel!=SymSel_all)&&(inSymbolSelector!=OrderGetString(ORDER_SYMBOL))){continue;}}//Не тот символ - следующий
ENUM_ORDER_TYPE OrdType=(ENUM_ORDER_TYPE)OrderGetInteger(ORDER_TYPE);
OrdTypeString=EnumToString(OrdType);
StringReplace(OrdTypeString,"ORDER_TYPE_","");
OrderDataString= " "+
IntegerToString(i)+"."+
OrderGetString(ORDER_SYMBOL)+" "+
OrdTypeString+" ["+
IntegerToString(Ord_Tick)+"-"+
IntegerToString(OrderGetInteger(ORDER_MAGIC))+"-"+
DoubleToString(OrderGetDouble(ORDER_VOLUME_CURRENT),2)+"-"+
DoubleToString(OrderGetDouble(ORDER_PRICE_OPEN),(int)SymbolInfoInteger(OrderGetString(ORDER_SYMBOL),SYMBOL_DIGITS))+"]"+
"";
ResetLastError();
{if(!ObjectSetInteger(
0, //Идентификатор чарта
sTXW, //Имя объекта
OBJPROP_TIME, //Изменяем координату времени объекта
gTime[0]
))
{
Print("ObjectSetInteger1 Error=",GetLastError());
continue;
}}//if(!ObjectSetInteger(...
ResetLastError();
{if(!ObjectSetDouble(
0, //Идентификатор чарта
sTXW, //Имя объекта
OBJPROP_PRICE, //Изменяем координату цены объекта
IndHeigh-11*(nRow+1)
))
{
Print("ObjectSetDouble1 Error=",GetLastError());
continue;
}else{
nRow++;
}}//if(!ObjectSetDouble(...
ObjectSetString(0,sTXW,OBJPROP_TEXT,OrderDataString+"");
}}//for(int i=Orders_Total-1;i>=0;i--)
}}//if(Orders_Total>=0)
//----- Запомним текущие счетчики
Orders_Total_Old=Orders_Total; //Текущие лимитные ордера
Orders_Total_Sel_Old=Orders_Total_Sel; //Текущие лимитные ордера отобранные
//----- Инкремент счетчика колонок
nColo++;
}}//if(OrdersView)
//----- Список ордеров в истории
{if(HistoryOrdersView)
{
History_Orders_Total=HistoryOrdersTotal(); //Закрытые рыночные ордера
History_Orders_Total_Sel=HistoryOrdersTotalSel(inSymbolSelector,SymSel,
inMagicSelector,MagSel,
inTickSelector,TickSel);//Закрытые рыночные ордера отобранные
{if(History_Orders_Total_Sel!=History_Orders_Total_Sel_Old) //Пересчет - перерисовка при изменении количества
{
ColoDelete("LHO",History_Orders_Total_Old); //Колонка истории ордеров
ColoCreate("LHO",ColoStep*nColo,History_Orders_Total);
}}//if(History_Orders_Total_Sel!=History_Orders_Total_Sel_Old)
ColoLabelMove("LHO",ColoStep*nColo,"History Order="+IntegerToString(History_Orders_Total_Sel)+"/"+IntegerToString(History_Orders_Total));//Заголовок колонки
//-----
{if(History_Orders_Total>=0)
{
nRow=0;
CopyTime(TheSymbol,PERIOD_CURRENT,(nFirstBar-(int)((ColoStep*nColo+ColoShift)*kScale)),1,gTime);
{for(int i=History_Orders_Total-1;i>=0;i--)
{
sTXW="LHO_"+IntegerToString(i); //Устанавливаем имя для текcтового объекта
ObjectSetString(0,sTXW,OBJPROP_TEXT," "); //Обнуление строки вывода
ulong Ord_Tick=HistoryOrderGetTicket(i); //Выбираем ордер по номеру в списке
{if(Ord_Tick<=0){continue;}} //Неудачно - следующий
{if((SymSel!=SymSel_all)&&(inSymbolSelector!=HistoryOrderGetString(Ord_Tick,ORDER_SYMBOL))){continue;}}//Не тот символ - следующий
ENUM_ORDER_TYPE OrdType=(ENUM_ORDER_TYPE)HistoryOrderGetInteger(Ord_Tick,ORDER_TYPE);
OrdTypeString=EnumToString(OrdType);
StringReplace(OrdTypeString,"ORDER_TYPE_","");
OrderDataString= " "+
IntegerToString(i)+"."+
HistoryOrderGetString(Ord_Tick,ORDER_SYMBOL)+" "+
OrdTypeString+" ["+
IntegerToString(Ord_Tick)+"-"+
IntegerToString(HistoryOrderGetInteger(Ord_Tick,ORDER_MAGIC))+"-"+
DoubleToString(HistoryOrderGetDouble(Ord_Tick,ORDER_VOLUME_INITIAL),2)+"-"+
DoubleToString(HistoryOrderGetDouble(Ord_Tick,ORDER_PRICE_OPEN),
(int)SymbolInfoInteger(HistoryOrderGetString(Ord_Tick,ORDER_SYMBOL),SYMBOL_DIGITS))+"]"+
"";
ResetLastError();
{if(!ObjectSetInteger(
0, //Идентификатор чарта
sTXW, //Имя объекта
OBJPROP_TIME, //Изменяем координату времени объекта
gTime[0]
))
{
Print("ObjectSetInteger2 Error=",GetLastError());
continue;
}}//if(!ObjectSetInteger(...
ResetLastError();
{if(!ObjectSetDouble(
0, //Идентификатор чарта
sTXW, //Имя объекта
OBJPROP_PRICE, //Изменяем координату цены объекта
IndHeigh-11*(nRow+1)
))
{
Print("ObjectSetDouble2 Error=",GetLastError());
continue;
}else{
nRow++;
}}//if(!ObjectSetDouble(...
ObjectSetString(0,sTXW,OBJPROP_TEXT,OrderDataString+"");
}}//for(int i=History_Orders_Total-1;i>=0;i--)
}}//if(History_Orders_Total>=0)
//----- Запомним текущие счетчики
History_Orders_Total_Old=History_Orders_Total; //Закрытые рыночные ордера
History_Orders_Total_Sel_Old=History_Orders_Total_Sel;//Закрытые рыночные ордера отобранные
//----- Инкремент счетчика колонок
nColo++;
}}//if(HistoryOrdersView)
//----- Список сделок в истории
{if(HistoryDealsView)
{
History_Deals_Total=HistoryDealsTotal(); //Совершенные сделки (выполненные ордера)
History_Deals_Total_Sel=HistoryDealsTotalSel(inSymbolSelector,SymSel,
inMagicSelector,MagSel,
inTickSelector,TickSel);//Совершенные сделки (выполненные ордера) отобранные
{if(History_Deals_Total_Sel!=History_Deals_Total_Sel_Old) //Пересчет - перерисовка при изменении количества
{
ColoDelete("LHD",History_Deals_Total_Old); //Колонка истории позиций
ColoCreate("LHD",ColoStep*nColo,History_Deals_Total);
}}//if(History_Deals_Total_Sel!=History_Deals_Total_Sel_Old)
ColoLabelMove("LHD",ColoStep*nColo,"History Dial="+IntegerToString(History_Deals_Total_Sel)+"/"+IntegerToString(History_Deals_Total));//Заголовок колонки
//-----
{if(History_Deals_Total>=0)
{
nRow=0;
CopyTime(TheSymbol,PERIOD_CURRENT,(nFirstBar-(int)((ColoStep*nColo+ColoShift)*kScale)),1,gTime);
{for(int i=History_Deals_Total-1;i>=0;i--)
{
sTXW="LHD_"+IntegerToString(i); //Устанавливаем имя для текcтового объекта
ObjectSetString(0,sTXW,OBJPROP_TEXT," "); //Обнуление строки вывода
ulong Deal_Tick=HistoryDealGetTicket(i); //Выбираем ордер по номеру в списке
{if(Deal_Tick<=0){continue;}} //Неудачно - следующий
{if((SymSel!=SymSel_all)&&(inSymbolSelector!=HistoryDealGetString(Deal_Tick,DEAL_SYMBOL))){continue;}}//Не тот символ - следующий
ENUM_DEAL_TYPE DealType=(ENUM_DEAL_TYPE)HistoryDealGetInteger(Deal_Tick,DEAL_TYPE);
DealTypeString=EnumToString(DealType);
StringReplace(DealTypeString,"DEAL_TYPE_","");
DealDataString= " "+
IntegerToString(i)+"."+
HistoryDealGetString(Deal_Tick,DEAL_SYMBOL)+" "+
DealTypeString+" ["+
IntegerToString(Deal_Tick)+"-"+
IntegerToString(HistoryDealGetInteger(Deal_Tick,DEAL_MAGIC))+"-"+
DoubleToString(HistoryDealGetDouble(Deal_Tick,DEAL_VOLUME),2)+"-"+
DoubleToString(HistoryDealGetDouble(Deal_Tick,DEAL_PRICE),
(int)SymbolInfoInteger(HistoryDealGetString(Deal_Tick,DEAL_SYMBOL),SYMBOL_DIGITS))+"]="+
DoubleToString(HistoryDealGetDouble(Deal_Tick,DEAL_PROFIT),2)+" "+
"";
ResetLastError();
{if(!ObjectSetInteger(
0, //Идентификатор чарта
sTXW, //Имя объекта
OBJPROP_TIME, //Изменяем координату времени объекта
gTime[0]
))
{
Print("ObjectSetInteger3 Error=",GetLastError());
continue;
}}//if(!ObjectSetInteger(...
ResetLastError();
{if(!ObjectSetDouble(
0, //Идентификатор чарта
sTXW, //Имя объекта
OBJPROP_PRICE, //Изменяем координату цены объекта
IndHeigh-11*(nRow+1)
))
{
Print("ObjectSetDouble3 Error=",GetLastError());
continue;
}else{
nRow++;
}}//if(!ObjectSetDouble(...
ObjectSetString(0,sTXW,OBJPROP_TEXT,DealDataString+"");
}}//for(int i=History_Deals_Total-1;i>=0;i--)
}}//if(History_Deals_Total>=0)
//----- Запомним текущие счетчики
History_Deals_Total_Old=History_Deals_Total; //Совершенные сделки (выполненные ордера)
History_Deals_Total_Sel_Old=History_Deals_Total_Sel; //Совершенные сделки (выполненные ордера) отобранные
//----- Инкремент счетчика колонок
nColo++;
}}//if(HistoryDealsView)
//----- Формируем строку комментария на чарте
{if(CommentView)
{
CommentLine[0]=""+
"PositionsTotal="+IntegerToString(Positions_Total)+" "+
"OrdersTotal="+IntegerToString(Orders_Total)+" "+
"";
CommentLine[1]=""+
"HistoryOrdersTotal="+IntegerToString(History_Orders_Total)+" "+
"HistoryDealsTotal="+IntegerToString(History_Deals_Total)+" "+
"";
Comment( CommentLine[0]+" "+CommentLine[1]+" "+
(string)(datetime)(TimeCurrent()-ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,0)*PeriodSeconds(PERIOD_CURRENT))+" "+
_n+"Ticks>>"+IntegerToString(gnTick)+" Tims>>"+IntegerToString(gnTimer));
}}//if(CommentView)
//----- Перерисовка чарта
ChartRedraw();
//-----
return;
}//On_Tick()
//
//============================================================================================= MQL5 ===
// On_Timer - Обработка событий по таймеру
//------------------------------------------------------------------------------------------------------
void On_Timer(){
//-----
gnTimer++;
{if(gnTimer>4294967000)
{
gnTimer=100;
}}//if(gnTimer>4294967000)
gInTimer=true;
On_Tick();
}//On_Timer()