Pregunta sobre las cotizaciones de FORTS - página 3

 

Es aconsejable que la hora del ordenador sea exacta, para que haya menos posibilidades de equivocarse en los registros.

Gracias por el script: aquí están los resultados de este script en 1 minuto 17:36

CollectTicks (ED-12.14,M1)      2014.11.10 17:36:06; Bid = 1.2474; Ask = 1.2475; Last = 1.2476; Vol = 3
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:06; Bid = 1.2474; Ask = 1.2476; Last = 1.2476; Vol = 3
 CollectTicks (ED-12.14,M1)      2014.11.10 17:36:12; Bid = 1.2474; Ask = 1.2476; Last = 1.2476; Vol = 5
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:26; Bid = 1.2474; Ask = 1.2475; Last = 1.2476; Vol = 5
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:28; Bid = 1.2474; Ask = 1.2476; Last = 1.2476; Vol = 5
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:29; Bid = 1.2474; Ask = 1.2476; Last = 1.2474; Vol = 8
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:29; Bid = 1.2473; Ask = 1.2475; Last = 1.2474; Vol = 8
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:30; Bid = 1.2473; Ask = 1.2474; Last = 1.2473; Vol = 5
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:30; Bid = 1.2472; Ask = 1.2474; Last = 1.2473; Vol = 5
CollectTicks (ED-12.14,M1)      2014.11.10 17:36:43; Bid = 1.2472; Ask = 1.2474; Last = 1.2474; Vol = 2

La peculiaridad de OnTick es que reacciona tanto a los cambios de Bid/Ask (flujo de información) como al Last (flujo de operaciones).

Como resultado, el número de llamadas OnTick para los instrumentos negociados en bolsa es conscientemente mayor que el número de transacciones comerciales.

¿Por qué se hace así?

  1. no se puede ahogar a un Asesor Experto sólo con operaciones comerciales y no darle información sobre los cambios del mercado (una cosa es llamarlo 5 veces y otra cosa es llamarlo 15 veces)
  2. es imposible dar cero last y last_volume en la revisión del mercado en vivo, porque algunos comerciantes explotarán


Otra cosa es el hecho de que en las actualizaciones por lotes, cuando dos o más ticks de un instrumento llegan al mismo tiempo, OnTick se llama una vez. Esto nos permite no ralentizar el flujo de cotizaciones entrantes y no hacer una enorme cola de ticks para los Asesores Expertos que se ralentizan.

Pronto habilitaremos el flujo de Tiempo y Ventas, que nos permitirá analizar con precisión la alimentación de las operaciones.

 
Renat:

Es aconsejable que la hora del ordenador sea exacta, para que haya menos posibilidades de equivocarse en los registros.

Gracias por el script: aquí están los resultados de este script en 1 minuto 17:36

La peculiaridad de OnTick es que reacciona tanto a los cambios de Bid/Ask (flujo de información) como al Last (flujo de operaciones).

Como resultado, el número de llamadas OnTick para los instrumentos negociados en bolsa es conscientemente mayor que el número de transacciones comerciales.

¿Por qué se hace así?

  1. no se puede ahogar a un Asesor Experto sólo con operaciones comerciales y no darle información sobre los cambios del mercado (una cosa es llamarlo 5 veces y otra cosa es llamarlo 15 veces)
  2. es imposible dar cero last y last_volume en la revisión del mercado en vivo, porque algunos comerciantes explotarán


Hay otra cosa con el hecho de que en las actualizaciones por lotes, cuando dos o más ticks por herramienta llegan al mismo tiempo, entonces OnTick es llamado una vez. Esto le permite no ralentizar el flujo de cotizaciones entrantes y no hacer una enorme cola de ticks para ralentizar los EAs.

Pronto incluiremos un flujo de Tiempo y Ventas, que nos dará la capacidad de analizar con precisión la cinta de operaciones.

Todo esto está muy bien, por supuesto, pero para FORTS, donde hay pilas, se debería haber añadido una bandera de cotización a la estructura MqlTick.

La "multiplicación" de las operaciones no es terrible, lo peor es que se pierden las operaciones reales.

P.D. Mi BAN está relacionado con mi dirección IP, por favor quítalo, de lo contrario tengo que reinstalar mi navegador cada vez para responderte.

 

Есть еще один момент с тем, что на пакетных обновлениях, когда одновременно приходят два и более тика по инструменту, то OnTick вызывается однократно. Это позволяет не тормозить поток входящих котировок и не делать огромную очередь тиков для тормозящих экспертов.

Este enfoque da como resultado lo siguiente:

Como debe ser:

Papel Tiempo(mcs) Precio Cantidad

317922.000000 RTS-12.14 [FORTS] 18:44:54 199000.000000 104140.000000 1.000000

317923.000000 RTS-12.14 [FORTS] 18:44:54 261000.000000 104130.000000 1.000000
317924.000000 RTS-12.14 [FORTS] 18:44:54 587000.000000 104140.000000 1.000000
317925.000000 RTS-12.14 [FORTS] 18:44:54 589000.000000 104140.000000 1.000000
317926.000000 RTS-12.14 [FORTS] 18:44:54 691000.000000 104140.000000 1.000000
317927.000000 RTS-12.14 [FORTS] 18:44:54 691000.000000 104140.000000 1.000000
317928.000000 RTS-12.14 [FORTS] 18:44:54 842000.000000 104130.000000 2.000000
317929.000000 RTS-12.14 [FORTS] 18:44:54 919000.000000 104150.000000 1.000000
317930.000000 RTS-12.14 [FORTS] 18:44:55 337000.000000 104150.000000 1.000000
317931.000000 RTS-12.14 [FORTS] 18:44:55 337000.000000 104150.000000 1.000000
317932.000000 RTS-12.14 [FORTS] 18:44:55 337000.000000 104160.000000 1.000000
317933.000000 RTS-12.14 [FORTS] 18:44:55 337000.000000 104160.000000 1.000000
317934.000000 RTS-12.14 [FORTS] 18:44:55 337000.000000 104160.000000 3.000000
317935.000000 RTS-12.14 [FORTS] 18:44:55 375000.000000 104140.000000 1.000000
317936.000000 RTS-12.14 [FORTS] 18:44:55 375000.000000 104130.000000 5.000000
317937.000000 RTS-12.14 [FORTS] 18:44:55 796000.000000 104130.000000 1.000000
317938.000000 RTS-12.14 [FORTS] 18:44:55 799000.000000 104130.000000 2.000000
317939.000000 RTS-12.14 [FORTS] 18:44:56 54000.000000 104160.000000 1.000000
317940.000000 RTS-12.14 [FORTS] 18:44:57 235000.000000 104160.000000 1.000000
317941.000000 RTS-12.14 [FORTS] 18:44:57 451000.000000 104140.000000 2.000000
317942.000000 RTS-12.14 [FORTS] 18:44:57 487000.000000 104140.000000 6.000000
317943.000000 RTS-12.14 [FORTS] 18:44:57 521000.000000 104160.000000 1.000000
317944.000000 RTS-12.14 [FORTS] 18:44:57 621000.000000 104160.000000 1.000000
317945.000000 RTS-12.14 [FORTS] 18:44:58 38000.000000 104160.000000 3.000000
317946.000000 RTS-12.14 [FORTS] 18:44:58 695000.000000 104160.000000 13.000000
317947.000000 RTS-12.14 [FUERTES] 18:44:58 883000.000000 104140.000000 2.000000

317948.000000 RTS-12.14 [FORTS] 18:44:58 986000.000000 104160.000000 1.000000
317949.000000 RTS-12.14 [FORTS] 18:44:58 993000.000000 104160.000000 5.000000
317950.000000 RTS-12.14 [FORTS] 18:44:58 993000.000000 104160.000000 5.000000
317951.000000 RTS-12.14 [FORTS] 18:44:58 995000.000000 104160.000000 5.000000
317952.000000 RTS-12.14 [FORTS] 18:44:58 996000.000000 104160.000000 1.000000
317953.000000 RTS-12.14 [FORTS] 18:44:59 56000.000000 104160.000000 1.000000
317954.000000 RTS-12.14 [FORTS] 18:44:59 560000.000000 104140.000000 1.000000
317955.000000 RTS-12.14 [FORTS] 18:44:59 604000.000000 104140.000000 1.000000
317956.000000 RTS-12.14 [FORTS] 18:44:59 647000.000000 104160.000000 1.000000


Como se consigue en MT5:

NE 0 18:44:54.483 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:54 Oferta = 104130 Demanda = 104150 Última = 104140 Vol = 1
ES 0 18:44:54.639 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:54 Bid = 104130 Ask = 104150 Last = 104130 Vol = 2
OR 0 18:44:54.720 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:54 Bid = 104130 Ask = 104150 Last = 104150 Vol = 1
NQ 0 18:44:54.983 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:55 Oferta = 104140 Demanda = 104150 Última = 104150 Vol = 1
FP 0 18:44:55.139 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:55 Bid = 104140 Ask = 104160 Last = 104160 Vol = 3
JO 0 18:44:55.174 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:55 Bid = 104140 Ask = 104160 Last = 104130 Vol = 5
GN 0 18:44:55.206 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:55 Bid = 104130 Ask = 104160 Last = 104130 Vol = 5
RM 0 18:44:55.592 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:55 Bid = 104130 Ask = 104160 Last = 104130 Vol = 2
IL 0 18:44:55.891 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:56 Bid = 104130 Ask = 104160 Last = 104160 Vol = 1
HJ 0 18:44:55.921 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:56 Oferta = 104140 Demanda = 104160 Última = 104160 Vol = 1
RI 0 18:44:57.032 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:57 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
PH 0 18:44:57.242 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:57 Bid = 104140 Ask = 104160 Last = 104140 Vol = 2
FG 0 18:44:57.297 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:57 Bid = 104140 Ask = 104160 Last = 104140 Vol = 6
PF 0 18:44:57.328 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:57 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
JE 0 18:44:57.436 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:57 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
QD 0 18:44:57.838 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:58 Oferta = 104140 Demanda = 104160 Última = 104160 Vol = 3
DP 0 18:44:58.514 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:58 Bid = 104140 Ask = 104160 Last = 104160 Vol = 13
RR 0 18:44:58693 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:58 Oferta = 104140 Demanda = 104160 Última = 104140 Vol = 2
JP 0 18:44:58795 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:58 Oferta = 104140 Demanda = 104160 Última = 104160 Vol = 1
CO 0 18:44:58.852 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:59 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
GN 0 18:44:59.358 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:59 Bid = 104140 Ask = 104160 Last = 104140 Vol = 1
MM 0 18:44:59.406 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:59 Bid = 104140 Ask = 104160 Last = 104140 Vol = 1
IL 0 18:44:59.453 FORTSTicksAction (RTS-12.14,M1) Hora = 18:44:59 Bid = 104140 Ask = 104160 Last = 104160 Vol = 1
CK 0 18:50:31.437 FORTSTicksAction (RTS-12.14,M1) Hora = 18:50:24 Oferta = 0 Compra = 0 Última = 104160 Vol = 1
KH 0 18:50:33.357 FORTSTicksAction (RTS-12.14,M1) Hora = 18:50:24 Oferta = 104080 Demanda = 104180 Última = 104160 Vol = 1


Todos ellos son los últimos justo antes del cierre de la sesión (es decir, no hay cotizaciones más bajas hasta el final de la compensación).

Como punto de partida, tomemos las tres líneas marcadas en negro. Hay dos preguntas:

1.¿A dónde fueron a parar los marcados en rojo?

2.¿de dónde viene lo resaltado en azul?


Otra pregunta (opcional): ¿qué intervalo de tiempo significa "llegada simultánea"?

 
Dima_S:

Este enfoque da como resultado lo siguiente:

317945.000000 RTS-12.14 [FORTS] 18:44:58 38000.000000 104160.000000 3.000000
317946.000000 RTS-12.14 [FORTS] 18:44:58 695000.000000 104160.000000 13.000000
317947.000000 RTS-12.14 [FUERTES] 18:44:58 883000.000000 104140.000000 2.000000

317948.000000 RTS-12.14 [FORTS] 18:44:58 986000.000000 104160.000000 1.000000
317949.000000 RTS-12.14 [FORTS] 18:44:58 993000.000000 104160.000000 5.000000
317950.000000 RTS-12.14 [FORTS] 18:44:58 993000.000000 104160.000000 5.000000
317951.000000 RTS-12.14 [FORTS] 18:44:58 995000.000000 104160.000000 5.000000
317952.000000 RTS-12.14 [FORTS] 18:44:58 996000.000000 104160.000000 1.000000



Estas son todas las últimas justo antes de que se cierre la sesión (es decir, no hay cotizaciones más bajas hasta el final de la compensación).

Tomemos las tres líneas resaltadas en negro como punto de partida. Hay dos preguntas:

1.¿A dónde fueron a parar los marcados en rojo?

Lo más probable es que llegaran en un solo paquete de red y se llamaran como un solo OnTick. Hubo 8 ticks en un segundo, tres de ellos fueron llamadas individuales, y los últimos 5 probablemente vinieron en un paquete con la última cita mostrada como Last.


2. ¿De dónde viene el resaltado azul?

Esto es posterior al mercado. También damos la posibilidad de captar eventos posteriores a la comercialización. Ahí es donde la retirada de ofertas sólo suele funcionar.


Otra pregunta (opcional): ¿qué intervalo de tiempo significa "llegada simultánea"?

No es un intervalo, sino un paquete físico de red. Un paquete llega en 2-3-4 ticks, todos se superponen en la base, pero la llamada OnTick va una vez.

También existe la posibilidad de que el Asesor Experto esté ralentizado (ocupado) y se añada una nueva cotización a la base de datos pero no se llame a OnTick, ya que el Asesor Experto está trabajando. Si no existiera este mecanismo, desbordaríamos fácilmente las colas de entrada de cotizaciones para el Asesor Experto y empezaríamos a enviarle las cotizaciones antiguas.

 

¡Renat!

Muchas gracias por la detallada explicación, pero...

Me parece que este enfoque es inaceptable para los FORTS.

Debería ser: Cita - volumen, y nada más.

Había 11 citas, así que debería haber 11 en OnTick.

¿No es así?

 

No es así.

No hay que confundir la cuestión de la entrega de flujos de datos correctos y precisos al terminal con la llamada/aviso a los expertos.

Todos los datos se entregan de forma precisa y correcta al terminal, su base. Sólo hay que comparar los gráficos.

Por otro lado, el inicio del Asesor Experto es una notificación independiente y asíncrona. El paquete de datos entrante no puede esperar a algunos expertos lentos, sino que debe aplicarse instantáneamente al entorno del mercado y sólo opcionalmente (si el experto ha terminado la llamada anterior) ejecutar al experto.

Piense en la situación: un flujo de cotizaciones 2 por segundo y el Asesor Experto de trabajo, que se ralentiza, hace operaciones, pero requiere que las nuevas cotizaciones de espera en la cola no se imponen en el entorno de mercado de la terminal, hasta que el EA termina su trabajo.

¿Puedes ver a dónde nos lleva esto? Todo el terminal empezará a retrasar todos los procesos en aras de la tonta idea de mantener una instantánea del mercado sobre el estado de la cotización que se está procesando. Y si piensas en otros instrumentos, te dispararás.

Por eso, la superposición de las actualizaciones del mercado es siempre prioritaria, instantánea e independiente de otros procesos. Todos los demás deben seguir el ritmo del mercado de forma asíncrona.

 
Renat:

No es así.

No hay que confundir la cuestión de la entrega de flujos de datos correctos y precisos al terminal con la llamada/aviso a los expertos.

Todos los datos se entregan de forma precisa y correcta al terminal, su base. Sólo hay que comparar los gráficos.

Por otro lado, el inicio del Asesor Experto es una notificación independiente y asíncrona. El paquete de datos entrante no puede esperar a algunos expertos lentos, sino que debe aplicarse instantáneamente al entorno del mercado y sólo opcionalmente (si el experto ha terminado la llamada anterior) ejecutar al experto.

Piense en la situación: un flujo de cotizaciones 2 por segundo y el Asesor Experto de trabajo, que está frenando, hace operaciones, pero requiere que las nuevas cotizaciones de espera en la cola no se imponen en el entorno de mercado de la terminal, hasta que el EA termina su trabajo.

¿Puedes ver a dónde nos lleva esto? Todo el terminal empezará a retrasar todos los procesos en aras de la tonta idea de mantener una instantánea del mercado sobre el estado de la cotización que se está procesando. Y si piensas en otros instrumentos, te dispararás.

Por eso, la superposición de las actualizaciones del mercado es siempre prioritaria, instantánea e independiente de otros procesos. Todos los demás deben seguir el ritmo del mercado de forma asíncrona.

No estoy de acuerdo.

Digamos que no uso la copa (la oferta y la demanda están en el tick)

Qué idea sobre la situación del mercado de FORTS voy a tener yo (un experto) sin conocer la cotización

¿y el volumen?

De hecho, para FORTS, no podemos pasar la oferta y la demanda (están en el ticker).

Los cambios en el código son mínimos: la oferta y la demanda no se transmiten al mercado.

 
Mikalas:

No estoy de acuerdo.

Relea mi explicación varias veces, por favor.

Digamos que no utilizo un libro de tarifas (la oferta y la demanda están en el tick)

Qué visión del mercado de FORTS voy a tener (el experto) con una cotización que no está clara

Con la cotización actual actualizada de forma asíncrona y no otra.

Si te han llamado, eso es todo: sólo tienes delante la cita que tienes en el paquete. Si hay 2 cotizaciones en el lote, sólo verá la última. Pues nadie pasará la primera cotización al Asesor Experto y esperará a que éste termine la operación. La vieja cita se ha ido y si no la has cogido a tiempo para resolverla, significa que el tren ha pasado. Usando esa vieja cita, no podrás ejecutar nada. Y el actual/último también es dudoso que se ejecute, porque el mercado podría haber cambiado en el momento de enviar la orden.

No servirá de nada "no traduzcas la oferta y la demanda". Los ticks obsoletos son ticks obsoletos - nadie congelará el mercado y no le dejará trabajar con ticks antiguos.

Si quieres, puedes:

  1. poner el terminal en colocación más cerca del corredor en un ordenador de alta velocidad y coger más y más
  2. bucle de la EA, escanear constantemente el mercado y el reloj de mercado para conseguir todo más a menudo.
  3. analizar el gráfico, analizar el mercado

Junto con Time & Sales pensaremos en proporcionar un acceso directo al último flujo de precios de los ticks, para que pueda acceder a los ticks consecutivos. En la revisión del mercado, lo recogemos en sesión. Esto dará más oportunidades a los revendedores.

 

Renat:

Junto con Time & Sales, estudiaremos la posibilidad de proporcionar un acceso directo a la última corriente de precios de los ticks, para que se pueda acceder a los mismos. En Market Watch lo recogemos de forma sesgada. Esto dará más oportunidades a los revendedores.

Es la única solución aceptable. Es de esperar que haya colas de phypho para determinados símbolos. Esto solucionará otro problema, irresoluble dentro de este modelo de eventos, de obtener cotizaciones sin pérdidas para otros símbolos que no sean el símbolo EA.
 

Todavía tengo mis dudas.

Voy a ponerlo en práctica:

//+------------------------------------------------------------------+
//|                                                    Kotirovki.mq5 |
//|                                                   Copyright 2014 |
//|                                              http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2014, Mikalas"
#property link      "http://www.mql5.com"
#property version   "1.02"
//
MqlTick curr_tick;
double  start_last   = 0;
double  start_bid    = 0;
double  start_ask    = 0; 
ulong   start_volume = 0;  
//  
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  return( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit( const int reason )
{

}
//+------------------------------------------------------------------+
//| Expert On Tick event function                                    |
//+------------------------------------------------------------------+  
void OnTick()
{
  if ( SymbolInfoTick( _Symbol, curr_tick ) )
  {
    if ( start_last == curr_tick.last )
    {
      if ( start_volume == curr_tick.volume )
      {
        if ( ( start_ask == curr_tick.ask ) &&
             ( start_bid == curr_tick.bid )  )
        {
          Print( curr_tick.time, "; Bid = ", curr_tick.bid,
                                 "; Ask = ", curr_tick.ask,
                                 "; Last = ", curr_tick.last,
                                 "; Vol = ", curr_tick.volume, "; Новая котировка(Всё одинаковое)" );
        }
        else
        {
          start_ask = curr_tick.ask;
          start_bid = curr_tick.bid;
          Print( curr_tick.time, "; Bid = ", curr_tick.bid,
                                 "; Ask = ", curr_tick.ask,
                                 "; Last = ", curr_tick.last,
                                 "; Vol = ", curr_tick.volume, "; Изменение ask или bid? Или же новая котировка?" );
        }
      }
      else
      {
        start_last = curr_tick.last;
        start_volume = curr_tick.volume;
        start_ask = curr_tick.ask;
        start_bid = curr_tick.bid;
        Print( curr_tick.time, "; Bid = ", curr_tick.bid,
                               "; Ask = ", curr_tick.ask,
                               "; Last = ", curr_tick.last,
                               "; Vol = ", curr_tick.volume, "Новая котировка (Изменён объём)!" );
      }
    }
    else
    {
      start_last = curr_tick.last;
      start_volume = curr_tick.volume;
      start_ask = curr_tick.ask;
      start_bid = curr_tick.bid;
      Print( curr_tick.time, "; Bid = ", curr_tick.bid,
                             "; Ask = ", curr_tick.ask,
                             "; Last = ", curr_tick.last,
                             "; Vol = ", curr_tick.volume, "Новая котировка! (Изменена котировка)" );
    }
  }
}

Y mañana veremos qué pasa...

Archivos adjuntos:
Kotirovki.ex5  5 kb