Errores, fallos, preguntas - página 2457

 
¿Alguien en el mercado practica, al actualizar su producto, adjuntar (vía recursos) el EX5 de la versión anterior, para que el usuario siempre tenga la opción de retroceder en caso de error?
 
fxsaber:
¿Alguien en el mercado practica, cuando actualiza su producto, poner (a través de recursos) el EX5 de la versión anterior en él, para que el usuario siempre tenga la posibilidad de retroceder en caso de un error?

Esto puede hacerse sin recursos...

El problema es que las nuevas versiones pueden tener una configuración diferente...

Sacar otros ajustes ya es un problema...

 
Vladimir Pastushak:

Esto puede hacerse sin recursos...

El problema es que las nuevas versiones pueden tener una configuración diferente...

Sacar otros ajustes ya es un problema...

No veo ningún problema con esto.

 

Al solicitar los registros de un VPS activo, aparece el error "Failed to get terminal logs".

¿Quién sabe cuál puede ser el problema? Al mismo tiempo, los EAs en el VPS están funcionando (abriendo/cerrando operaciones), pero no puedo cargar los registros.

 
fxsaber:

No veo ningún problema en ello.

Sólo ahora me he dado cuenta de que la EX5 de la versión anterior tiene que ser con un mecanismo de protección.

Y a través de los recursos de la versión anterior EX5 será capaz de transferir sin protección, que no es adecuado.

 

Estoy escribiendo un indicador sobre el 5.

No consigo que se actualice el periodo de la media desde el campo de entrada del gráfico. En el 4, este diseño funciona.

¿Qué ocurre? El campo en el inite se actualiza a través deOnChartEvent, pero el periodo no. No puedo cambiarlo de ninguna manera.

Adjunto un sencillo ejemplo de funcionamiento.

//+------------------------------------------------------------------+
//|                                                      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:

Al solicitar los registros de un VPS activo, aparece el error "Failed to get terminal logs".

¿Quién sabe cuál puede ser el problema? Al mismo tiempo los EAs en el VPS están trabajando (abriendo/cerrando operaciones), pero no puedo cargar los registros.

Parece que la ruta a la carpeta temporal es demasiado larga.

Los registros archivados se leen primero en un archivo temporal (con extensión tmp) en la carpeta temporal del sistema. Se ha producido un error de formación del nombre del archivo temporal

 

¿Estoy en lo cierto al suponer que después de un pase, los agentes duermen y esperan a que los restantes agentes ocupados terminen su trabajo?


 

¿Qué?

¿Nadie puede responder a mi pregunta?

Lo que es interesante. Con esta variante funcionaOnCalculate. Pero esta variante no funciona.

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

¿Qué?

¿Nadie puede responder a mi pregunta?

Lo que es interesante. Con esta variante funcionaOnCalculate. Pero esta variante no funciona.

Cuando se cambia el horario/período, PBB obtiene un valor de 10, sin importar el valor que se haya especificado en el campo de entrada.

En el momento de la reinicialización, ocurre como si fuera la primera ejecución.

Hay dos maneras de resolver su problema

1 - Almacenar el valor de la PBB en las variables globales y obtener el periodo desde allí.

2 - Cuando se dispara el OnChartEvent, reinicia el indicador MA y obtiene un nuevo mango...