Librerías: Symbol - página 5

 
Viktar Dzemikhau:
Me pregunto por qué se necesitan símbolos personalizados.

historial de ticks de terceros - no MT5. Usted puede entender inmediatamente qué tan bien la fuente se ajusta a su TS en términos de condiciones de negociación.

  • Puede sincronizar historiales de precios de diferentes símbolos para evitar falsas situaciones de arbitraje.
  • Puede ejecutar Asesores Expertos estadísticos en el probador en diferentes historiales de precios y comparar las condiciones de negociación.
  • Puede comparar desfases entre diferentes fuentes.
  • Puede eliminar errores obvios en el historial de precios y rellenar agujeros.
  • Puede generar su propio historial de precios con los datos estadísticos necesarios - Monte Carli TC.
  • Puede generar el historial de precios de símbolos sintéticos y ejecutar TC en ellos.
  • ...
  • Algunas cosas se implementan en esta rama.

     
    fxsaber:

    En MT5 tester, por regla general (forex, por ejemplo), las órdenes limitadas tienen deslizamiento positivo, lo que lleva al Llamar a ExpertRemove cuando se haya producido el evento correspondiente. Acelerando así significativamente la Optimización.

    Es especialmente importante para los símbolos personalizados, ya que allí se realizan transacciones incluso con saldo negativo.

    ExpertRemove simple no servirá, porque se fuerza el cierre de las posiciones actuales a cero último precio en caso de que no haya datos al respecto en los símbolos personalizados (lo más frecuente).


    Por lo tanto, para todavía salir de la backtest sin póquer, usted debe hacer lo siguiente antes de ExpertRemove

    // Cierra posiciones mediante órdenes limitadas
    bool CloseAll()
    {
      bool Res = true;
      
      for (int i = OrdersTotal() - 1; i >= 0; i--)
        if (OrderSelect(i, SELECT_BY_POS))
          Res &= (OrderType() > OP_SELL) ? OrderDelete(OrderTicket())
                                         : OrderSend(OrderSymbol(), OrderType() ? OP_BUYLIMIT : OP_SELLLIMIT , OrderLots(), OrderClosePrice(), 100, 0, 0) && false;
        
      return(Res);
    }
    
    void OnTick( void )
    {
      if (IsRemove() && CloseAll())
        ExpertRemove();
    }


    Tenga en cuenta que el cierre en el tick actual será sólo en la red (donde se implementa la tarea original de eliminar los deslizamientos de las órdenes limitadas), ya que el cierre en el tick actual será sólo en la red (donde se implementa la tarea original de eliminar los deslizamientos de las órdenes limitadas).

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

    Bibliotecas: Symbol

    fxsaber, 2018.04.06 16:43

    Las órdenes limitadas al precio actual en símbolos de bolsa Cuentas de compensación se ejecutarán (y en Tester) inmediatamente, sin esperar al siguiente tick.


    Tenga en cuenta que no solo es importante el símbolo bursátil, sino también la cuenta de compensación. Por ejemplo, puede tomar un símbolo MOEX en una Hedge-MQ-Demo, pero no se ejecutará de la misma manera (y en el Tester) que en la misma Netting-MQ-Demo.

    Esta es una de las razones por las que los backtests de los mismos símbolos MOEX completamente idénticos pueden ser diferentes, dependiendo del tipo de cuenta.

    Así que a veces hay que esperar al siguiente tick.


    Ese es el tipo de baile.

     

    Foro sobre trading, sistemas automatizados de trading y prueba de estrategias de trading

    Bibliotecas: Symbol

    fxsaber, 2018.04.07 22:37

    Resumen

    En ticks reales, el número de ticks disminuyó 16 veces (el filtro más ligero), la velocidad de Optimización aumentó 14 veces, la calidad no sufrió en absoluto (análisis que no entró aquí). Por supuesto, esto sólo se puede hacer cuando se escribe el TS de una manera determinada. En particular, con la ausencia de análisis de barras.

    La anterior aceleración universal gratuita sólo daba un aumento del doble. La actual también es gratuita (la calidad no se resiente), pero menos universal. Sin embargo, el rendimiento es de más de un orden de magnitud. Ahora optimizo TC sólo de esta manera. No me equivoco.

    Dado que el tema se refiere a la aceleración, aquí es otra receta para la aceleración

    Foro sobre trading, sistemas automatizados de trading y prueba de estrategias de trading.

    Errores, fallos, preguntas

    fxsaber, 2018.09.11 17:15

    Carpeta tester movida a RAMDisk de 5Gb y en el directorio MT5 ejecutado.

    mklink /j Tester z:\Tester


    Ahora SSD duerme tranquilamente, Optimización se convirtió en ~ 1,5 veces (a ojo) más rápido, ¡gratis!

    Al mismo tiempo SSD no se mata.

     
    fxsaber:

    simple ExpertRemove no puede hacer, porque las posiciones actuales se ven obligados a ser cerrado a cero último precio si no hay datos sobre el mismo en los símbolos personalizados (más a menudo).


    Estos son tales bailes.

    Las muletas son también en otro

    Foro sobre el comercio, los sistemas automatizados de comercio y probar estrategias de negociación

    Errores, fallos, preguntas

    fxsaber, 2018.09.12 18:30

    En el vídeo

    Instrumento de intercambio en ticks reales. Las barras se construyen por Bid, no hay datos de flipper, la posición BUY está abierta. Se puede ver claramente que el precio de cierre actual de la posición

    PositionGetDouble(POSITION_PRICE_CURRENT)

    es constantemente igual a cero, a pesar de que Bid está cambiando todo el tiempo. ¿Cómo puedo explicar al Probador que un símbolo bursátil debe cerrar una posición de COMPRA por Bid? Ahora mismo, ni siquiera se calcula la equidad.


    Así que por ahora la única solución es hacer (Bid+Ask)/2.

     
    fxsaber:

    Dado que el tema se refiere a la aceleración

    El recorrido de "ticks reales" del probador durante tres meses (8 millones de ticks) tarda 100 ms (4000 OrderSend, 800 trades + lógica EA). La receta es símbolos personalizados.

     

    Gracias por el código. He creado algo para mí basado en él... Sin embargo, he modificado ligeramente el método de clonación para que sea posible cargar una cierta parte de la historia. De lo contrario, si hay muchos ticks, consume mucha RAM.

    bool CiCustomSymbol::Clone(const string _src_symbol,const ulong _from_msc=0,const ulong _to_msc=LONG_MAX)
    
     
    Denis Kirichenko:

    Ajusté ligeramente el método de clonación para permitir la carga de una parte determinada del historial. De lo contrario, si hay muchos ticks, consume mucha RAM.

    Lo he actualizado teniendo en cuenta tu comentario, Gracias.

     

    También he creado 2 métodos para cargar un historial personalizado desde un archivo . Digamos que hay 2 archivos con ticks y minutos. La tarea es cargarlos en la base de datos de ticks y cotizaciones del símbolo seleccionado.

    bool              LoadTicks(const string _src_file_name);
    bool              LoadRates(const string _src_file_name);
     
    Denis Kirichenko:

    También he creado 2 métodos para cargar un historial personalizado desde un archivo . Digamos que hay 2 archivos con ticks y minutos. La tarea es cargarlos en la base de datos de ticks y cotizaciones del símbolo seleccionado.

    Así que el formato no está definido en el caso general.

     
    fxsaber:

    Así que el formato no está definido de forma general.

    Sí, pero tenemos que pensar en ello. Pero tengo archivos de ticks con un formato especificado, y lo he hecho por ahora. Bastante simple: <DATE>,<TIME>,<BID>,<ASK>.