Discusión sobre el artículo "Símbolo personalizados: fundamentos de uso en la práctica" - página 6

 
Mr David Frederick Roberts #: Gracias Fernando, sospechaba que era algo estúpido lo que estaba haciendo pero simplemente no lo veía. Como he dicho estoy mucho más familiarizado con MT4 (unos 8 años) y no me había dado cuenta de que había dos opciones "£Every Tick" en MT5. Simplemente la puse en marcha, vi que estaba configurado en "Every Tick" y asumí que si tenía ticks reales los usaría. Tenía que ser algo sencillo y te agradezco de nuevo que lo hayas detectado.
¡De nada!
 

Tal vez hay una nueva versión de EqualVolumeBars en alguna parte? He encontrado 2 problemas al utilizar este EA:

1. 1. Al compilar EqualVolumeBars, aparece 1 advertencia (fácilmente solucionable en Symbol.mqh sustituyendo time por _time por ejemplo):

declaration of 'time' hides global variable	Symbol.mqh	28	47

2. Las barras desaparecen. Según he entendido, ocurre cuando ha llegado un nuevo día en el terminal. Por ejemplo, la fecha en TimeCurrent() es 2023.06.03 (BTCUSD hace ticks los fines de semana), y la última barra de rango se abrió en 2023 .06.02. Todas las barras para 2023.06.02 desaparecerán.

Puede reproducir este problema en unos pocos pasos:

  • Conmute la línea 360 en EqualVolumeBars (para que el gráfico no se actualice solo):
//ChartSetSymbolPeriod(id,symbolName,PERIOD_M1);
  • Añade EqualVolumeBars al gráfico EURAUD con los siguientes parámetros:

Obtener un gráfico como este:

  • Clic derecho en el gráfico y clic en Actualizar. Resultado:


 
Andrei Iakovlev #:

¿Tal vez hay una nueva versión de EqualVolumeBars en alguna parte? He encontrado 2 problemas durante el uso de este Asesor Experto:

1. Al compilar EqualVolumeBars 1 advertencia aparece (fácilmente fijo en Symbol.mqh mediante la sustitución de tiempo con _time por ejemplo):

2. Las barras desaparecen. Según he entendido, ocurre cuando ha llegado un nuevo día en el terminal. Por ejemplo, la fecha en TimeCurrent() es 2023.06.03 (BTCUSD hace ticks los fines de semana), y la última barra de rango se abrió en 2023 .06.02. Todas las barras para 2023.06.02 desaparecerán.

Puede reproducir este problema en unos pocos pasos:

  • Conmute la línea 360 en EqualVolumeBars (para que el gráfico no se actualice solo):
  • Añade EqualVolumeBars al gráfico EURAUD con los siguientes parámetros:

Obtener un gráfico como este:

  • Haga clic con el botón derecho del ratón sobre el gráfico y haga clic en Actualizar. Resultado:


No hay nueva versión.

Hay errores en la implementación de caracteres personalizados en el terminal, sobre los que escribí en algún sitio, pero no están realmente arreglados.

En este caso, puedes mirar el código - el símbolo existente se rellena completamente al iniciar el Asesor Experto, por lo que si algo sobra o por el contrario, el principio del día desaparece - así es como funciona la API MQL5.

Dado que el código fuente es abierto, puede sugerir una solución para curar el problema.

 

Hola Stanislav Korotky

Gracias por todo lo que hiciste en varias formas y tipos en relación con "Símbolos personalizados" tema

En segundo lugar lo siento por escribir en Inglés, ya que no sé ruso - :)

1 problema en el codigo "RenkoTicks" (tipo de error)

1

Puede usted amablemente manejar el tiempo, la eliminación de este error

saludos

Stanislav Korotky
Stanislav Korotky
  • 2023.04.26
  • www.mql5.com
Trader's profile
 
mntiwana #:

¿Puede usted amablemente gestionar el tiempo, la eliminación de este error

Sólo tiene que quitar 0 dentro de las llaves. Por favor, siga MQL5 cambios de sintaxis en las noticias anuncia. Este es un poco viejo - No puedo recordar la referencia exacta ahora.

 
Stanislav Korotky #:

Este es un poco viejo,,,

Una vez más, me tomó 3 años para encontrar esta obra de arte. Si esto es "viejo", viejo acaba de conocer ... lento. Ha. Gracias.

 

Con respecto a RenkoTicks.mq5, experimenté un problema de conversión de puntos a pips con precios de 3 dígitos. Anteriormente experimenté lo mismo con algunas utilidades en MT4, así que implementé la misma corrección:


//en globales, insertar
double _PntsToPips;

//en OnInit, insertar
if(_Digits == 3 || _Digits == 5)
{
 PntsToPips = 10;
}
else
{
 _PntsToPips = 1;
}

//en 2 líneas que contengan _Point (no en sendSpread...), inserte
* _PntsToPips //2 nuevas líneas serán:

double Renko::boxPoints = NormalizeDouble(RenkoBoxSize * _Point * _PntsToPips, _Digits);
Renko::setBoxPoints(NormalizeDouble(RenkoBoxSize * _Point * _PntsToPips, _Digits));


 

He aquí una pequeña pero importante mejora en la señal personalizada basada en el cruce de 2 MA. Los objetos indicadores subyacentes mantienen buffers internos con los datos del indicador (no sólo en el caso de la MA, sino en general), por lo que llamar a m_maFast .Main(ind) o m_maSlow.Main(ind) lleva a leer datos algo obsoletos (en caché) de los objetos, no de los propios indicadores, si tu sistema de trading opera por ticks (¡!). Ahora se sustituye por las siguientes llamadas a GetData que es básicamente una envoltura para CopyBuffer directo:

class Signal2MACross : public CExpertSignal
{
    ...
    // funciones de ayuda para leer los datos de los indicadores
    double FastMA(int ind) { static double buffer[1]; m_maFast.GetData(ind, 1, 0, buffer); return buffer[0]; }
    double SlowMA(int ind) { static double buffer[1]; m_maSlow.GetData(ind, 1, 0, buffer); return buffer[0]; }
};

El archivo de cabecera actualizado se adjunta. Debe ser colocado en /MQL5/Include/Expert/Signal/MySignals/. Sin esto las señales han sido construidas por barras completas.

Archivos adjuntos:
 
<br/ translate="no">

Ha resultado ser aún peor. Algunas veces timeseries no se vuelven a calcular todavía cuando se dispara nueva garrapata, por lo tanto, índice de barras debe ajustarse dinámicamente para el análisis de señales de comercio. Por ejemplo (aproximación aproximada):

    double FastMA(int ind)
    {
      MqlTick t;
      SymbolInfoTick(m_symbol.Name(), t);
      bool correction = false;

      if(t.time / 60 * 60 != iTime(m_symbol.Name(), PERIOD_CURRENT, 0) && ind > 0)
      {
        ind--;
        correction = true;
      }
      
      static double buffer[1]; m_maFast.GetData(ind, 1, 0, buffer);
      
      if(correction)
        PrintFormat("F: %s'%03d %s %.5f", TimeToString(t.time, TIME_SECONDS), t.time_msc % 1000, TimeToString(iTime(m_symbol.Name(), PERIOD_CURRENT, 0)), buffer[0]);
        
      return buffer[0]; 
    }

Esto es crítico para los EAs que operan en la apertura de la barra, y para símbolos con ticks dispersos.

 

¿Y cómo hacer un gráfico en línea con el precio medio utilizando la fórmula (bid+ask)/2?