Sujet intéressant pour beaucoup : les nouveautés de MetaTrader 4 et MQL4 - de grands changements en perspective - page 49

 
hrenfx:

On n'en a pas l'impression. Quand j'en ai vraiment besoin, je le fais.

C'est dommage si vos options sont limitées par un développeur de logiciels tiers.

J'ai écrit il y a longtemps que les choses sont comme elles sont. Pas dans les nuages, mais quand même) Et vous n'avez rien à faire, comment déterminer ce dont j'ai besoin et ce que j'ai et évaluer à distance mes capacités. Ne faites pas de conneries, continuez à faire de la publicité pour la cuisine ;)
 
hrenfx:


Tu ne peux pas.

non-sens de la part d'un homme nourri à la cuisine))
 
Avals:
Ne faites pas de conneries, allez à la cuisine PR ;)

Jacket, ne salissez pas votre image ici parmi les "nubs et les PR" selon votre classification. Allez à votre QQ.

P.S. Pour les traders, il y a l'alphabétisation, où ils peuvent rafraîchir leurs connaissances sur les réalités du marché FOREX et ses différentes caractéristiques à partir de leurs échanges habituels. Élargissez vos horizons !

Poul Trade Forum: Два ку
  • forex.kbpauk.ru
Как ущербный, могу позволить себе написать правду. И паук и qq - для новичка полное дерьмо. Когда человек, вне зависимости от опыта, приходит на рынок, он сталкивается со сложной задачей: найди то, не знаю что. Но чтобы был профит. И самое сложное определиться, ГДЕ именно копать и КАК копать. На форумах этой информации практически нет. А если и...
 
hrenfx:
Jacket, ne salissez pas votre image ici parmi les "nubs et les PR" selon votre classification. Allez à votre QQ.
les gens ici ne sont pas des nouilles, et vous êtes le seul PR dc)
 

MetaQuotes a bien sûr surdimensionné (sous-dimensionné) le format de l'historique stocké (MqlRates), ce qui est compréhensible. Lorsque le format a été développé, les spreads fixes prédominaient sur le marché des changes, tandis que les spreads de marché (flottants) étaient encore exotiques.Même s'il était clair que même les spreads fixes étaient en fait flottants, car les sociétés de courtage "ne garantissent pas leur fixité dans les moments de nouvelles et de changements rapides du marché" (les guillemets représentent ici une citation d'une offre typique de presque toutes les sociétés de courtage de l'époque).

Mais les temps ont changé et nous avons ce que nous avons - les spreads flottent sur chaque tick, et c'est bien ainsi. Seulement les citations historiques ne le reflètent pas. Malheureusement.

Une seule valeur d'écart pour chaque barre est enregistrée dans l'historique. Et ce n'est pas suffisant maintenant. Et cela conduit à des distorsions lors des tests sur l'historique, parce qu'il n'y a pas de coïncidence entre l'historique réel des transactions et les transactions dans le testeur, même si un courtier fournit une base d'historique absolument honnête (correspondant à la traduction réelle du tick-feed). La raison en est le pouvoir descriptif insuffisant du format 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 байта 

Cette structure suppose l'invariabilité du spread au sein d'une barre, ce qui ne correspond pas aux réalités actuelles du trading.

Après avoir discuté de ce que pourrait être le format "complet", je l'ai appelé "Mql_6_Rates" de manière conditionnelle pour qu'il soit clair qu'il n'est actuellement pas supporté.

Il existe deux variantes : la première est une structure emballée (pour le disque) sans compression par des algorithmes spéciaux. Il pourrait être compressé plusieurs fois plus petit (2-3, vraisemblablement) pour réduire le trafic de transfert. Le format compressé n'est pas discuté ici.

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 упакована без искажений

Le format "packed" est censé être optimal lorsqu'il est stocké sur le disque du trader. Lorsqu'il est chargé du disque vers la mémoire, il peut être déballé à la volée, les fonctions de déballage étant "attachées" à la structure.

L'historique déballé (pour un accès à partir de MQL) pourrait être, disons, le suivant :

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 байт

Il est plus grand qu'aujourd'hui, mais l'écart est calculé à tous les points fixes de la barre. C'est-à-dire que si nous devons écrire les informations dans des barres de minutes selon le schéma traditionnel {Open+High+Low+Close}, alors nous devons les écrire "en entier".

À mon avis, ces informations sont redondantes et tendent à créer un maximum d'illusions au point Open. Les moments d'ouverture des barres pour les différents symboles ne coïncident pas, alors qu'exactement au moment du début de la minute (astronomique), les prix bid-ask sur les symboles correspondent aux dernières offres négociées, c'est-à-dire aux prix de clôture. Par conséquent, le format le plus approprié pour tester les minutes (le compromis le plus sain entre tradition et bon sens) pourrait être le suivant

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 байта

// L'économie correspondante au format disque emballé serait de 7 octets supplémentaires, c'est-à-dire que SizeOf(Mql_6_PackedRates) serait réduit à 31 octets.

Pour le test écologique (le plus raisonnable) "par les prix d'ouverture", il faut prendre l'heure astronomique de départ d'une minute, c'est-à-dire le prix de clôture de la barre précédente. Dans ce cas, une synchronisation précise des prix multidevises serait réalisée. Ce synchronisme est vital pour le débogage des EA multidevises négociant des ordres de marché. Pour la négociation d'ordres à cours limité et d'ordres stop, l'information sur les extrema sur chaque barre est vitale. Elle est également entièrement disponible dans le format dont nous parlons.

--

En fait, je suis en train de développer ces formats pour mes propres besoins. Les publier ici n'est qu'un sous-produit de mon développement. Peut-être que quelqu'un pourra les trouver utiles.

 
MetaDriver:


Dans un test écologique (le plus judicieux) des "prix d'ouverture", il faut prendre l'heure astronomique de début de la minute, c'est-à-dire le prix de clôture de la barre précédente.

ignorer l'écart sera critique dans certains cas

p.s. si vous avez besoin d'économiser du trafic, vous pouvez stocker des décalages au lieu de valeurs absolues de prix, pour lesquelles double est très

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

MetaQuotes a bien sûr surdimensionné (sous-dimensionné) le format de l'historique stocké (MqlRates). C'est compréhensible. Lorsque le format a été développé sur le marché des changes, les spreads fixes prévalaient, tandis que les spreads de marché (flottants) étaient encore exotiques.Bien qu'il soit clair que même les spreads fixes étaient en fait flottants, car les sociétés de courtage "ne garantissent pas leur fixité en période de nouvelles et de changements rapides sur le marché" (les guillemets représentent ici une citation d'une offre typique de presque toutes les sociétés de courtage de l'époque).

Le MT5 était initialement positionné comme un terminal d'échange. Et sur les marchés boursiers, les lois sur les prix des ECN sont en place depuis très longtemps. C'est-à-dire que l'excuse de la sous-performance est intenable. Eh bien, il n'y avait pas (et il n'y a pas) dans leur équipe un algotrader fort, qui pourrait être écouté. Apparemment, seul "le nombre d'années de développement réussi d'une plateforme" prime sur la logique.
 
hrenfx:
MT5 était initialement positionné comme un terminal d'échange. Et sur les bourses, les lois ECN sur la formation des prix datent de très longtemps. L'excuse de la carence n'est donc pas tenable. Eh bien, il n'y avait pas (et il n'y a pas) dans leur équipe un algotrader fort, qui pourrait être écouté. Apparemment, seul "le nombre d'années de développement réussi d'une plateforme" prime sur la logique.

Je n'essayais pas de trouver des excuses. Pour trouver des excuses, il faut d'abord accuser. Je n'ai pas vraiment le temps pour ça..... :)

 

Il s'agit alors d'une indulgence (il faut se méfier d'une telle chose - elle est pire que la critique nue) :

MetaDriver:

Lorsque le format de l'historique stocké (MqlRates) a été développé, MetaQuotes, bien sûr, a fait trop (pas assez). C 'est compréhensible. Lorsque le format a été développé sur le marché des changes, les spreads fixes prévalaient, les spreads de marché (flottants) étaient encore exotiques.Bien qu'il soit clair que même les spreads fixes étaient en fait flottants, car les sociétés de courtage "ne garantissent pas leur fixité en période de nouvelles et de changements rapides sur le marché" (les guillemets représentent ici une citation d'une offre typique de presque toutes les sociétés de courtage de l'époque).

 
Avals:

ignorer l'écart sera critique dans certains cas

Il existe une telle lettre. Mais le gap (saut discontinu de cotation) peut se produire à n'importe quel moment, et pas seulement au début de la barre. Donc, tout format "aminci" n'est pas sans péché, par définition. Une alimentation complète seulement en ticks. Et elle pourrait être encore plus complète dans l'historique. J'essaie de me faire un format minute, en attendant de trouver un tel compromis.Je peux laisser le système tel qu'il est décrit ci-dessus (sans Open, seulement {Hi-Lo-Close}), je comprends tous les inconvénients, ce n'est qu'une version de mon codage pour mon testeur. Je prévois également de tester avec des ticks bruts, ou avec des ticks artificiellement éclaircis par n'importe quelle méthode (avec sauvegarde du format {bid-ask-time}).
Raison: