Erreurs, bugs, questions - page 2410

 
Aleksey Sergan:

Le code compte plusieurs milliers de lignes. Il est inutile de l'ajouter. Il n'y a pas de variables statiques. Il y a des classes. Dans tous les cas, c'est l'erreur du testeur.

Voilà votre erreur.

En mode débogage, exécutez une vérification avant d'envoyer un ordre de transaction. Regardez le symbole et les prix. Et testez au moins en mode "Tous les tics".

 
Andrey Barinov:

OK. Éclairez-nous. Quelle erreur dans le code, ou quel code, pourrait fermer une position dans le testeur au prix d'un autre instrument. Je suis vraiment, vraiment curieux.

Facilement. Cela dépend directement du caractère mou du code. Je l'ai fait moi-même :). Système mal conçu de contrôle de l'initialisation des classes de caractères. Et en plus il y a les variables statiques.

De toute façon, il est inutile de parler plus avant sans le code écrit par la personne sur laquelle vous vous interrogez.

 
Vladimir Karputov:

Facilement. C'est une corrélation directe avec la courbure du code. Je l'ai fait moi-même :). Système de contrôle de l'initialisation des classes de caractères insuffisamment élaboré. Et en plus, il y a des variables statiques.

Il est donc inutile de parler davantage sans vous demander le code.

Pouvez-vous nous montrer un exemple de code ? Comment fermer une position en EURUSD au prix GPBUSD ?

Si c'est le cas, ce ne sera pas un problème pour vous. Je vous en serais très reconnaissant.

 
Andrey Barinov:

Pouvez-vous me montrer un exemple de code ? Comment fermer une position EURUSD au prix GPBUSD ?

Si c'est le cas, ce ne sera pas un problème pour vous. Je vous en serai très reconnaissant.

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

Bugs, bugs, questions

Vladimir Karputov, 2019.03.24 05:58

C'est facile. La dépendance de la courbure du code. J'ai moi-même fait de telles erreurs :). Système de contrôle de l'initialisation des classes de caractères insuffisamment réfléchi. Et plus de variables statiques.

De toute façon, il est inutile de parler plus avant sans le code écrit par la personne sur laquelle vous vous interrogez.


 
C'est comme ça que les graals de test peuvent être cool, plus de pips traînants, cool)
 

Il n'y a pas d'erreur en mode débogage, visualisation. La position est fermée non pas par un ordre de transaction, mais par un stop loss :



Il est fort possible qu'il s'agisse d'une erreur logique dans le code, très probablement ici, je vais me pencher dessus, bien sûr, je ne sais pas encore comment - aucune erreur en mode débogage :



il parvient à fixer un stop pour un ordre à 1.60704, 3000 pips au-dessus du prix actuel de la position.

Dans ce cas, le testeur aurait dû interdire le réglage de l'arrêt.

 

Ici, je regarde le journal :

l'ordre de changer le stop est envoyé pour gpbusd, la ligne en surbrillance, mais est en fait exécuté pour eurusd- ensuite.


Voici le code pour régler l'arrêt


bool MyOrderSend( MqlTradeRequest &req, MqlTradeResult &res ){

  
  //Print("Попытка выполнения OrderSend ... ");
  Print("Try to execute OrderSend ... for ", req.symbol );
  ResetLastError();
  if (OrderSend( req, res  )){
    if( res.retcode != TRADE_RETCODE_DONE ){
      //Print("Ошибка обработки торгового запроса,код ответа сервера: ", res.retcode, "Описание:", TradeServerReturnCodeDescription(res.retcode) );
      Print("Error of trade requaest: ", res.retcode, "Description:", TradeServerReturnCodeDescription(res.retcode) );
      Print(STradeRequest(req) );
      return(false);
    }else{
      //Print("Успех, код ответа сервера: ", IntegerToString(res.retcode), " Описание:",  TradeServerReturnCodeDescription(res.retcode)  );
      Print("Success, return code is : ", IntegerToString(res.retcode), " Description:",  TradeServerReturnCodeDescription(res.retcode)  );
      Print(STradeRequest(req) );
    }
    return(true);
  }else{
    //Print("Ошибка выполнения OrderSend в ", __FUNCTION__, " _LastError=", _LastError, " ",  ErrorDescription(_LastError) );
    Print("Error of execution OrderSend in ", __FUNCTION__, " _LastError=", _LastError, " ",  ErrorDescription(_LastError) );
    //Print("Код ответа сервера: ", IntegerToString(res.retcode), " Описание:",  TradeServerReturnCodeDescription(res.retcode)  );
    Print("Server return code : ", IntegerToString(res.retcode), " Description:",  TradeServerReturnCodeDescription(res.retcode)  );
    Print(STradeRequest(req) ); 
    return(false);
  }
  return(true);
}



OrderSend( req, res  )

fonction mql native, non surchargée.

c'est-à-dire ici

 Print("Try to execute OrderSend ... for ", req.symbol );


il est indiqué qu'il fixe un stop pour le gbpusd et qu'il devrait en être ainsi, mais en réalité


OrderSend( req, res  )


le met pour l'eurusd

 
Aleksey Sergan:

Ici, je regarde le journal :

l'ordre de changer le stop est envoyé pour gpbusd, la ligne en surbrillance, mais est en fait exécuté pour eurusd- la suivante.

il y a 2 erreurs.

№1. Votre erreur. Quelque part dans le code. Vous définissez un SL pour une position EURUSD en utilisant le prix GBPUSD. Le terminal ne devrait rien avoir contre lui.

№2. Bug dans le terminal. Si ce SL est déclenché à un prix qui n'existe pas à ce moment-là dans le flux EURUSD, en utilisant le prix GBPUSD.

 
Aleksey Sergan:

Ici, je regarde le journal :

l'ordre de changer le stop est envoyé pour gpbusd, la ligne en surbrillance, mais est en fait exécuté pour eurusd- ensuite.


Voici le code pour régler l'arrêt




fonction mql native, non surchargée.

https://www.mql5.com/ru/docs/constants/structures/mqltraderequest

Apparemment, lors de l'envoi d'une demande de modification, le champ de la position a la priorité sur le symbole. Imprimerreq.position

Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торгового запроса
Документация по MQL5: Константы, перечисления и структуры / Структуры данных / Структура торгового запроса
  • www.mql5.com
Взаимодействие клиентского терминала и торгового сервера для проведения операций постановки ордеров производится посредством торговых запросов. Запрос представлен специальной предопределенной структурой MqlTradeRequest, которая содержит все поля, необходимые для заключения торговых сделок. Результат обработки запроса представлен структурой...
 
Aleksey Sergan:



Veuillez exécuter ce code :Multicurrency iMA Trend 2.

Spécifiez "EURUSD,GBPUSD" dans les paramètres ( paramètre Symboles).

Dans ma configuration

MetaTrader 5 x64 build 2009 started (MetaQuotes Software Corp.)
Windows 10 (build 17763) x64, IE 11, UAC, Intel Core i3-3120 M  @ 2.50 GHz, Memory: 3518 / 8077 Mb, Disk: 86 / 415 Gb, GMT+2
C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075

tous les SLs ont fermé à leur prix de symbole. C'est-à-dire qu'il n'y a pas d'erreur de chevauchement des prix.