MT5 et la vitesse en action - page 32

 
Renat Fatkhullin:

Veuillez répondre au statut de cette colonne.

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

Nouvelle version de MetaTrader 5 build 2560 : Améliorations du système d'apprentissage embarqué

fxsaber, 2020.08.16 23:02

Historique des transactions -> Positions -> La colonne Commentaire est vide pour toutes les transactions. Ce doit être une erreur.

Non seulement il est vide, mais il prend aussi une grande partie de l'espace utilisable.

 
fxsaber:

https://www.mql5.com/ru/docs/constants/tradingconstants/orderproperties#enum_order_state

L'état de départ ne se produit-il pas après un OrderSendAsync réussi ?

L'état peut se produire, mais pas le ticket.

La commande a simplement passé un contrôle formel d'exactitude, sans même correspondre au marché. L'ordre asynchrone a simplement été transmis au pipeline et son sort sera décidé ailleurs.

 
fxsaber:

Veuillez répondre au statut de cette colonne.

Non seulement il est vide, mais il prend une grande partie de l'espace utilisable.

Oui, c'est vrai.

Ils ont oublié de déplacer correctement le commentaire lors de la collecte de positions virtuelles à partir de transactions dans l'historique. Réparons-le.

 
Renat Fatkhullin:

L'état peut se produire, mais pas le billet.

Cet état ne peut pas être vu car OrdersTotal() ne change pas.

 
fxsaber:

Cet état ne peut pas être vu car OrdersTotal() ne change pas.

Ne frappez pas à une porte manquante.

J'ai expliqué en détail - "l'ordre a été vérifié pour l'exactitude formelle et envoyé quelque part". Cette commande n'a pas de numéro, elle a seulement été transmise à l'étape suivante du tapis roulant. Un numéro ne lui sera attribué que lorsqu'il passera dans la file d'attente d'exécution.

Vous ne pouvez pas obtenir plus d'informations sur le colis asynchrone. L'état de votre marché/négociation ne changera pas jusqu'à ce que vous receviez, après un certain temps, le détail de votre demande asynchrone, que vous pouvez attraper dans OnTradeTransaction.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
В языке MQL5 предусмотрена обработка некоторых предопределенных событий. Функции для обработки этих событий должны быть определены в программе MQL5: имя функции, тип возвращаемого значения, состав параметров (если они есть) и их типы должны строго соответствовать описанию функции-обработчика события. Именно по типу возвращаемого значения и по...
 
Renat Fatkhullin:

Ne frappez pas à une porte absente.

J'ai expliqué en détail - "l'ordre a été vérifié pour l'exactitude formelle et envoyé quelque part". Cette commande n'a pas de numéro, elle vient d'être transmise à l'étape suivante du tapis roulant. Un numéro ne lui sera attribué que lorsqu'il passera dans la file d'attente d'exécution.

Vous ne pouvez pas obtenir plus d'informations sur le colis asynchrone. L'état de votre marché/trade ne changera pas jusqu'à ce que vous obteniez un détail étape par étape sur votre requête asynchrone après un certain temps, ce que vous pouvez attraper dans OnTradeTransaction.

Merci pour la clarification, je vais enquêter.

 

L'histoire a pu prendre de l'ampleur.

Mais sur la b2617 cette EA est revenue aux alertes.

Forum sur le trading, les systèmes de trading automatisé et les tests de stratégies de trading

MT5 et la vitesse en action

fxsaber, 2020.09.08 19:46

// Демонстрация полного (не частичного) пересбора HistorySelect-кеша.
#include <fxsaber\Benchmark.mqh> // https://c.mql5.com/3/321/Benchmark.mqh

input int inAlertTime = 1; // Нижний порог в миллисекундах

#define _B2(A) _B(A, inAlertTime)

const bool Init = EventSetTimer(1);

void OnTimer()
{
  static MqlTradeRequest Request = {0};
  static MqlTradeResult Result = {0};

  if (PositionSelectByTicket(Result.order)) // Если позиция открыта - закрываем.
  {
    Request.type = ORDER_TYPE_SELL;
    Request.price = SymbolInfoDouble(_Symbol, SYMBOL_BID);
    Request.position = Result.order;
  }
  else // Иначе - открываем.
  {
    Request.action = TRADE_ACTION_DEAL;
    Request.type = ORDER_TYPE_BUY;
    Request.symbol = _Symbol;
    Request.volume = 0.1;
    Request.price = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
    Request.position = 0;
  }

  if (OrderSend(Request, Result))
    _B2(HistorySelect(0, INT_MAX));
}
 

Vérifiez la version bêta 2619, s'il vous plaît.

Nous avons effectué un certain nombre d'optimisations pour accélérer l'échantillonnage de l'histoire. Il y a eu un cas d'invalidation forcée du cache.

 
Renat Fatkhullin:

Vérifiez la version bêta 2619, s'il vous plaît.

Nous avons effectué un certain nombre d'optimisations pour accélérer l'échantillonnage de l'histoire. Il y a eu un cas d'invalidation forcée du cache.

L'accélération s'est produite, mais malheureusement, pour une raison quelconque, la mise à jour du cache ne se fait pas en une milliseconde, ce qui fait qu'il y a une alerte à chaque étape où l'historique est mis à jour.

2020.09.24 05:17:49.541 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.24 05:17:49.543 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.24 05:17:50.526 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.24 05:17:50.527 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.24 05:17:51.569 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.24 05:17:51.571 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.24 05:17:52.530 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.
2020.09.24 05:17:52.532 Alert: Time[Test6.mq5 460: HistorySelect(0,INT_MAX)] = 1 ms.


Veuillez l'essayer sur une histoire plus grande.


Je suppose que cette milliseconde est due à l'allocation de mémoire pour le rafraîchissement du cache. Rien d'autre ne semble le ralentir.

 
fxsaber:

Merci pour cette précision, je vais y réfléchir.

Levez vos drapeaux, c'est un vieux sujet.