Ошибки, баги, вопросы - страница 2457

 
В Маркете кто-нибудь практикует при обновлении своего продукта вкладывать (через ресурсы) в него EX5 предыдущей версии, чтобы пользователь всегда имел возможность отката на случай ошибки?
 
fxsaber:
В Маркете кто-нибудь практикует при обновлении своего продукта вкладывать (через ресурсы) в него EX5 предыдущей версии, чтобы пользователь всегда имел возможность отката на случай ошибки?

Это можно и без ресурсов делать...

Проблема в том что новые версии могут иметь другие настройки...

Вывести другие настройки уже проблема...

 
Vladimir Pastushak:

Это можно и без ресурсов делать...

Проблема в том что новые версии могут иметь другие настройки...

Вывести другие настройки уже проблема...

Не вижу никаких проблем с этим.

 

При запросе логов с действующих VPS выдёт ошибку "Failed to get terminal logs"

Кто знает в чём может быть проблема? При этом советники на VPS работают (открывают/закрывают сделки), а логи не могу загрузить.

 
fxsaber:

Не вижу никаких проблем с этим.

Только сейчас понял, что EX5 предыдущей версии должен быть с защитным механизмом.

А через ресурсы EX5 прошлой версии получится передать без защиты, что не подходит.

 

Пишу индикатор на 5ке.

Не могу заставить обновлять период средней с поля ввода на графике.  На 4ке такая конструкция будет работать.

Что не так? не пойму? Поле в ините через OnChartEvent обновляется, а период нет. Ни каким образом не могу изменить.

Прикладываю простой рабочий пример.

//+------------------------------------------------------------------+
//|                                                      Probe_2.mq5 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                                 https://mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://mql5.com"
#property description "The MA "
#property version   "1.00"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot MA1
#property indicator_label1  "MA 1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrDarkOrange
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

//--- input parameters
 extern int PBB=10;  //  период МА
//--- indicator buffers
double         BufferMA1[];
//--- global variables
int            period_ma1;
int            period_max;

int            handle_ma1;
string sn,sPBB;

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
  

   sPBB=IntegerToString(PBB);
   if(ObjectFind(0,"P2edit")!=0)
    {
       ObjectCreate(0,"P2edit",OBJ_EDIT,0,0,0);
       ObjectSetInteger(0,"P2edit",OBJPROP_XDISTANCE,300);
       ObjectSetInteger(0,"P2edit",OBJPROP_YDISTANCE,1);
       ObjectSetInteger(0,"P2edit",OBJPROP_XSIZE,70);
       ObjectSetInteger(0,"P2edit",OBJPROP_YSIZE,40);
       ObjectSetInteger(0,"P2edit",OBJPROP_SELECTABLE,false);
       ObjectSetInteger(0,"P2edit",OBJPROP_BGCOLOR,clrBlack);
       ObjectSetString (0,"P2edit",OBJPROP_TEXT,sPBB);
       ObjectSetInteger(0,"P2edit",OBJPROP_FONTSIZE,16);
       ObjectSetInteger(0,"P2edit",OBJPROP_COLOR,clrGray);
       ObjectSetInteger(0,"P2edit",OBJPROP_ALIGN,ALIGN_CENTER);
       ObjectSetInteger(0,"P2edit",OBJPROP_READONLY,false);
    }


//--- set global variables
   period_ma1=int(PBB<1 ? 1 : PBB);
//--- indicator buffers mapping
   SetIndexBuffer(0,BufferMA1,INDICATOR_DATA);
   ArraySetAsSeries(BufferMA1,true);
   IndicatorSetInteger(INDICATOR_DIGITS,Digits());
//--- create handle
   ResetLastError();

   Comment("Должна соответствовать зеленой, а равна= ",PBB);
   
   handle_ma1=iMA(NULL,PERIOD_CURRENT,period_ma1,0,1,PRICE_CLOSE);
   if(handle_ma1==INVALID_HANDLE)
     {
      Print("The iMA(",(string)period_ma1,") object was not created: Error ",GetLastError());
      return INIT_FAILED;
     }
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
 {
  if(id==CHARTEVENT_OBJECT_ENDEDIT)
   {
    string obj_name=sparam;
    if(!StringCompare(obj_name,"P2edit"))
     {
     string novPBB=NULL;
     if(ObjectGetString(0,obj_name,OBJPROP_TEXT,0,novPBB))
      {
       if(StringCompare(novPBB,sPBB,false))
        {
         PBB= (int)StringToInteger(novPBB);
         ObjectSetInteger(0,"P2edit",OBJPROP_BGCOLOR,clrBlack);
         ObjectSetInteger(0,"P2edit",OBJPROP_COLOR,clrLime);
        }
       }
Print("B OnChartEvent PBB=",PBB);
      ChartSetSymbolPeriod(0,_Symbol,_Period);
      }
    }
    return;
 }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//    Пробовал от сюда запускать.
//   sPBB=IntegerToString(PBB);
//   if(ObjectFind(0,"P2edit")!=0)
//    {
//       ObjectCreate(0,"P2edit",OBJ_EDIT,0,0,0);
//       ObjectSetInteger(0,"P2edit",OBJPROP_XDISTANCE,300);
//       ObjectSetInteger(0,"P2edit",OBJPROP_YDISTANCE,1);
//       ObjectSetInteger(0,"P2edit",OBJPROP_XSIZE,70);
//       ObjectSetInteger(0,"P2edit",OBJPROP_YSIZE,40);
//       ObjectSetInteger(0,"P2edit",OBJPROP_SELECTABLE,false);
//       ObjectSetInteger(0,"P2edit",OBJPROP_BGCOLOR,clrBlack);
//       ObjectSetString (0,"P2edit",OBJPROP_TEXT,sPBB);
//       ObjectSetInteger(0,"P2edit",OBJPROP_FONTSIZE,16);
//       ObjectSetInteger(0,"P2edit",OBJPROP_COLOR,clrGray);
//       ObjectSetInteger(0,"P2edit",OBJPROP_ALIGN,ALIGN_CENTER);
//       ObjectSetInteger(0,"P2edit",OBJPROP_READONLY,false);
//    } 
//   
//   if(PBB==0) PBB=(int)StringToInteger(sPBB);
// 
//   if(PBB<5) period_ma1=5; else  period_ma1=PBB;
//   if(PBB>300) period_ma1=300; else  period_ma1=PBB;
   
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

   ArraySetAsSeries(close,true);//--- Установка массивов буферов как таймсерий
//--- Проверка количества доступных баров
   if(rates_total<fmax(period_max,4)) return 0;
//--- Проверка и расчёт количества просчитываемых баров
   int limit=rates_total-prev_calculated;
   if(limit>1)
     {
      limit=rates_total-2;
      ArrayInitialize(BufferMA1,EMPTY_VALUE);
     }

//--- Подготовка данных
   int count=(limit>0 ? rates_total : 1),copied=0;
   copied=CopyBuffer(handle_ma1,0,0,count,BufferMA1);
   if(copied!=count) return 0;

 //Comment("ошибка = ");
 
//--- возвращаемое значение prev_calculated для следующего вызова
   return(rates_total);
  }

//+------------------------------------------------------------------+
//|            deinit                                                |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   int i;
   int obj_total=ObjectsTotal(0,0,-1);
   for(i=obj_total-1;i>=0;i--)
     {
      sn=ObjectName(0,i,0,-1);
      if(ObjectFind(0,sn)==0) 
        {
         if (StringFind(sn,"P2edit",0)==0) ObjectDelete(0,sn);
        }
     }
  
   Comment("");
   return;
  }
 
Zakhar Chumak:

При запросе логов с действующих VPS выдёт ошибку "Failed to get terminal logs"

Кто знает в чём может быть проблема? При этом советники на VPS работают (открывают/закрывают сделки), а логи не могу загрузить.

Похоже на слишком длинный путь к папке temp.

Заархивированные логи сначала читаются во временный файл (с расширением tmp) в системную временную папку. Произошла ошибка формирования имени временного файла

 

Правильно я понимаю что после прохода агенты спят и ждут когда оставшиеся занятые агенты закончат работу ?


 

Что?

Никто мой вопрос  не осилит?

Что интересно. С таким вариантом OnCalculate работает. Но этот вариант не подходит.

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
 
Uladzimir Izerski:

Что?

Никто мой вопрос  не осилит?

Что интересно. С таким вариантом OnCalculate работает. Но этот вариант не подходит.

При смене графика / периода PBB получает значение 10, не зависимо от того какое значение вы указали в поле ввода.

В момент переинициализации происходит так как будто это первый запуск.

Решить Вашу задачу можно двумя спсобами

1 - хранить значение PBB в глобальных переменных терминала и получать период оттуда

2 - В момент срабатывания ОнЧартЕвент делать переинициализацию индикатора MA и получать новый хендл...

Причина обращения: