Errores, fallos, preguntas - página 3137

 
¡Hola!
Al probar el EA en el historial para todos los instrumentos seleccionados, el probador sólo da resultados para los pares de divisas, pero para las criptomonedas da "oninit devuelve un código 1 distinto de cero". ¿Qué puedo hacer al respecto? ¿Quién ha experimentado esto?
 
lapundra1 #:
¡Hola!
Al probar el EA en el historial para todos los instrumentos seleccionados, el probador sólo da resultados para los pares de divisas, pero para las criptomonedas da "oninit devuelve un código 1 distinto de cero". ¿Qué puedo hacer al respecto? ¿Quién lo tenía?

Comenta la línea 123 y el error desaparecerá. Te lo digo como telépata :) - porque no hay código, así que sólo telepatía, no hay otra manera :)

 

Saludos.

Al ejecutar MT5 en el terminal se produce un error:

2022.01.03 15:33:30.108 Virtual Hosting falló al obtener la lista de hosts virtuales [1001] (tls - create certificate chain engine failed)

2022.01.03 15:34:30.945 Señal '56334871': no se ha podido obtener la lista de señales


Y a continuación, al intentar conectarse a un repositorio en el MetaEditor:

2022.01.03 15:34:39.668 Almacenamiento solicitud de lista de proyectos falló con el error 1001

2022.01.03 15:34:46.561 Storage activación de MQL5 Storage falló [1001]


Al mismo tiempo, la conexión con otro ordenador funcionaba bien y todos los cambios se enviaban al almacén.

No se ha detectado ningún problema de red en el ordenador, todo ha funcionado bien. Tampoco se ha realizado ninguna actividad "arriesgada" en el ordenador en los últimos meses y todo funciona bien. La construcción es 3140.

¿En qué dirección debo cavar?


 

Ni siquiera voy a entrar en los "Secretos de Madrid" y Dios me libre de preguntarme por qué las manillas de los indicadores empiezan a indexar desde el 10 y no desde el 0 o el 1. Eso me da igual, puedo vivir con ello.

¿Por qué pregunto, si hay dos tipos de asas independientes del mismo indicador y borro la segunda, no sólo la segunda MA, sino también la primera desaparece? Es decir, quitar una de las asas mata también a la otra. Aquí está el código deiMA altamente simplificado y duplicado de la Ayuda:

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_plots   2

#property indicator_label1  "iMA1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

#property indicator_label2  "iMA2"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrBlue
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1

double iMABuffer1[], iMABuffer2[];
int    handle1, handle2;
int    bars_calculated=0;

int OnInit()
  {
   SetIndexBuffer(0,iMABuffer1,INDICATOR_DATA);
   SetIndexBuffer(1,iMABuffer2,INDICATOR_DATA);

   PlotIndexSetInteger(0,PLOT_SHIFT,0);
   PlotIndexSetInteger(1,PLOT_SHIFT,0);

   handle1=iMA(_Symbol,PERIOD_CURRENT,10,0,MODE_SMA,PRICE_CLOSE);
   handle2=iMA(_Symbol,PERIOD_CURRENT,20,0,MODE_SMA,PRICE_CLOSE);

   return(INIT_SUCCEEDED);
  }

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[])
  {
   int values_to_copy;

   int calculated=BarsCalculated(handle1);
   if(calculated<=0) return(0);

   if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
      if(calculated>rates_total) values_to_copy=rates_total;
      else                       values_to_copy=calculated;
   else
      values_to_copy=(rates_total-prev_calculated)+1;

   if(!FillArrayFromBuffer(iMABuffer1,0,handle1,values_to_copy)) return(0);
   if(!FillArrayFromBuffer(iMABuffer2,0,handle2,values_to_copy)) return(0);

   //if(handle2!=INVALID_HANDLE)
   //   Print(IndicatorRelease(handle2));

   bars_calculated=calculated;

   return(rates_total);
  }

bool FillArrayFromBuffer(double &values[],
                         int shift,
                         int ind_handle,
                         int amount
                         )
  {
   if(CopyBuffer(ind_handle,0,-shift,amount,values)<0)
      return(false);

   return(true);
  }

void OnDeinit(const int reason)
  {
   if(handle1!=INVALID_HANDLE)
      IndicatorRelease(handle1);
   if(handle2!=INVALID_HANDLE)
      IndicatorRelease(handle2);
  }

Si no se comentan las dos líneas, el resultado es que no se renderiza nada. Esperado: la primera MA (roja) se mantiene.

...y lo único que quería era limpiar la memoria.

 
x572intraday #:

Ni siquiera voy a entrar en los "Secretos de Madrid" y Dios me libre de preguntarme por qué las manillas de los indicadores empiezan a indexar desde el 10 y no desde el 0 o el 1. Eso me da igual, puedo vivir con ello.

¿Por qué pregunto, si hay dos tipos de asas independientes del mismo indicador y borro la segunda, no sólo la segunda MA, sino también la primera desaparece? Es decir, quitar una de las asas mata también a la otra. Aquí está el código deiMA altamente simplificado y duplicado de la Ayuda:

Si no se comentan las dos líneas, el resultado es que no se renderiza nada. Esperado: la primera MA (roja) se mantiene.

...y lo único que quería era limpiar la memoria.

Por lo menos:

if(handle2!=INVALID_HANDLE && !FillArrayFromBuffer(iMABuffer2,0,handle2,values_to_copy)) return(0);
 
JRandomTrader #:

Como mínimo:

¿Lo has comprobado? A mí no me ha funcionado. Y sólo hay que borrar uno (con liberación de memoria) y dejar visualmente el otro. Y de su lógica se desprende: si la segunda asa existe y el segundo búfer no se ha llenado, entonces sale, y ni siquiera llega a mi línea con IndicatorRelease(asa2) (si he insertado el código en el lugar correcto).

 
   int dim=5;
   int Arr1[5];// OK
   int Arr2[dim];// '[' - invalid index value

O estoy totalmente jodido o, si no es un bicho, pega un espadazo en Ayuda.

 
x572intraday #:

O estoy completamente jodido, o si no es un bug, pínchame en el Help.

El tamaño de un array estático es una constante, no un int.

 
Valeriy Yastremskiy #:

La dimensionalidad de un array estático es una constante, no un int.

Es posible definir un vector de esta manera, pero sólo son dobles.

int n = 5;
vector v(n);
v[0] = 1.2;
 
Aleksey Nikolayev #:

Se puede definir un vector de esa manera, pero sólo se puede hacer.

De acuerdo. Será mejor que lo cambie de tamaño entonces.