Erreurs, bugs, questions - page 2411

 
Vladimir Karputov:

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

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

Dans ma configuration

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

Merci, l'erreur a été localisée. Affichez ci-dessous.

 
Andrey Barinov:

il y a deux erreurs.

№1. Votre erreur. Quelque part dans le code. Vous définissez le SL pour la 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.

Andrey Barinov:

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

Oui, vous avez eu raison, mon erreur est logique :

dans la structure :

MqlTradeRequest m_request ;

m_request.position = #3

m_request.symbol = GBPUSD

m_request.sl = 1.60704

numéro de position réelle pour GBPUSD #4

lorsque l'OrderSend est exécuté, le testeur fixe un stop pour le symbole correspondant à la position n°3, qui est eurusd.

Les bugs des testeurs :

- ne vérifie pas si m_request.position et m_request.symbol correspondent ;

- fixe un stop à 1.60704 pour la position d'achat, le symbole eurusd, qui a un prix actuel de 1.30935 ;

- sur le tick suivant fixe un stop à 1.60704, bien que le prix réel soit de 1.30935.

Merci à tous. J'espère que les développeurs de la plateforme verront ce message.

 
Aleksey Sergan:

Oui, vous avez eu raison, mon erreur est logique :

Dans la structure :

MqlTradeRequest m_request ;

m_request.position = #3

m_request.symbol = GBPUSD

m_request.sl = 1.60704

numéro de position réelle pour GBPUSD #4

lorsque l'OrderSend est exécuté, le testeur fixe un stop pour le symbole correspondant à la position n°3, qui est eurusd.

Les bugs des testeurs :

- ne vérifie pas si m_request.position et m_request.symbol correspondent ;

- fixe un stop à 1.60704 pour la position d'achat, le symbole eurusd, qui a un prix actuel de 1.30935 ;

- sur le tick suivant fixe un stop à 1.60704, bien que le prix réel soit de 1.30935.

Merci à tous. J'espère que les développeurs de la plateforme verront ce message.

L'exécution d'un stop pour une position d'achat à 1.60704 au prix actuel de 1.30935 n'est pas une erreur. Mais fixer un stop d'achat au niveau de 1.60704 au prix actuel de 1.30935 est une erreur.

 

Construction 2007

Fonction :

bool GetDialLastProfit (string symbol, datetime startDate, datetime endDate, long magic, double &profit, double &lot)
{
  HistorySelect (startDate, endDate);
  int deals = HistoryDealsTotal ();
  ulong ticket;

  for (int i = deals - 1; i >= 0; i--)
  //for (int i = 0; i < deals; i++)
  {
    ticket = HistoryDealGetTicket (i);
    if (ticket != 0)
    {
      if (HistoryDealGetInteger(ticket, DEAL_MAGIC) == magic)
      {
        profit = HistoryDealGetDouble (ticket, DEAL_PROFIT);
        
        //if (!HistoryDealGetDouble(ticket, DEAL_PROFIT, profit))
        //  return false;
        
        lot    = HistoryDealGetDouble (ticket, DEAL_VOLUME);
        
        return (true);
      }
    }
  }

  return (false);
}

est censé produire le résultat financier de la transaction dans la variable de profit, mais il s'avère toujours être 0.0, et la valeur dans la variable de lot est toujours correcte.

Y a-t-il une erreur ? - Ou je fais quelque chose de mal ?

 
Andrey Dik:

Construction 2007

Fonction :

est censé produire le résultat financier de la transaction dans la variable de profit, mais il s'avère toujours être 0.0, et la valeur dans la variable de lot est toujours correcte.

Y a-t-il une erreur ? - Ou je fais quelque chose de mal ?

DEAL_ENTRY_OUT ou INOUT doit être vérifié. Les transactions _IN ont un bénéfice de 0

 
Andrey Barinov:

DEAL_ENTRY_OUT ou INOUT doivent être surveillés. Les transactions _IN ont un bénéfice de 0

Eh bien, le premier de la fin de la liste est pris, il devrait être OUT.

 
Andrey Dik:

C'est le premier en partant de la fin de la liste, ça devrait être OUT.

Si vous passez TimeCurrent() dans le endDate, remplacez-le par TimeCurrent()+60 ou quelque chose comme ça. Cela devrait aider.

 
Andrey Barinov:

Si vous passez TimeCurrent() dans endDate, remplacez-le par TimeCurrent()+60 ou quelque chose comme ça. Cela devrait aider.

Non, c'est toujours la version 0.0.

 
Andrey Dik:

Non, c'est toujours la version 0.0.

Ensuite, déboguez-le. Imprimez les tickets de transaction et voyez dans le testeur ce qui y est réellement sélectionné. Ajouter un filtre par type de transaction.

 
Andrey Barinov:

Ensuite, déboguez-le. Imprimez les tickets de transaction et voyez dans le testeur ce qui y est réellement sélectionné. Ajoutez un filtre pour le type de transaction, cependant.

Le lot est affiché correctement, donc le ticket est sélectionné correctement.