Tiki en tiempo real - página 5

 
Aleksey Mavrin:

¿Las garrapatas no pueden tener más de una bandera a la vez?

Tienes razón, lo hice.

//+------------------------------------------------------------------+
//|                                                   Ticks_test.mq5 |
//|                                      Copyright 2019 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"
//---
bool is_book;
MqlTick ticks[];
ulong last_time, mem_cnt;
bool is_first;
int t_cnt, result;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  is_book = MarketBookAdd(Symbol());
  result = CopyTicks(Symbol(), ticks, COPY_TICKS_ALL, 0, 1);
  if(result > 0)
  {
    last_time = ulong(ticks[0].time_msc);
    is_first = true;
  }
  else
  {
    is_first = false;
    Alert("No start time!");
    return(INIT_FAILED);
  }   
  return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+ 
//| возвращает строковое описание тика                               | 
//+------------------------------------------------------------------+ 
string GetTickDescription(MqlTick &tick) 
  { 
   string res = string(tick.time) + "." +  string(tick.time_msc%1000); 
// 
   bool buy_tick=((tick.flags&TICK_FLAG_BUY)==TICK_FLAG_BUY); 
   bool sell_tick=((tick.flags&TICK_FLAG_SELL)==TICK_FLAG_SELL); 
   bool ask_tick=((tick.flags&TICK_FLAG_ASK)==TICK_FLAG_ASK); 
   bool bid_tick=((tick.flags&TICK_FLAG_BID)==TICK_FLAG_BID); 
   bool last_tick=((tick.flags&TICK_FLAG_LAST)==TICK_FLAG_LAST); 
   bool volume_tick=((tick.flags&TICK_FLAG_VOLUME)==TICK_FLAG_VOLUME); 
// 
   if((buy_tick== true) || (sell_tick == true)) 
   { 
     res = res + (buy_tick?StringFormat(" Buy Tick: Last=%G Volume=%d ",tick.last,tick.volume):""); 
     res = res + (sell_tick?StringFormat(" Sell Tick: Last=%G Volume=%d ",tick.last,tick.volume):""); 
     res = res + (ask_tick?StringFormat(" Ask=%G ",tick.ask):""); 
     res = res + (bid_tick?StringFormat(" Bid=%G ",tick.ask):""); 
   } 
   else 
   { 
     res = res + (ask_tick?StringFormat(" Ask=%G ",tick.ask):""); 
     res = res + (bid_tick?StringFormat(" Bid=%G ",tick.ask):""); 
     res = res + (last_tick?StringFormat(" Last=%G ",tick.last):""); 
     res = res + (volume_tick?StringFormat(" Volume=%d ",tick.volume):""); 
   } 
   return res; 
  } 
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
  if(is_book == true) MarketBookRelease(Symbol());
}
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
//void OnTick()
void OnBookEvent(const string &symbol)
{
  if(Symbol() == symbol)
  {
    if(is_first == true)
    {
      result = CopyTicks(Symbol(), ticks, COPY_TICKS_ALL, last_time, 0);
      if(result > 0)
      {
        Print("First packet of ticks:");
        t_cnt = 0;
        for(int i= 0; i<result; i++)
        {
          if(ticks[i].time_msc == ticks[0].time_msc) t_cnt++;
          Print(GetTickDescription(ticks[i]));
        }
        is_first = false;
        last_time = ulong(ticks[0].time_msc);
      } 
    }
    else
    {
      result = CopyTicks(Symbol(), ticks, COPY_TICKS_ALL, last_time, 0);
      if(result > 0)
      {
        if(result > t_cnt)
        {
          mem_cnt = t_cnt;
          t_cnt = 0;
          for(int i= 0; i<(result - int(mem_cnt)); i++)
          {
            if(ticks[i].time_msc == ticks[0].time_msc) t_cnt++;
            Print(GetTickDescription(ticks[i]));
          } 
          if(last_time == ulong(ticks[0].time_msc))
          {
            t_cnt += int(mem_cnt);
          }
          else last_time = ulong(ticks[0].time_msc + 1);
        }
        else
        {
          t_cnt = 0;
          last_time++;
        }
      }
      else
      {
        t_cnt = 0;
        last_time++;
      }
    }
  }
}
//+------------------------------------------------------------------+
He mostrado el principio del colector de todos los ticks y puedes usar este código como quieras (extrayendo todas las banderas)
 
Aleksey Mavrin:

Pero, ¿significa eso que hay una garantía de que manejará TODOS los eventos OnBookEvent?

Significa

 
prostotrader:

Repita

OnBookEvent() es exactamente el tipo de garantía de que ha llegado un nuevo lote de garrapatas.

Tienes una garrapata de acciones.

OnTick significa exactamente que ha llegado un tick, y puede obtener el paquete completo con CopyTicks.

Además, puedes conseguirlos desde cualquier lugar (incluso desde el evento de la carta). OnBookEvent tiene su propio propósito y no tienes que meterlo donde quieras o no quieras.


prostotrader:

De referencia:

Tasa de emisión: El terminal almacena para cada carácter 4096 últimos ticks en la caché para un acceso rápido (para los caracterescon la pila en marcha, 65536 ticks), las consultas a estos datos sonlas más rápidas.

Fin de la cita----

Si no tienes suficiente con los últimos ticks de 4K, entonces por supuesto suscríbete a la pila. Pero no puedo imaginar dónde se necesitaría esto (aparte de la primera carrera).

 
prostotrader:

Significa

Sí, y no es necesario recopilar una cola de estos eventos y procesarlos todos si sólo quieres un historial de ticks.

 
Andrey Khatimlianskii:

Tienes una garrapata de acciones.

OnTick significa exactamente que ha llegado un tick y puede obtener el paquete completo con CopyTicks.

Además, puedes conseguirlos desde cualquier lugar (incluso desde el evento de la carta). OnBookEvent tiene su propio propósito y no tienes que meterlo donde quieras o no quieras.


Si no tienes suficientes garrapatas 4K, entonces por supuesto suscríbete al tumblr. Pero no puedo imaginar dónde podría ser necesario (aparte de la primera carrera).

¡Andrew!

El tema se llamaba "ticks en tiempo real".

No es necesario señalar 100 veces que los ticks pueden ser recibidos por el evento OnTick() en un temporizador o lo que sea.

 
prostotrader:

¡Andrei!

El tema se llamaba "Ticks en tiempo real".

No es necesario señalar 100 veces que puedes obtener ticks mediante el evento OnTick() en un temporizador o lo que sea.

¡Exactamente! Y OnBookEvent tiene la misma relevancia para el tema que OnTimer

 
Andrey Khatimlianskii:

¡Exactamente! Y OnBookEvent tiene tanto que ver con el tema como OnTimer

Ejecutado este año en un instrumento de valores

//+------------------------------------------------------------------+
//|                                                   Ticks_test.mq5 |
//|                                      Copyright 2019 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"
//---
bool is_book;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
    is_book = MarketBookAdd(Symbol());
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
    if(is_book == true) MarketBookRelease(Symbol());
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
    Print(__FUNCTION__ + " Tick is done!");
   
  }
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
  {
    if(Symbol() == symbol)
    {
      Print(__FUNCTION__ + " Tick is done!");
    }
   
  }
//+------------------------------------------------------------------+
 
prostotrader:

Lanzamiento este año de un instrumento bursátil

Gracias, ya sé cómo funciona.

Imagina por un segundo que puede haber un enfoque diferente al tuyo en el comercio.

 
Andrey Khatimlianskii:

Gracias, ya sé cómo funciona.

Imagina por un segundo que puede haber un enfoque diferente al tuyo en el comercio.

Andrei(con el debido respeto).

¿Por qué estás "metiendo la pata"?

¿O es que no sabes la diferencia entre obtenerlo en tiempo real u obtenerlo de la historia?

¿Y qué tiene que ver eso con el otro enfoque del comercio?

Cada uno comercia y escribe robots como le parece.

Añadido por

¿No te gusta mi versión de obtener garrapatas en tiempo real?

Entonces, ¡publica tu versión!

Entonces veamos un enfoque diferente...

 
prostotrader:

Andrei(con todo el respeto)

¿Por qué estás "metiendo la pata"?

¿O es que no sabes la diferencia entre obtenerlo en tiempo real u obtenerlo de la historia?

¿Y qué tiene que ver eso con el otro enfoque del comercio?

Cada uno comercia y escribe robots como le parece.

Añadido por

¿No te gusta mi versión de obtener garrapatas en tiempo real?

Entonces, ¡publica tu versión!

Entonces veamos un enfoque diferente...

Sustituya OnBookEvent por OnTick en su código, y compare el resultado.

Razón de la queja: