445 lines
46 KiB
MQL5
445 lines
46 KiB
MQL5
//============================================================================================= MQL5 ===
|
|
// LibreInfoPDO Main_5 v1.001 MQL5
|
|
// Модуль обработки событий
|
|
// LibreCoin (c)2014-2017
|
|
//======================================================================================================
|
|
#property strict
|
|
//============================================================================================= MQL5 ===
|
|
// INCLUDE - подключаемые модули
|
|
//------------------------------------------------------------------------------------------------------
|
|
//----- Обратные ссылки на основной файл проекта
|
|
#include "LIP_Ref_5_v1.001.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_curr:
|
|
{
|
|
inSymbolSelector=TheSymbol;
|
|
break;
|
|
}
|
|
case SymSel_user:
|
|
{
|
|
inSymbolSelector=SymbolSelector;
|
|
break;
|
|
}
|
|
case SymSel_all:
|
|
{
|
|
inSymbolSelector="";
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
inSymbolSelector="";
|
|
}
|
|
}}//switch(SymSel)
|
|
//----- Настройки таймера
|
|
{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);
|
|
IndHeigh=ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,1);
|
|
IndicatorSetDouble(INDICATOR_MINIMUM,0.0);
|
|
IndicatorSetDouble(INDICATOR_MAXIMUM,IndHeigh);
|
|
nFirstBar=(int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,1);
|
|
kScale=(double)ChartGetInteger(0,CHART_WIDTH_IN_BARS)/ChartGetInteger(0,CHART_WIDTH_IN_PIXELS);//Расчет масштаба графика (баров на пиксел)
|
|
nSubWindow=ChartWindowFind(0,IndicatorShortName);//Что странно, ожидалось что будет работать ProgramName
|
|
//----- Запрашиваем историю сделок и ордеров за указанный период серверного времени.
|
|
{if(!HistorySelect(0,TimeCurrent()))
|
|
{
|
|
Print("HistorySelect Error!");
|
|
return(INIT_FAILED);
|
|
}}//Если неудачно - выходим
|
|
//----- Определение количества ордеров, сделок, позиций
|
|
//----- Общее
|
|
Positions_Total=PositionsTotal(); //Текущие позиции
|
|
Orders_Total=OrdersTotal(); //Текущие лимитные ордера
|
|
History_Orders_Total=HistoryOrdersTotal(); //Закрытые рыночные ордера
|
|
History_Deals_Total=HistoryDealsTotal(); //Совершенные сделки (выполненные ордера)
|
|
//----- Отобранное
|
|
Positions_Total_Sel=PositionsTotalSel(inSymbolSelector); //Текущие позиции
|
|
Orders_Total_Sel=OrdersTotalSel(inSymbolSelector); //Текущие лимитные ордера
|
|
History_Orders_Total_Sel=HistoryOrdersTotalSel(inSymbolSelector);//Закрытые рыночные ордера
|
|
History_Deals_Total_Sel=HistoryDealsTotalSel(inSymbolSelector);//Совершенные сделки (выполненные ордера)
|
|
//----- Открытые позиции
|
|
ColoLabelCreate("LIP",0,"Position="+IntegerToString(Positions_Total_Sel)+"/"+IntegerToString(Positions_Total));
|
|
ColoCreate("LIP",0,Positions_Total);
|
|
//----- Открытые отложенные ордера
|
|
ColoLabelCreate("LIO",ColoStep,"Order="+IntegerToString(Orders_Total_Sel)+"/"+IntegerToString(Orders_Total));
|
|
ColoCreate("LIO",ColoStep,Orders_Total);
|
|
//----- Выполненные ордера в истории
|
|
ColoLabelCreate("LHO",ColoStep*2,"History_Order="+IntegerToString(History_Orders_Total_Sel)+"/"+IntegerToString(History_Orders_Total));
|
|
ColoCreate("LHO",ColoStep*2,History_Orders_Total);
|
|
//----- Сделки в истории
|
|
ColoLabelCreate("LHD",ColoStep*3,"History_Deal="+IntegerToString(History_Deals_Total_Sel)+"/"+IntegerToString(History_Deals_Total));
|
|
ColoCreate("LHD",ColoStep*3,History_Deals_Total);
|
|
//----- Запомним текущие количества
|
|
Orders_Total_Old=Orders_Total; //Текущие лимитные ордера
|
|
History_Orders_Total_Old=History_Orders_Total; //Закрытые рыночные ордера
|
|
History_Deals_Total_Old=History_Deals_Total; //Совершенные сделки (выполненные ордера)
|
|
Positions_Total_Old=Positions_Total; //Текущие позиции
|
|
Positions_Total_Sel_Old=Positions_Total_Sel; //Текущие позиции отобранные
|
|
Orders_Total_Sel_Old=Orders_Total_Sel; //Текущие лимитные ордера отобранные
|
|
History_Orders_Total_Sel_Old=History_Orders_Total_Sel; //Закрытые рыночные ордера отобранные
|
|
History_Deals_Total_Sel_Old=History_Deals_Total_Sel; //Совершенные сделки (выполненные ордера) отобранные
|
|
//-----
|
|
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)
|
|
//----- Установка и расчет параметров окна индикатора
|
|
IndHeigh=ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,1);
|
|
IndicatorSetDouble(INDICATOR_MINIMUM,0.0);
|
|
IndicatorSetDouble(INDICATOR_MAXIMUM,IndHeigh);
|
|
nFirstBar=(int)ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,1);
|
|
kScale=(double)ChartGetInteger(0,CHART_WIDTH_IN_BARS)/ChartGetInteger(0,CHART_WIDTH_IN_PIXELS);
|
|
nSubWindow=ChartWindowFind(0,IndicatorShortName);
|
|
//----- Запрашиваем историю сделок и ордеров за указанный период серверного времени.
|
|
{if(!HistorySelect(0,TimeCurrent()))
|
|
{
|
|
Print("HistorySelect Error!");
|
|
return;
|
|
}}//Если неудачно - выходим
|
|
//----- Определение количества ордеров, сделок, позиций
|
|
//----- Общее
|
|
Positions_Total=PositionsTotal(); //Текущие позиции
|
|
Orders_Total=OrdersTotal(); //Текущие лимитные ордера
|
|
History_Orders_Total=HistoryOrdersTotal(); //Закрытые рыночные ордера
|
|
History_Deals_Total=HistoryDealsTotal(); //Совершенные сделки (выполненные ордера)
|
|
//----- Отобранное
|
|
Positions_Total_Sel=PositionsTotalSel(inSymbolSelector); //Текущие позиции отобранные
|
|
Orders_Total_Sel=OrdersTotalSel(inSymbolSelector); //Текущие лимитные ордера отобранные
|
|
History_Orders_Total_Sel=HistoryOrdersTotalSel(inSymbolSelector);//Закрытые рыночные ордера отобранные
|
|
History_Deals_Total_Sel=HistoryDealsTotalSel(inSymbolSelector);//Совершенные сделки (выполненные ордера) отобранные
|
|
//-----
|
|
//CommentLine[0]=""+
|
|
// "PositionsTotal="+IntegerToString(Positions_Total)+" "+
|
|
// "OrdersTotal="+IntegerToString(Orders_Total)+" "+
|
|
// "";
|
|
//CommentLine[1]=""+
|
|
// "HistoryOrdersTotal="+IntegerToString(History_Orders_Total)+" "+
|
|
// "HistoryDealsTotal="+IntegerToString(History_Deals_Total)+" "+
|
|
// "";
|
|
//----- Пересчеты - перерисовки при изменении количества
|
|
//----- Список открытых позиций
|
|
{if(Positions_Total_Sel!=Positions_Total_Sel_Old)
|
|
{
|
|
ColoDelete("LIP",Positions_Total_Old); //Колонка позиций
|
|
ColoCreate("LIP",0,Positions_Total);
|
|
}}//if(Positions_Total_Sel!=Positions_Total_Sel_Old)
|
|
//----- Список открытых отложенных ордеров
|
|
{if(Orders_Total_Sel!=Orders_Total_Sel_Old)
|
|
{
|
|
ColoDelete("LIO",Orders_Total_Old); //Колонка ордеров
|
|
ColoCreate("LIO",ColoStep,Orders_Total);
|
|
}}//if(Orders_Total_Sel!=Orders_Total_Sel_Old)
|
|
//----- Список ордеров в истории
|
|
{if(History_Orders_Total_Sel!=History_Orders_Total_Sel_Old)
|
|
{
|
|
ColoDelete("LHO",History_Orders_Total_Old); //Колонка истории ордеров
|
|
ColoCreate("LHO",ColoStep*2,History_Orders_Total);
|
|
}}//if(History_Orders_Total_Sel!=History_Orders_Total_Sel_Old)
|
|
//----- Список сделок в истории
|
|
{if(History_Deals_Total_Sel!=History_Deals_Total_Sel_Old)
|
|
{
|
|
ColoDelete("LHD",History_Deals_Total_Old); //Колонка истории позиций
|
|
ColoCreate("LHD",ColoStep*3,History_Deals_Total);
|
|
}}//if(History_Deals_Total_Sel!=History_Deals_Total_Sel_Old)
|
|
//----- Заголовки колонок
|
|
ColoLabelMove("LIP",0,"Position="+IntegerToString(Positions_Total_Sel)+"/"+IntegerToString(Positions_Total));
|
|
ColoLabelMove("LIO",ColoStep,"Order="+IntegerToString(Orders_Total_Sel)+"/"+IntegerToString(Orders_Total));
|
|
ColoLabelMove("LHO",ColoStep*2,"History Order="+IntegerToString(History_Orders_Total_Sel)+"/"+IntegerToString(History_Orders_Total));
|
|
ColoLabelMove("LHD",ColoStep*3,"History Dial="+IntegerToString(History_Deals_Total_Sel)+"/"+IntegerToString(History_Deals_Total));
|
|
//----- Формирование списков ордеров, сделок, позиций
|
|
//----- Список открытых позиций
|
|
{if(Positions_Total>=0)
|
|
{
|
|
nRow=0;
|
|
CopyTime(TheSymbol,PERIOD_CURRENT,(nFirstBar-(int)(3*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((SymSel!=SymSel_all)&&(inSymbolSelector!=PositionGetString(POSITION_SYMBOL))){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)
|
|
//----- Список открытых отложенных ордеров
|
|
{if(Orders_Total>=0)
|
|
{
|
|
nRow=0;
|
|
CopyTime(TheSymbol,PERIOD_CURRENT,(nFirstBar-(int)(ColoStep*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)
|
|
//----- Список ордеров в истории
|
|
{if(History_Orders_Total>=0)
|
|
{
|
|
nRow=0;
|
|
CopyTime(TheSymbol,PERIOD_CURRENT,(nFirstBar-(int)(ColoStep*2*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)
|
|
//----- Список сделок в истории
|
|
{if(History_Deals_Total>=0)
|
|
{
|
|
nRow=0;
|
|
CopyTime(TheSymbol,PERIOD_CURRENT,(nFirstBar-(int)(ColoStep*3*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)
|
|
//-----
|
|
ChartRedraw();
|
|
//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));
|
|
//----- Запомним текущие счетчики
|
|
Orders_Total_Old=Orders_Total; //Текущие лимитные ордера
|
|
History_Orders_Total_Old=History_Orders_Total; //Закрытые рыночные ордера
|
|
History_Deals_Total_Old=History_Deals_Total; //Совершенные сделки (выполненные ордера)
|
|
Positions_Total_Old=Positions_Total; //Текущие позиции
|
|
Orders_Total_Sel_Old=Orders_Total_Sel; //Текущие лимитные ордера отобранные
|
|
History_Orders_Total_Sel_Old=History_Orders_Total_Sel;//Закрытые рыночные ордера отобранные
|
|
History_Deals_Total_Sel_Old=History_Deals_Total_Sel; //Совершенные сделки (выполненные ордера) отобранные
|
|
Positions_Total_Sel_Old=Positions_Total_Sel; //Текущие позиции отобранные
|
|
//-----
|
|
return;
|
|
}//On_Tick()
|
|
//
|
|
//============================================================================================= MQL5 ===
|
|
// On_Timer - Обработка событий по таймеру
|
|
//------------------------------------------------------------------------------------------------------
|
|
void On_Timer(){
|
|
//-----
|
|
gnTimer++;
|
|
{if(gnTimer>4294967000)
|
|
{
|
|
gnTimer=100;
|
|
}}//if(gnTimer>4294967000)
|
|
gInTimer=true;
|
|
On_Tick();
|
|
}//On_Timer()
|