Errores, fallos, preguntas - página 1175

 
A100:

......................funciones (buscar, calcular, etc.) generalmente devuelven longitud/tamaño, o -1 si no tienen éxito, lo que facilita el manejo de errores.

no tanto como para sacrificar la mitad de la gama de valores.
 

Saludos. ¿Algún consejo para los novatos sobre qué funciones utilizar para establecer una retirada común en una parrilla de órdenes en caso de señal inversa?

 
Estoy aprendiendo las operaciones de archivo. ¿Alguien sabe si MQL4/5 funciona más rápido con archivos csv o txt?
 
paladin800:
Estoy aprendiendo las operaciones de archivo. ¿Alguien sabe si MQL4/5 es más rápido con archivos csv o txt?
bin
 
papaklass:
¿Qué problemas intenta resolver trabajando con archivos?
Es necesario escribir el estado de las posiciones en un archivo y utilizar MT4 para leer estos datos. Necesita una correlación de posiciones de un símbolo con otro(s) símbolo(s). Por ejemplo, si ya hay una cierta cantidad de posiciones en EURUSD, no se deben abrir más posiciones para GBPUSD. Sé cómo hacerlo sin operaciones de archivo, sólo quiero aprender a trabajar con operaciones de archivo, sólo para ampliar mis horizontes.
 

Por favor, dé un ejemplo de código de cómo llamar a un indicador de recursos vinculados desde un EA, que a su vez utiliza otro indicador de recursos vinculados en sí mismo. Por ejemplo, hay un indicador A, y desde él se llama a B. También hay un experto C que utiliza A. ¿Qué debe escribirse en #resource y al llamar a iCustom en todos los casos?

La ayuda no está claramente escrita en este sentido. La construcción habitual en el indicador A:#resource "\\Indicators\B.ex4" y luegoiCustom(::Indicators\B.ex4) funciona bien cuando A se lanza por sí mismo.Pero si A se inserta en el Asesor Experto#recurso "\\Indicators\A.ex4", un errorno puede cargar el recurso para el indicador adjunto apareceindicando alguna ruta sintetizada absoluta incorrecta que de alguna manera menciona el directorio de Bibliotecas, mientras que el indicador B se busca dentro de sí mismo (MQL4\Libraries\::Indicators\B.ex4::Indicators\B.ex4).

 
meat:

En cuanto a ArraySize, el otro día planteé un problema similar en MQL4: https://www.mql5.com/ru/forum/152471. Según tengo entendido, todo debería ser igual en MQL5.

Tal vez, mi mensaje ha sido considerado allí :) Con respecto a este problema, el Service Desk ha respondido que la razón era el funcionamiento incorrecto del optimizador y que van a cambiar el tipo a uint en las nuevas construcciones. De hecho ahora es uint, pero no está documentado :) Y por cierto, lo cambiarán a uint para ArrayResize también. Les aconsejé que lo cambiaran a ulong, de lo contrario tendrán que volver a este problema por la falta de valores de 32 bits al almacenar grandes volúmenes en un futuro próximo.

En cuanto al valor -1 en el error, no debería haber ningún problema con él porque: (int)-1 = (uint)-1 = 0xFFFFFFFF = UINT_MAX, es decir, la representación de los bits es la misma, aunque la operación de comparación dará un resultado diferente, es decir, si fuera así en el código

será incorrecto.

Gracias de nuevo por la petición, el tipo de retorno de las funciones ArraySize y ArrayRange no se cambiará, dejaremos el tipo int. Hemos corregido el optimizador de código, ahora el error descrito por usted no se producirá.

El número total de elementos en el array MQL no puede exceder INT_MAX y esto no cambiará.
Si necesitas arrays de mayor tamaño en un programa MQL, debes crear una clase aparte (por ejemplo, CBigArray).
 

Tratando de dominar iCustom en mql5. Lo dominé en mql4 :)

El problema es dibujar algo similar al MACD, pero en lugar de una media móvil rápida se debe utilizar el indicador VIDYA, que está en la carpeta de Ejemplos.

Tomé un código MACD estándar y puse parámetros para VIDYA en lugar de la MA. El problema es que todo se compila pero no se dibuja nada.

He marcado dos lugares en el código de abajo donde he cambiado el código estándar del MACD. Por lo demás, todo es igual. Por favor, dígame qué más me falta. Supongo que está en alguna parte del código...

//+------------------------------------------------------------------+
//|                                                         MACD.mq5 |
//|                        Copyright 2009, MetaQuotes Software Corp. |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright   "2009, MetaQuotes Software Corp."
#property link        "http://www.mql5.com"
#property description "Moving Average Convergence/Divergence"
#include <MovingAverages.mqh>
//--- indicator settings
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots   2
#property  indicator_type1   DRAW_HISTOGRAM
#property  indicator_type2   DRAW_LINE
#property  indicator_color1  Silver
#property  indicator_color2  Red
#property  indicator_width1  2
#property  indicator_width2  1
#property  indicator_label1  "MACD"
#property  indicator_label2  "Signal"
//--- input parameters
Первый вставленный кусок:
input int                Per=7;               // Per
input int                Per1=21;             // Per1
input int                Shift=0            // Shift
Конец

input int                InpSlowEMA=84;               // Slow EMA period
input int                InpSignalSMA=9;              // Signal SMA period
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE; // Applied price
//--- indicator buffers
double                   ExtMacdBuffer[];
double                   ExtSignalBuffer[];
double                   ExtFastMaBuffer[];
double                   ExtSlowMaBuffer[];
//--- MA handles
int                      ExtFastMaHandle;
int                      ExtSlowMaHandle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ExtMacdBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ExtSignalBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,ExtFastMaBuffer,INDICATOR_CALCULATIONS);
   SetIndexBuffer(3,ExtSlowMaBuffer,INDICATOR_CALCULATIONS);
//--- sets first bar from what index will be drawn
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,InpSignalSMA-1);
//--- name for Dindicator subwindow label
   IndicatorSetString(INDICATOR_SHORTNAME,"MACD("+string(InpSlowEMA)+","+string(InpSignalSMA)+")");
//--- get MA handles
Второй вставленный кусок
   ExtFastMaHandle=iCustom(NULL,0,"Examples\\VIDYA",
                     Per,
                     Per1,
                     Shift
                     );
Конец
   ExtSlowMaHandle=iMA(NULL,0,InpSlowEMA,0,MODE_SMA,InpAppliedPrice);
//--- initialization done
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
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 &TickVolume[],
                const long &Volume[],
                const int &Spread[])
  {
//--- check for data
   if(rates_total<InpSignalSMA)
      return(0);
//--- not all data may be calculated
   int calculated=BarsCalculated(ExtFastMaHandle);
   if(calculated<rates_total)
     {
      Print("Not all data of ExtFastMaHandle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);
     }
   calculated=BarsCalculated(ExtSlowMaHandle);
   if(calculated<rates_total)
     {
      Print("Not all data of ExtSlowMaHandle is calculated (",calculated,"bars ). Error",GetLastError());
      return(0);
     }
//--- we can copy not all data
   int to_copy;
   if(prev_calculated>rates_total || prev_calculated<0) to_copy=rates_total;
   else
     {
      to_copy=rates_total-prev_calculated;
      if(prev_calculated>0) to_copy++;
     }
//--- get Fast EMA buffer
   if(IsStopped()) return(0); //Checking for stop flag
   if(CopyBuffer(ExtFastMaHandle,0,0,to_copy,ExtFastMaBuffer)<=0)
     {
      Print("Getting fast EMA is failed! Error",GetLastError());
      return(0);
     }
//--- get SlowSMA buffer
   if(IsStopped()) return(0); //Checking for stop flag
   if(CopyBuffer(ExtSlowMaHandle,0,0,to_copy,ExtSlowMaBuffer)<=0)
     {
      Print("Getting slow SMA is failed! Error",GetLastError());
      return(0);
     }
//---
   int limit;
   if(prev_calculated==0)
      limit=0;
   else limit=prev_calculated-1;
//--- calculate MACD
   for(int i=limit;i<rates_total && !IsStopped();i++)
      ExtMacdBuffer[i]=ExtFastMaBuffer[i]-ExtSlowMaBuffer[i];
//--- calculate Signal
   SimpleMAOnBuffer(rates_total,prev_calculated,0,InpSignalSMA,ExtMacdBuffer,ExtSignalBuffer);
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }
//+------------------------------------------------------------------+
 
Nilog:

Tratando de dominar iCustom en mql5. En mql4 pude dominarlo virtuosamente :)


¿Qué escribe en el registro? No se comprueban los errores (por ejemplo, al recibir un asa). ¿Coincide el número del buffer en el nuevo indicador con el antiguo?
 

No sé si esto ya ha sucedido, pero la cuestión es, nueva barra, el valor PLOT_EMPTY_VALUE para el buffer se establece en 0,0, pero en realidad a veces hay valores completamente diferentes