Tema interesante para muchos: las novedades de MetaTrader 4 y MQL4 - grandes cambios en camino - página 49

 
hrenfx:


No se puede.

tonterías de un hombre criado en la cocina))
 
Avals:
No mientas, vete a PR la cocina ;)

Chaqueta, no ensucies tu imagen aquí entre los "nubs y los de relaciones públicas" según tu clasificación. Ve a tu QQ.

P.D. Para los operadores existe la alfabetización, donde pueden reponer sus conocimientos sobre las realidades del mercado FOREX y sus diversas características desde sus bolsas habituales. ¡Amplía tus horizontes!

Poul Trade Forum: Два ку
  • forex.kbpauk.ru
Как ущербный, могу позволить себе написать правду. И паук и qq - для новичка полное дерьмо. Когда человек, вне зависимости от опыта, приходит на рынок, он сталкивается со сложной задачей: найди то, не знаю что. Но чтобы был профит. И самое сложное определиться, ГДЕ именно копать и КАК копать. На форумах этой информации практически нет. А если и...
 
hrenfx:
Chaqueta, no ensucies tu imagen aquí entre los "nubs y los de relaciones públicas" según tu clasificación. Ve a tu QQ.
la gente aquí no son en su mayoría noubs, y usted es el único tipo de PR dc)
 

MetaQuotes, por supuesto, exageró (subestimó) el formato del historial almacenado (MqlRates). Esto es comprensible. Cuando se desarrolló el formato, los diferenciales fijos prevalecían en el mercado de divisas, mientras que los diferenciales de mercado (flotantes) eran todavía exóticos.Aunque estaba claro que incluso los diferenciales fijos de hecho flotaban, porque las empresas de corretaje "no garantizan su fijeza en los momentos de novedades y cambios rápidos del mercado" (las comillas representan aquí una cita de una oferta típica de casi cualquier empresa de corretaje de la época).

Pero los tiempos han cambiado y tenemos lo que tenemos: los diferenciales flotan en cada tic, y eso está bien. Sólo que las citas históricas no lo reflejan, por desgracia.

Sólo se almacena en el historial un valor de spread para cada barra. Y no es suficiente ahora. Y conduce a distorsiones cuando se prueba en la historia, porque no hay coincidencia de la historia de comercio real y el comercio en el probador, incluso si un corredor suministra absolutamente honesto (correspondiente a la traducción real de tic-fe) base de la historia. La razón es insuficiente poder descriptivo del formato MqlRates.

struct MqlRates
  {
   datetime time;         // время начала периода     8 байт
   double   open;         // цена открытия             8 байт
   double   high;         // наивысшая цена за период  8 байт
   double   low;          // наименьшая цена за период 8 байт
   double   close;        // цена закрытия           8 байт   
   long     tick_volume;  // тиковый объем           8 байт  
   int      spread;       // спред                  4 байта
   long     real_volume;  // биржевой объем            8 байт
  };
// итого: size_of(MqlRates) = 52 байта 

Esta estructura supone la invariabilidad del diferencial dentro de una barra, lo que no se corresponde con la realidad comercial actual.

Para seguir discutiendo lo que podría ser el formato "completo", lo he llamado "Mql_6_Rates" de forma condicional para dejar claro que actualmente no está soportado.

A continuación se presentan dos variantes. La primera es una estructura empaquetada (para disco) sin compresión por algoritmos especiales. Se podría comprimir muchas veces más pequeño (2-3, presumiblemente) para reducir el tráfico de transferencia. El formato comprimido no se discute aquí.

struct Mql_6_PackedRates  
  {
   time_t time;            // время начала периода  4 байта  // восьмибайтный time64_t неактуален до 2038 года
   float    average_price; // средняя цена бара грубо (на три значащих цифры меньше точности _digits) 4 байта
   float    d_open;        // поправка к цене открытия 4 байта
   float    d_high;        // поправка к наивысшей цене за период 4 байта
   float    d_low;         // поправка к наименьшей цене за период 4 байта
   float    d_close;       // поправка к цене закрытия 4 байта
   ushort   spread;        // средний спред 2 байта
   char     d_open_spread; // поправка к спреду открытия 1 байт
   char     d_high_spread; // поправка к спреду high 1 байт
   char     d_low_spread;  // поправка к спреду low 1 байт
   char     d_close_spread;// поправка к спреду close 1 байт
   uint     tick_volume;   // тиковый объем 4 байт
   uint     real_volume;   // биржевой объем  4 байт
   double   OpenBid() {return (average_price+d_open); } // функции на лету вычисляющие точные значения
   double   OpenAsk() {return (average_price+d_open+OpenSpread()); }
   double   HighBid() {return (average_price+d_high); }
   и т.д...... // функции на лету вычисляющие точные значения
   ...
   ...
   double OpenSpread() { return ((spread+d_open_spread) * _digits); }
   ...
   и т.п ......
   Mql_6_Rates UnpackRates() { Mql_6_Rates Rates; ..../*заполняем*/.....  return (Rates);}
  };
// Итого у меня получилось 38 байт, всё правильно? Вся информация об 4 точках bid-ask упакована без искажений

El formato "empaquetado" se supone que es óptimo cuando se almacena en el disco del operador. Cuando se carga desde el disco a la memoria, se puede desempaquetar sobre la marcha, las funciones de desempaquetado se "adjuntan" a la estructura.

El historial desempaquetado (para acceder desde MQL) podría ser, por ejemplo, esto:

struct Mql_6_Rates
  {
   datetime time;         // время начала периода     8 байт
   double   open_bid;     // цена открытия             8 байт
   double   open_ask;     // цена открытия             8 байт
   double   high_bid;     // наивысшая цена за период  8 байт
   double   high_ask;     // наивысшая цена за период  8 байт
   double   low_bid;      // наименьшая цена за период 8 байт
   double   low_ask;      // наименьшая цена за период 8 байт
   double   close_bid;    // цена закрытия           8 байт   
   double   close_ask;    // цена закрытия           8 байт   
   long     tick_volume;  // тиковый объем           8 байт  
   long     real_volume;  // биржевой объем            8 байт
  };

//итого = 88 байт

Es mayor que ahora, pero la dispersión se calcula en todos los puntos fijos de la barra. Es decir, si tenemos que escribir la información en barras de minutos según el esquema tradicional {Apertura+Alto+Bajo+Cierre}, entonces debemos escribirla "completa".

En mi opinión, esta información es redundante y tiende a crear las máximas ilusiones en el punto de apertura. Los momentos de apertura de las barras para los diferentes símbolos no coinciden, mientras que exactamente en el momento del inicio del minuto (astronómico) los precios de compra-venta de los símbolos corresponden a las últimas ofertas negociadas, es decir, a los precios de cierre. Por lo tanto, el formato más adecuado para comprobar los minutos (el compromiso más saludable entre la tradición y el sentido común) podría ser el siguiente

struct Mql_6_Rates
  {
   datetime time;         // время начала периода     8 байт
   double   high_bid;     // наивысшая цена за период  8 байт
   double   high_ask;     // наивысшая цена за период  8 байт
   double   low_bid;      // наименьшая цена за период 8 байт
   double   low_ask;      // наименьшая цена за период 8 байт
   double   close_bid;    // цена закрытия           8 байт   
   double   close_ask;    // цена закрытия           8 байт   
   long     tick_volume;  // тиковый объем           8 байт  
   long     real_volume;  // биржевой объем            8 байт
  };

//итого = 72 байта

// El ahorro correspondiente en formato de disco empaquetado sería de otros 7 bytes, es decir, SizeOf(Mql_6_PackedRates) se reduciría a 31 bytes.

Para la prueba ecológica (más razonable) "por precios de apertura", se debe tomar la hora de inicio astronómica de un minuto, es decir, el precio de cierre de la barra anterior. En este caso, se lograría un sincronismo exacto de los precios en varias divisas. Este sincronismo es vital para la depuración de EAs multidivisa que operan con órdenes de mercado. Para la operativa de órdenes limitadas y stop, la información de los extremos en cada barra es vital. También está totalmente disponible en el formato que estamos comentando.

--

En realidad, estoy desarrollando estos formatos ahora mismo para mis propios fines. Publicarlos aquí es sólo un subproducto de mi desarrollo. Quizás alguien pueda encontrarlos útiles.

 
MetaDriver:


En una prueba de "precios de apertura" respetuosa con el medio ambiente (lo más sensato), se debe tomar la hora de inicio astronómica del minuto, es decir, el precio de cierre de la barra anterior.

ignorar la brecha será fundamental en algunos casos

p.d. si necesita ahorrar en tráfico, puede almacenar compensaciones en lugar de valores de precios absolutos, para lo cual el doble es muy

Документация по MQL5: Математические функции / MathAbs
Документация по MQL5: Математические функции / MathAbs
  • www.mql5.com
Математические функции / MathAbs - Документация по MQL5
 
MetaDriver:

MetaQuotes, por supuesto, exageró (subestimó) el formato del historial almacenado (MqlRates). Esto es comprensible. Cuando se desarrolló el formato, los diferenciales fijos prevalecían en el mercado de divisas, mientras que los diferenciales de mercado (flotantes) eran todavía exóticos.Aunque estaba claro que incluso los diferenciales fijos eran, de hecho, flotantes, porque las empresas de corretaje "no garantizan su fijeza en tiempos de noticias y cambios rápidos en el mercado" (las comillas aquí representan una cita de una oferta típica de casi cualquier empresa de corretaje de ese período).

El MT5 se posicionó originalmente como un terminal de intercambio. Y en las bolsas las leyes de precios de ECN han estado vigentes durante MUCHO tiempo. Es decir, la excusa del bajo rendimiento es insostenible. Pues no había (ni hay) en su equipo un algotrader fuerte, al que se le pudiera hacer caso. Por lo visto, sólo rige "el número de años de desarrollo exitoso de la plataforma" que la sana lógica.
 
hrenfx:
MT5 se posicionó originalmente como un terminal de intercambio. Y en las bolsas las leyes ECN de formación de precios son MUY antiguas. Por lo tanto, la excusa de la deficiencia es insostenible. Pues no había (ni hay) en su equipo un algotrader fuerte, al que se le pudiera hacer caso. Por lo visto, sólo rige "el número de años de desarrollo exitoso de la plataforma" que la sana lógica.

No estaba tratando de poner excusas. Para poner excusas, tienes que acusar primero. No tengo tiempo para eso de alguna manera.... :)

 

Entonces se trata de una indulgencia (hay que desconfiar de tal cosa: es peor que la crítica desnuda):

MetaDriver:

Cuando se desarrolló el formato del historial almacenado (MqlRates), MetaQuotes, por supuesto, exageró (subestimó). Es comprensible. Cuando se desarrolló el formato en el mercado de divisas, prevalecían los spreads fijos, los spreads de mercado (flotantes) eran todavía exóticos.Aunque estaba claro que incluso los diferenciales fijos eran, de hecho, flotantes, porque las empresas de corretaje "no garantizan su fijeza en tiempos de noticias y cambios rápidos en el mercado" (las comillas aquí representan una cita de una oferta típica de casi cualquier empresa de corretaje de ese período).

 
Avals:

ignorar la brecha será fundamental en algunos casos

Hay una carta de este tipo. Pero el gap (salto discontinuo de la cotización) puede ocurrir en cualquier momento, no sólo al principio de la barra. Por lo tanto, cualquier formato "adelgazado" no está libre de pecado, por definición. La alimentación completa sólo en los ticks. Y podría ser aún más completa en la historia. Estoy tratando de hacer un formato de minutos para mí, mientras que he encontrado tal compromiso.Puedo dejarlo como se describe arriba (sin Open, sólo {Hi-Lo-Close}), entiendo todas las desventajas, es sólo una versión de mi codificación para mi probador. También preveo probar con ticks crudos, o con adelgazamiento artificial por cualquier método (con formato de ahorro de ticks {bid-ask-time}).
 
hrenfx:

Entonces es la condescendencia (cuidado con esas cosas - peor que la crítica desnuda):

:-)

Es un poco tarde para beber borjomi o para enmendar la plana. Hace tiempo que me han reservado un lugar en el infierno.

No creo que intentar comprender sin juzgar sea el más grave de mis pecados. ;)

Razón de la queja: