Erreurs, bugs, questions - page 934

 
uncleVic:
C'est comme ça.

Merci beaucoup pour toute votre aide ! Tout est simple et agréable.)

J'ai d'abord essayé Event map mais je n'ai pas compris jusqu'au bout, alors j'ai décidé de surcharger moi-même OnEvent()...

P.S. Il serait bien que dans le code fourni avec le terminal, ou dans sa documentation, il y ait quelques exemples d'utilisation de la carte d'événements (de ON_EVENT à ON_EXTERNAL_EVENT) - il serait beaucoup plus facile de les comprendre. Il n'y a que des exemples ON_EVENT - Experts/Examples/Controls/ControlsDialog.mq5 et Indicators/Examples/Panels/PanelDialog.mq5 - du moins je n'ai pas trouvé d'autres exemples. Et une recherche sur le site web, à l'exception de quelques mots dans l'article, n'a rien donné.

 
Rone:

Merci beaucoup pour toute votre aide ! Tout est simple et agréable.)

A l'origine et j'ai essayé Event map, mais je ne l'ai pas compris complètement, donc j'ai décidé de surcharger OnEvent() moi-même...

P.S. Il serait bien que dans le code fourni avec le terminal, ou dans sa documentation, il y ait quelques exemples d'utilisation de la carte d'événements (de ON_EVENT à ON_EXTERNAL_EVENT) - il serait beaucoup plus facile de les comprendre. Il n'y a que des exemples ON_EVENT - Experts/Examples/Controls/ControlsDialog.mq5 et Indicators/Examples/Panels/PanelDialog.mq5 - du moins je n'ai pas trouvé d'autres exemples. Et une recherche sur le site web, à l'exception de quelques mots dans l'article, n'a rien donné.


1. S'il vous plaît. N'hésitez pas à me contacter.

2. A ajouter.

 
CTrade::OrderSend : acheter stop 0.94 USDCHF à 0.93366 sl : 0.93016 tp : 0.94816 [volume invalide].

Pourquoi ai-je reçu l'erreur 0.94 lot volume sur USDCHF ?

Il s'agit d'un volume invalide ou je n'avais pas assez d'argent pour placer ce volume ?

 
Konstantin83:
CTrade::OrderSend : acheter stop 0.94 USDCHF à 0.93366 sl : 0.93016 tp : 0.94816 [volume invalide].

Pourquoi ai-je reçu l'erreur 0.94 lot volume sur USDCHF ?

Il s'agit d'un volume invalide ou je n'avais pas assez d'argent pour placer ce volume ?

Quel est le pas du volume dans les paramètres de l'outil ? 0,10 ou 0,01 de lot ? Si c'est 0.10, alors tout est correct - volume invalide
 
Renat:
Quelle est l'étape du volume dans les paramètres de l'outil ? 0,10 ou 0,01 lot ? Si 0.10, vous avez raison - mauvais volume

serveur de démonstration de metaquotes, vous avez 0,01 pas.

le lot est vérifié



CSymbolInfo       Exp_Symbol_Info;              // symbol info object

...
double CBaseTrade::GetCorrectLot(double pLot)
 {
      double   dLot   = pLot;
      double   dLotMin   = Exp_Symbol_Info.LotsMin();
      double   dLotMax   = Exp_Symbol_Info.LotsMax();
      double   dLotStep  = Exp_Symbol_Info.LotsStep();
    
      dLot=dLotStep*NormalizeDouble(pLot/dLotStep, 0);
 
      if(dLot < dLotMin) dLot=dLotMin;
 
      if(dLot > dLotMax && dLotMax !=0) dLot=dLotMax;

 
  return(dLot);
 }

 

Imprimez la valeur du volume à 4-8 chiffres, s'il vous plaît.

Une erreur manifeste de ne pas arrondir au deuxième chiffre ici :

dLot=dLotStep*NormalizeDouble(pLot/dLotStep, 0);
 
Renat:

Imprimez la valeur du volume à 4-8 chiffres, s'il vous plaît.

Une erreur manifeste de ne pas arrondir au deuxième chiffre ici :

oui mais pourquoi n'y a-t-il pas d'arrondi ?

Disons que le pas de lot est de 0.01

Lot d'entrée 2.111

résultat = 0.01 * NormalizeDouble(2.111/0.01)=0.01*NormalizeDouble(211.1)=0.01*211=2.11

Ou il y a des courtiers où l'incrément de lot est de 0,25, vous ne pouvez pas simplement arrondir le résultat au deuxième signe.

Supposons que le pas de lot soit de 0,25

Lot entrant 2,3

Résultat = 0.25 * NormalizeDouble(2.3/0.25)=0.25*NormalizeDouble(9.2)=0.25*9=2.25


Aucun problème dans le testeur. J'ai eu cette erreur plusieurs fois aujourd'hui dans la démo.

Le pas de volume de la classe CSymbolInfo est-il normalisé ?

 

Veuillez me conseiller !

Comment modifier la couleur d'arrière-plan des paires de devises dans l'aperçu du marché ?

Ou supprimez carrément la couleur !

Merci d'avance !

 
Konstantin83: résultat = 0.01 * NormalizeDouble(2.111/0.01)=0.01*NormalizeDouble(211.1)=0.01*211=2.11
Le produit de deux nombres doubles est un nombre non normalisé. 0.01*NormalizeDouble(211.1)=0.01*211.***********=2.11*************
 
Konstantin83:

Oui, mais pourquoi n'est-il pas arrondi ?

Parce que le résultat des opérations mat des valeurs normalisées les plus élevées n'est pas un nombre normalisé.

C'est pourquoi c'est un lieu d'erreur.

Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
Преобразование данных / NormalizeDouble - Документация по MQL5