Librerías: Symbol - página 4

 

Foro sobre negociación, sistemas automatizados de negociación y prueba de estrategias de negociación

Machine learning en trading: teoría y práctica (trading y no sólo)

fxsaber, 2018.04.15 16:31

Creemos un símbolo personalizado con la distribución de ticks adecuada y escribamos un TC grial. Hagamos un backtest y posteemos el resultado.

// Ejemplo de creación de un personaje personalizado a partir de ticks generados

#property script_show_inputs

input string SymbName = "TESTER";

#include <fxsaber\ThirdPartyTicks\CustomSymbol.mqh> // https://www.mql5.com/es/code/20225

// Generación del historial de ticks con la propiedad requerida - ejemplo técnico
int GetTicks( MqlTick &Ticks[], const int Amount = 1 e5 )
{
  static const MqlTick NullTick = {0};
  
  const int Size = ArrayResize(Ticks, Amount);
  
  long time = (TimeCurrent() - 7 * 24 * 3600) * 1000;
  
  for (int i = 0; i < Size; i++)
  {
    Ticks[i] = NullTick;
    
    const double Price1 = NormalizeDouble(MathRand() / 1000.0, 3);
    const double Price2 = NormalizeDouble(MathRand() / 1000.0, 3);
    
    Ticks[i].bid = MathMin(Price1, Price2);
    Ticks[i].ask = MathMax(Price1, Price2);
    
    time += MathRand();
    
    Ticks[i].time_msc = time;
    Ticks[i].time = (datetime)(time / 1000);
  }
  
  return(Size);
}

void OnStart()
{  
  CUSTOMSYMBOL Symb(SymbName); // Creado un símbolo

  if (Symb.IsCustom())
  {
    Symb.SetProperty(SYMBOL_TRADE_STOPS_LEVEL, 0);    

    // Hacer que la moneda del símbolo sea la moneda de la cuenta
    Symb.SetProperty(SYMBOL_CURRENCY_PROFIT, AccountInfoString(ACCOUNT_CURRENCY));
    Symb.SetProperty(SYMBOL_CURRENCY_MARGIN, AccountInfoString(ACCOUNT_CURRENCY));
    Symb.SetProperty(SYMBOL_CURRENCY_BASE, AccountInfoString(ACCOUNT_CURRENCY));

    // Para calcular el beneficio
// Symb.SetProperty(SYMBOL_TRADE_TICK_VALUE, 1);
// Symb.SetProperty(SYMBOL_TRADE_TICK_SIZE, Symb.GetProperty(SYMBOL_POINT));
    
    MqlTick Ticks[];
    
    GetTicks(Ticks); // Formado un historial de garrapatas
    
    if ((Symb.AddTicks(Ticks) > 0) && (Symb.DataToSymbol() > 0) && Symb.On()) // Enviar el historial de ticks al símbolo
      ChartOpen(Symb.Name, PERIOD_CURRENT); // Abierto el gráfico
  }
}

En este script necesitamos escribir sólo nuestro propio GetTicks. Basándonos en el historial generado, tendremos un símbolo (personalizado) casi completo disponible para operar en el Probador.


 
fxsaber:

Otro escenario de uso de símbolos personalizados (no necesariamente con la ayuda de esta biblioteca).


Es posible automatizar completamente el backtest regular del Asesor Experto en datos históricos frescos y transferir los resultados de la prueba al Asesor Experto de combate para sincronizar la imagen real con el probador. Esto le permite implementar dicha lógica de negociación sin escribir su propio probador


Otra posibilidad de utilizar este esquema:

Se toma una versión demo gratuita del Asesor Experto del Mercado y se persigue en el tester por cotizaciones frescas, el copiador toma los datos del resultado del tester. En consecuencia, la versión de pago no es necesario.


Tal vez sea necesario prohibir el backtest de los Asesores Expertos de Mercado en símbolos personalizados....

// Incluir el día actual en el backtest
#property script_show_inputs

#include <Symbol.mqh> // https://www.mql5.com/es/code/18855

input int Offset = -24 * 7; // Desplazamiento en horas

#define  HOUR 3600

void OnStart()
{
  const SYMBOL Symb(_Symbol + "_Offset" + (string)Offset); // Creado un símbolo

  if (Symb.IsExist()) // Si se crea el símbolo
  {
    Symb.CloneProperties(); // Copiar las propiedades
    
    MqlRates Rates[];

    // Tiempos de barra desplazados
    for (int i = CopyRates(_Symbol, PERIOD_M1, 0, (int)SeriesInfoInteger(_Symbol, PERIOD_M1, SERIES_BARS_COUNT), Rates) - 1; i >= 0; i--)
      Rates[i].time += Offset * HOUR;
      
// Symb.CloneTicks(Ticks);

    // Registre las barras de desplazamiento e incluya el símbolo en la Observación del Mercado
    if ((Symb.CloneRates(Rates) > 0) && Symb.On())
      ChartOpen(Symb.Name, PERIOD_CURRENT); // Abrir un nuevo gráfico de símbolos
  }
}

MT5 Build 1880 - funciona hasta ahora.

 

Dos formas de establecer deslizamientos en el Probador

  1. Inserte pseudo-ticks (precios degradados por el valor del deslizamiento) entre los ticks reales. Entonces los ticks impares - análisis, los pares - trading.
  2. Análisis por un símbolo real, trading - por uno personalizado. Personalizado - degradación del real por el valor de deslizamiento.

 

gran biblioteca, pero, y cito.

Andrey Khatimlianskii:

Gracias. Como siempre, un poco más complicado de lo que me gustaría ;)

Tus códigos tienen una ventaja innegable: se pueden coger y utilizar. Pero es bastante difícil retocar algo en ellos, eso es una desventaja.

Es muy conveniente que con una línea creo una copia totalmente lista de un símbolo personalizado, pero:

¡dime cómo crear su propio símbolo utilizando su biblioteca, pero no para copiar los datos históricos - Quiero modificar OHLC, y no quiero estropear su código ))), gracias de antemano!

 
¿Y por qué se necesitan símbolos personalizados? Si los símbolos reales disponibles en DC se negocian ?
 
Viktar Dzemikhau:
¿Y por qué se necesitan símbolos personalizados? ¿Si los símbolos reales disponibles en DC se negocian?

Desarrollo el pensamiento de dickfix, como "no siempre es posible utilizar cualquier símbolo para el comercio automático, si el EA no funciona en este símbolo, tal vez necesita otro símbolo o utilizar gráficos personalizados".

hay un cierto razonamiento en ello.

;)

 
Igor Makanu:

Estoy desarrollando el pensamiento de dickfix, como "que no siempre es posible utilizar cualquier símbolo para el comercio automático, si el EA no funciona en este símbolo, tal vez necesita otro símbolo o utilizar gráficos personalizados".

hay un cierto razonamiento en ello.

;)

Esto es basura. ¿Qué más da el símbolo? Si el símbolo es real, se puede acceder a él. Tengo mi propia clase de símbolo. El único miembro necesario de la clase es el nombre del instrumento negociado. Tú introduces otro instrumento, y yo obtengo todos los datos necesarios. Así que me pregunté, después de haber entrado en este hilo, ¿por qué un símbolo personalizado? Si se puede negociar, su nombre es tal y cual, y si no se puede negociar... ¿cómo que no?
 
Viktar Dzemikhau:
Si se puede operar, su nombre es fulano de tal, y si no se puede operar... ¿cómo que no se puede operar?

¿Por qué no se puede negociar? El Asesor Experto trabajará en el probador de estrategias, por lo que puede utilizar el optimizador... lo que significa que puedes buscar patrones.

Como se suele decir, cada uno tiene su propio camino - si usted piensa que puede almacenar los datos en una clase, adelante, es más fácil para mí para la salida de datos en un símbolo personalizado y, a continuación, utilizar indicadores en este gráfico.

aqui esta el spread EURUSD - GBPUSD de mis sintes.

https://charts.mql5.com/18/849/spread-h1-alpari-international-limited.png

es muy cómodo que puedas ver visualmente el gráfico y analizar el tiempo de las barras, y además están todos los TFs y puedes ejecutar una estrategia en el probador de estrategias, y no es un problema volver a los símbolos reales.

 
Igor Makanu:

¿por qué no? en el probador de estrategias el Asesor Experto funcionará, por lo que podrá utilizar el optimizador... lo que significa que puedes buscar patrones.

Como se suele decir, cada uno tiene su propio camino - si usted piensa que los datos se pueden almacenar en una clase, adelante, es más fácil para mí para la salida de datos en un símbolo personalizado y luego utilizar indicadores en este gráfico.

Por supuesto que sí. Después de todo, en 5 puedes acceder a diferentes herramientas en cualquier momento. Y escribir una clase para cada herramienta es redundante. Es como si hay formas, y no vamos a utilizar la forma de clase base, y siempre escribir uno nuevo. No estoy criticando, por supuesto. fxsaber escribe cosas muy competentes a veces. Y él sabe mejor, al parecer lo necesita. Pero creo que es innecesario.


Igor Makanu:

¿por qué no se puede? un Asesor Experto trabajará en el probador de la estrategia, por lo que puede utilizar el optimizador ... lo que significa que puede buscar patrones

Como se suele decir, cada uno tiene su propio camino - si usted piensa que los datos se pueden almacenar en una clase, adelante, es más fácil para mí para la salida de datos en un símbolo personalizado y luego utilizar indicadores en este gráfico.

Aquí está un bosquejo del spread EURUSD - GBPUSD de mis sintéticos.

https://charts.mql5.com/18/849/spread-h1-alpari-international-limited.png

Es muy cómodo que puedas ver visualmente el gráfico y analizar el tiempo de las barras, y además están todos los TFs y puedes ejecutar una estrategia en el probador de estrategias, y no es un problema volver a símbolos reales.

Si hubiera sabido lo que daría, quizás hubiera apoyado esta idea. Pero tal y como está...)))

 
Igor Makanu:

¡por favor dime como crear tu propio simbolo usando tu libreria, pero no copiar datos historicos - quiero modificar OHLC, y no quiero estropear tu codigo ))), gracias de antemano!

Arriba hay un código corto. Hay comentarios detallados allí.