Информационный индикатор позиций, сделок и ордеров.
Главный алгоритм:
//============================================================================================= MQL5 === // LibreInfoPDO Main_5 v1.001 MQL5 // Модуль обработки событий // LibreCoin (c)2014-2017 //====================================================================================================== #property strict //============================================================================================= MQL5 === // EVENT PROCESSING MODULE //------------------------------------------------------------------------------------------------------ // //============================================================================================= MQL5 === // On_Init() - инициализация советника //------------------------------------------------------------------------------------------------------ int On_Init(){ gnTick=0; gInTimer=false; //----- Настройки для отбора по инструменту {switch(SymSel) { case SymSel_curr: { inSymbolSelector=Symbol(); break; } case SymSel_user: { inSymbolSelector=SymbolSelector; break; } case SymSel_all: { inSymbolSelector=""; break; } default: { inSymbolSelector=""; break; } }}//switch(SymSel) //----- Настройки таймера и глобальных счетчиков //onTimer=false; //флаг нахождения в обработчике таймера - для блокировки других обработчиков MSTimerSet=200; //Установка таймера XXX миллисекунд {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)) //----- IndHeigh=ChartGetInteger(0,CHART_HEIGHT_IN_PIXELS,1); IndicatorSetDouble(INDICATOR_MINIMUM,0.0); IndicatorSetDouble(INDICATOR_MAXIMUM,IndHeigh); //----- TimeToStruct(TimeCurrent(),DateTimeCurrent); DateTimeCurrent.sec=0; TimeCurrentMinutes=StructToTime(DateTimeCurrent); double kScale=(double)ChartGetInteger(0,CHART_WIDTH_IN_BARS)/ChartGetInteger(0,CHART_WIDTH_IN_PIXELS); //----- //string sTXW="";//Имя для текcтового объекта //----- Открытые позиции ColoLabelCreate("LIP",0);//Устанавливаем имя для текстового объекта ColoCreate("LIP",0); //----- Открытые отложенные ордера ColoLabelCreate("LIO",300);//Устанавливаем имя для текстового объекта ColoCreate("LIO",300); //----- Выполненные ордера в истории ColoLabelCreate("LHO",600);//Устанавливаем имя для текстового объекта ColoCreate("LHO",600); //----- Сделки ColoLabelCreate("LHD",900);//Устанавливаем имя для текстового объекта ColoCreate("LHD",900); //----- return(INIT_SUCCEEDED); }//On_Init() // //============================================================================================= MQL5 === // On_Tick() - Основной обработчик тиков //------------------------------------------------------------------------------------------------------ void On_Tick(){ //Print(IntegerToString(ChartGetInteger(0,CHART_WIDTH_IN_PIXELS))+" "+IntegerToString(ChartGetInteger(0,CHART_WIDTH_IN_BARS))); //----- string CommentLine[10]; //----- //{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);//32x32 //----- Запрашиваем историю сделок и ордеров за указанный период серверного времени. {if(!HistorySelect(0,TimeCurrent())) { Print("HistorySelect Error!"); return; }}//Если неудачно - выходим //----- Определение количества ордеров, сделок, позиций int Orders_Total=OrdersTotal(); //Текущие лимитные ордера int History_Orders_Total=HistoryOrdersTotal(); //Закрытые рыночные ордера int History_Deals_Total=HistoryDealsTotal(); //Совершенные сделки (выполненные ордера) int Positions_Total=PositionsTotal(); //Текущие позиции //----- //CommentLine[0]=""+ // "OrdersTotal="+IntegerToString(Orders_Total)+" "+ // "PositionsTotal="+IntegerToString(Positions_Total)+" "+ // ""; //CommentLine[1]=""+ // "HistoryOrdersTotal="+IntegerToString(History_Orders_Total)+" "+ // "HistoryDealsTotal="+IntegerToString(History_Deals_Total)+" "+ // ""; //----- Формирование списков ордеров, сделок, позиций TimeToStruct(TimeCurrent(),DateTimeCurrent); DateTimeCurrent.sec=0; TimeCurrentMinutes=StructToTime(DateTimeCurrent); string sTXW="";//Имя для текcтового объекта int nRow=0;//Счетчик строк вывода double kScale=(double)ChartGetInteger(0,CHART_WIDTH_IN_BARS)/ChartGetInteger(0,CHART_WIDTH_IN_PIXELS); //Заголовки колонок ColoLabelMove("LIP",0,"Position"); ColoLabelMove("LIO",300,"Order"); ColoLabelMove("LHO",600,"History Order"); ColoLabelMove("LHD",900,"History Dial"); //----- Список открытых позиций {if(Positions_Total>=0) { nRow=0; {for(int i=nOrderList-1;i>=0;i--) //{for(int i=0;i<=nOrderList-1;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;}}//Не тот символ - следующий //{if(!PositionSelectByTicket(Pos_Tick)){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, //Изменяем координату времени объекта (datetime)(TimeCurrentMinutes-(-3*kScale+ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,1))*PeriodSeconds(PERIOD_CURRENT)) )) { 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=1;i<=nOrderList;i++) }}//if(Positions_Total>=0) //----- Список открытых отложенных ордеров {if(Orders_Total>=0) { nRow=0; {for(int i=nOrderList-1;i>=0;i--) //{for(int i=0;i<=nOrderList-1;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;}}//Не тот символ - следующий //{if(!OrderSelect(Ord_Tick)){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))+"]"+ //DoubleToString(OrderGetDouble(POSITION_PROFIT),2)+" "+ ""; ResetLastError(); {if(!ObjectSetInteger( 0, //Идентификатор чарта sTXW, //Имя объекта OBJPROP_TIME, //Изменяем координату времени объекта //(datetime)(TimeCurrentMinutes-(1+ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,1)-300)*PeriodSeconds(PERIOD_CURRENT))//CHART_WIDTH_IN_PIXELS CHART_WIDTH_IN_BARS (datetime)(TimeCurrentMinutes-(ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,1)-300*kScale)*PeriodSeconds(PERIOD_CURRENT))//CHART_WIDTH_IN_PIXELS CHART_WIDTH_IN_BARS )) { 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=1;i<=nOrderList;i++) }}//if(Positions_Total>=0) //----- Список ордеров в истории {if(History_Orders_Total>=0) { nRow=0; {for(int i=nOrderList-1;i>=0;i--) //{for(int i=0;i<=nOrderList-1;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;}}//Не тот символ - следующий //{if(!HistoryOrderSelect(Ord_Tick)){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))+"]"+ //DoubleToString(HistoryOrderGetDouble(ORDER_PROFIT),2)+" "+ ""; ResetLastError(); {if(!ObjectSetInteger( 0, //Идентификатор чарта sTXW, //Имя объекта OBJPROP_TIME, //Изменяем координату времени объекта (datetime)(TimeCurrentMinutes-(ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,1)-600*kScale)*PeriodSeconds(PERIOD_CURRENT)) )) { 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=1;i<=nOrderList;i++) }}//if(Positions_Total>=0) //----- Список сделок в истории {if(History_Deals_Total>=0) { nRow=0; {for(int i=nOrderList-1;i>=0;i--) //{for(int i=0;i<=nOrderList-1;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;}}//Не тот символ - следующий //{if(!HistoryDealSelect(Ord_Tick)){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, //Изменяем координату времени объекта (datetime)(TimeCurrentMinutes-(ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,1)-900*kScale)*PeriodSeconds(PERIOD_CURRENT)) )) { 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=1;i<=nOrderList;i++) }}//if(Positions_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)); //----- return; }//On_Tick() // //============================================================================================= MQL5 === // On_Timer - Обработка событий по таймеру //------------------------------------------------------------------------------------------------------ void On_Timer(){ //----- gnTimer++; {if(gnTimer>4294967000) { gnTimer=100; }}//if(gnTimer>4294967000) gInTimer=true; On_Tick(); }//On_Timer()
Графика:
//====================================================================================================== // LibreInfoPDO Function3_5 v1.001 MQL5 // Графика, вывод на чарт и преобразования вывода // Librecoin (c)2014-2017 //====================================================================================================== #property strict //====================================================================================================== // ColoLabelCreate() - Создание колонтитула // Вход: // iGName - имя граф объекта // iShift - сдвиг по горизонтали //====================================================================================================== void ColoLabelCreate(string iGName, int iShift){ //----- string sTXW=iGName+"_C"; double ikScale=(double)ChartGetInteger(0,CHART_WIDTH_IN_BARS)/ChartGetInteger(0,CHART_WIDTH_IN_PIXELS); {if(ObjectCreate( 0, sTXW, OBJ_TEXT, 1, (datetime)(TimeCurrentMinutes-(-3*ikScale+ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,1)-(iShift+100)*ikScale)*PeriodSeconds(PERIOD_CURRENT)), IndHeigh ) ) { ObjectSetString(0,sTXW,OBJPROP_TEXT," "); //выводим текст ObjectSetString(0,sTXW,OBJPROP_FONT,"Arial"); // установим шрифт текста ObjectSetInteger(0,sTXW,OBJPROP_FONTSIZE,8); // установим размер шрифта ObjectSetDouble(0,sTXW,OBJPROP_ANGLE,0.0); // установим угол наклона текста ObjectSetInteger(0,sTXW,OBJPROP_ANCHOR,ANCHOR_LEFT_UPPER);// установим способ привязки ObjectSetInteger(0,sTXW,OBJPROP_COLOR,clrAqua); // установим цвет ObjectSetInteger(0,sTXW,OBJPROP_BACK,false); // отобразим на переднем (false) или заднем (true) плане ObjectSetInteger(0,sTXW,OBJPROP_SELECTABLE,false); // включим (true) или отключим (false) режим перемещения объекта мышью ObjectSetInteger(0,sTXW,OBJPROP_SELECTED,false); ObjectSetInteger(0,sTXW,OBJPROP_HIDDEN,false); // скроем (true) или отобразим (false) имя графического объекта в списке объектов ObjectSetInteger(0,sTXW,OBJPROP_ZORDER,0); // установим приоритет на получение события нажатия мыши на графике }}//if(!ObjectCreate(... }//ColoLabelCreate() // //====================================================================================================== // ColoCreate() - Создание колонки // Вход: // iGName - имя граф объекта // iShift - сдвиг по горизонтали //====================================================================================================== void ColoCreate( string iGName, int iShift){ //----- string sTXW=""; double ikScale=(double)ChartGetInteger(0,CHART_WIDTH_IN_BARS)/ChartGetInteger(0,CHART_WIDTH_IN_PIXELS); {for(int i=0;i<=nOrderList-1;i++) { sTXW=iGName+"_"+IntegerToString(i);//Устанавливаем имя для текстового объекта //Создание (пересоздание) объекта, позиция привязки ResetLastError(); {if(!ObjectCreate( 0, sTXW, OBJ_TEXT, 1, (datetime)(TimeCurrentMinutes-(-3*ikScale+ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,1)-iShift*ikScale)*PeriodSeconds(PERIOD_CURRENT)), IndHeigh-11.0*(i+1) ) ) { Print("ObjectCreate0 Error=",GetLastError()); continue; }}//if(!ObjectCreate(... ObjectSetString(0,sTXW,OBJPROP_TEXT," "); //выводим текст ObjectSetString(0,sTXW,OBJPROP_FONT,"Arial"); // установим шрифт текста ObjectSetInteger(0,sTXW,OBJPROP_FONTSIZE,8); // установим размер шрифта ObjectSetDouble(0,sTXW,OBJPROP_ANGLE,0.0); // установим угол наклона текста ObjectSetInteger(0,sTXW,OBJPROP_ANCHOR,ANCHOR_LEFT_UPPER);// установим способ привязки ObjectSetInteger(0,sTXW,OBJPROP_COLOR,clrAqua); // установим цвет ObjectSetInteger(0,sTXW,OBJPROP_BACK,false); // отобразим на переднем (false) или заднем (true) плане ObjectSetInteger(0,sTXW,OBJPROP_SELECTABLE,false); // включим (true) или отключим (false) режим перемещения объекта мышью ObjectSetInteger(0,sTXW,OBJPROP_SELECTED,false); ObjectSetInteger(0,sTXW,OBJPROP_HIDDEN,false); // скроем (true) или отобразим (false) имя графического объекта в списке объектов ObjectSetInteger(0,sTXW,OBJPROP_ZORDER,0); // установим приоритет на получение события нажатия мыши на графике }}//for(int i=0;i<nOrderList;i++) }//ColoCreate() // //====================================================================================================== // ColoLabelMove() - Перемещение заголовка // Вход: // iGName - имя граф объекта // iShift - сдвиг по горизонтали //====================================================================================================== void ColoLabelMove( string iGName, int iShift, string iLabel){ //----- string sTXW=iGName+"_C"; double ikScale=(double)ChartGetInteger(0,CHART_WIDTH_IN_BARS)/ChartGetInteger(0,CHART_WIDTH_IN_PIXELS); {if(ObjectSetInteger( 0, //Идентификатор чарта sTXW, //Имя объекта OBJPROP_TIME, //Изменяем координату времени объекта (datetime)(TimeCurrentMinutes-(-3*ikScale+ChartGetInteger(0,CHART_FIRST_VISIBLE_BAR,1)-(iShift+100)*ikScale)*PeriodSeconds(PERIOD_CURRENT)) )) { {if(ObjectSetDouble( 0, //Идентификатор чарта sTXW, //Имя объекта OBJPROP_PRICE, //Изменяем координату времени объекта IndHeigh )) { ObjectSetString(0,sTXW,OBJPROP_TEXT,iLabel); }}//if(ObjectSetDouble(... }}//if(ObjectSetInteger(... }//ColoLabelMove() // //============================================================================================= MQL5 === // ColoDelete() - Удаление колонки // Вход: // iGName - имя граф объекта //====================================================================================================== void ColoDelete(string iGName){ //----- {for(int i=0;i<=nOrderList-1;i++) { ObjectDelete(0,iGName+"_"+IntegerToString(i));//Устанавливаем имя для текстового объекта }}//for(int i=0;i<=nOrderList-1;i++) }//ColoDelete()
Буду рад любым замечаниям и предложениям.
Графика:
Буду рад любым замечаниям и предложениям.
Предложение пока одно - укажите, что папку Include надо создать в нетрадиционном месте \MQL5\Indicators\Include, а то тут не все программисты, многие просто не смогут по коду понять, что к чему
И на выходные не проверить, надо специально советник писать для тестера. Пока показывает пустое подокно
И на выходные не проверить, надо специально советник писать для тестера. Пока показывает пустое подокно
У Вас есть позиции, ордера и сделки по инструменту на котором вы установили индикатор?
По умолчанию информация выдается по текущему инструменту, режим отбора SymSel_curr.
У меня приведённый выше скриншот получен сегодня в режиме отбора SymSel_all.
У Вас есть позиции, ордера и сделки по инструменту на котором вы установили индикатор?
У меня приведённый выше скриншот получен сегодня.
Рыночных нет, только история. Обнаружил интересный эффект. Если стоит параметр SumSel_all, то исторические ордера и сделки показываются, при двух других значениях нет.
Рыночных нет, только история. Обнаружил интересный эффект. Если стоит параметр SumSel_all, то исторические ордера и сделки показываются, при двух других значениях нет.
Это связано с тем, что у вас много (более 250) ордеров (сделок) в истории. Попробуйте увеличить параметр nOrderList.
Дело в том, что вывод списков идёт от последних номеров к первым. В этом случае без отбора просто выводятся nOrderList первых ордеров (сделок).
А при отборе среди первых nOrderList может не оказаться ордеров по данному инструменту. Конечно можно определять размер списка автоматически.
Но для моих целей достаточно вручную устанавливать nOrderList.
Предложение пока одно - укажите, что папку Include надо создать в нетрадиционном месте \MQL5\Indicators\Include, а то тут не все программисты, многие просто не смогут по коду понять, что к чему
В приложенном архиве уже есть вложенная папка Include.
В приложенном архиве уже есть вложенная папка Include.
Я же написал, она должна быть размещена в нетрадиционном месте \MQL5\Indicators, а не в стандартном пути \MQL5. Я сначала переместил файлы .mqh в \MQL5\Include, в результате ошибки компиляции. Залез в исходник, понял, гду они должны быть. Непрограммист не догадается так сделать.
Я же написал, она должна быть размещена в нетрадиционном месте \MQL5\Indicators, а не в стандартном пути \MQL5. Я сначала переместил файлы .mqh в \MQL5\Include, в результате ошибки компиляции. Залез в исходник, понял, гду они должны быть. Непрограммист не догадается так сделать.
Если распаковать приложенный архив, то структура файлов создается таким образом, что компиляция программы должна проходить нормально.



Выкладываю на всеобщее обозрение индикатор выводящий информацию о позициях, сделках и ордерах.
Написано на скорую руку для упрощения анализа работы советников.
Основной модуль:
Определения переменных:
Интерфейс настроек: