Главный алгоритм:
//============================================================================================= 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, в результате ошибки компиляции. Залез в исходник, понял, гду они должны быть. Непрограммист не догадается так сделать.
Если распаковать приложенный архив, то структура файлов создается таким образом, что компиляция программы должна проходить нормально.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Выкладываю на всеобщее обозрение индикатор выводящий информацию о позициях, сделках и ордерах.
Написано на скорую руку для упрощения анализа работы советников.
Основной модуль:
Определения переменных:
Интерфейс настроек: