Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 1179

 
Mikhail:

Quand je fais une requête comme celle-ci :

J'obtiens ce résultat :

2020.06.17 13:49:53.270 2020.01.02 06:50:00 Symbole EURUSD_i Chiffres 5 Point 1e-05

Quand je fais une demande comme celle-ci :

J'obtiens ce résultat :

2020.06.17 13:51:58.787 2020.01.02 06:45:00 Symbole EURUSD_i Chiffres 0 Point 0.0

En même temps, je veux noter que si je n'insère pas la fonction Print, je n'obtiens aucune erreur, l'ordre n'essaie même pas de se modifier. C'est comme si CTrade ne voyait pas mon ordre.

La vérification du symbole et du numéro magique ne fonctionne pas :

Résultat :

2020.06.17 14:37:38.147 2020.01.02 06:50:00 Symbol Magic 0 Ticket 2

Le numéro magique doit être 12345, le symbole est euro dollar.

Pourquoi je ne peux pas avoir le symbole et le medgic ?

Si vous changez la chaîne de caractères :

est changé en

et supprimer la validation par numéro magique, alors nous avons des problèmes avec les prix.

2020.06.17 01:38:24.136 2020.01.02 07:40:00 failed modify order #2 buy stop 0.1 EURUSD_i at 1.12086 sl : 1.12023 tp : 1.12275 -> 1.00000, sl : 1.00000 tp : 1.00000 [Prix non valide].

2020.06.17 01:38:24.136 2020.01.02 07:40:00 CTrade::OrderSend : Modifier #2 à 1.00000 (sl : 1.00000 tp : 1.00000) [prix invalide].

2020.06.17 01:38:24.136 2020.01.02 07:40:00 BUY STOP modification échouée ! Résultat Retcode : 10015, description du Retcode : prix invalide

Je me suis déjà creusé la tête, alors que ce même code fonctionne bien dans un autre conseiller expert.

Qu'est-ce que je fais de mal ?

Objet de la classe CSymbolInfo incorrectement initialisé (ou non).

Si vous n'avez pas cette chaîne asymbol.Name(Symbol()), ajoutez-la.

Si vous en avez un, déboguez dans la fonction Name(string symbol) ce qui se passe.

Remplir les champs m_digits etc. avec Refresh().

s.s. A en juger par ce que vous avez ajouté, asymbol n'est pas initialisé.

 
Mikhail:

Jusqu'à ce que le nouveau tic arrive, il n'y a pas de mouvement des boutons. C'est ce que je peux voir avec mes yeux. Dès que le prix change, les boutons bougent.

Bien qu'aujourd'hui, même avec le nouveau tick, les boutons ont cessé de se redessiner, alors que je n'ai rien changé. Seul l'arrière-plan bouge.

Pour clarifier - comme vous le dites, vous modifiez les coordonnées dans OnTick, et vous affirmez qu'en fait les boutons se déplacent sur le prochain tick. Le prochain tic à partir de quoi ? Celui dont vous avez changé les coordonnées, ou celui de Noël ?

 
Aleksey Mavrin:

Votre objet de classe CSymbolInfo est initialisé de manière incorrecte (ou pas du tout).

Si vous n'avez pas une telle chaîne asymbol.Name(Symbol()), ajoutez-la.

Si vous en avez un, déboguez dans la fonction Name(string symbol) ce qui se passe.

Remplir les champs m_digits etc. avec Refresh().

s.s. A en juger par ce que vous avez ajouté, votre asymbole n'est définitivement pas initialisé.

Tout en haut de mon code, j'ai les lignes suivantes
#include <Trade\Trade.mqh>
#include <Trade\OrderInfo.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\DealInfo.mqh>
#include <Trade\SymbolInfo.mqh>

CTrade atrade;
COrderInfo aorder;
CPositionInfo apos;
CDealInfo adeal;
CSymbolInfo asymbol;

S'agit-il d'une initialisation ? Lors de la compilation, j'obtiens les informations suivantes

Trade.mq5 panel' Trade.mq5 panel 1 1

Trade.mqh' Trade.mqh 1 1

Objet.mqh' Objet.mqh 1 1

'StdLibErr.mqh' StdLibErr.mqh 1 1

OrderInfo.mqh' OrderInfo.mqh 1 1

'HistoryOrderInfo.mqh' HistoryOrderInfo.mqh 1 1

PositionInfo.mqh' PositionInfo.mqh 1 1

DealInfo.mqh' DealInfo.mqh 1 1

SymbolInfo.mqh' SymbolInfo.mqh 1 1

code généré 1 1

0 erreur, 0 avertissement, 3192 msec écoulées 1 1

Après avoir ouvert un ordre d'achat stop, je recalcule tous les ordres, je sélectionne un ordre ouvert et je vérifie si le symbole et le numéro mqh correspondent :

for(int i=OrdersTotal()-1;i>=0;i--)
          if(aorder.SelectByIndex(i))  
              if(aorder.Symbol()==asymbol.Name() && aorder.Magic()==MagicNumber && Ask < aorder.PriceOpen())

Rien ne se passe à ce stade, comme je l'ai écrit ci-dessus, asymbol.Name() ne renvoie pas le symbole de l'ordre ouvert pour une raison quelconque, aorder.Magic() renvoie la valeur 0 (bien que mon nombre magique soit 121345), asymbol.TickSize() renvoie la valeur 0. En d'autres termes, le contrôle échoue et la poursuite du travail sur l'ordre est donc interrompue. Veuillez préciser"debug in function Name(string symbol) what's going on", je ne comprends pas bien cette phrase. Que dois-je ajouter et où ?

 
Aleksey Mavrin:

Pour clarifier - comme vous le dites, vous modifiez les coordonnées dans OnTick, et vous affirmez qu'en fait les boutons se déplacent sur le prochain tick. Le prochain tic à partir de quoi ? Celui dont vous avez changé les coordonnées, ou celui de Noël ?

Je pense que la séquence est la suivante : un nouveau tick arrive, je modifie les coordonnées du panneau, l'arrière-plan du panneau commence à se déplacer vers l'emplacement souhaité, les boutons restent immobiles à ce moment-là, un nouveau tick arrive et les boutons se déplacent en suivant le panneau vers l'emplacement souhaité. Est-il possible de générer des ticks à partir de la Nativité ?
 
Mikhail:

À ce stade, rien ne se passe, car comme je l'ai déjà écrit ci-dessus, la fonction asymbol.Name() ne renvoie pas le symbole de l'ordre ouvert, la fonction aorder.Magic() renvoie la valeur 0 (bien que mon Magic soit 121345), la fonction asymbol.TickSize() renvoie la valeur 0. En d'autres termes, le contrôle échoue et la poursuite du travail sur l'ordre est donc interrompue. Veuillez préciser"debug in function Name(string symbol) what's going on", je ne comprends pas bien cette phrase. Que dois-je ajouter et où ?

L'erreur dans l'index d'ordre / ticket peut être une erreur de jugement par la magie 0. Au moment de l'accès à la structure d'ordre, des données d'un ordre incorrect y sont écrites. Dans la boucle de sélection, il se peut que le numéro suivant soit placé dans le dernier ensemble de commandes mais pas celui dont vous avez besoin. Les données de la dernière commande sélectionnée sont renvoyées de la structure de commande.

 
Mikhail:
tout en haut de mon code se trouvent les lignes

S'agit-il d'une initialisation ? Lors de la compilation, j'obtiens les informations suivantes

'Trade panel.mq5' Trade panel.mq5 1 1

Trade.mqh' Trade.mqh 1 1

Objet.mqh' Objet.mqh 1 1

'StdLibErr.mqh' StdLibErr.mqh 1 1

OrderInfo.mqh' OrderInfo.mqh 1 1

'HistoryOrderInfo.mqh' HistoryOrderInfo.mqh 1 1

PositionInfo.mqh' PositionInfo.mqh 1 1

DealInfo.mqh' DealInfo.mqh 1 1

SymbolInfo.mqh' SymbolInfo.mqh 1 1

code généré 1 1

0 erreur, 0 avertissement, 3192 msec écoulées 1 1

Après avoir ouvert un ordre d'achat stop, je recalcule tous les ordres, je sélectionne un ordre ouvert et je vérifie si le symbole et le numéro Majdic correspondent :

Rien ne se passe à ce stade, comme je l'ai écrit ci-dessus, asymbol.Name() ne renvoie pas le symbole de l'ordre ouvert pour une raison quelconque, aorder.Magic() renvoie la valeur 0 (bien que mon nombre magique soit 121345), asymbol.TickSize() renvoie la valeur 0. En d'autres termes, le contrôle échoue et la poursuite du travail sur l'ordre est donc interrompue. Veuillez préciser"debug in function Name(string symbol) what's going on", je ne comprends pas bien cette phrase. Que dois-je ajouter et où ?

Bon sang, pourquoi utiliser quelque chose que tu ne comprends pas (et si c'était une valise yadda yadda )) )

Et vous ne prenez même pas la peine de lire ce qui est écrit.

Si vous n'avez pas asymbol.Name(Symbol()), ajoutez-le.

s.w. Je voulais en dire plus sur l'initialisation, mais je suppose que cela serait également inutile.
 
Valeriy Yastremskiy:

Il peut y avoir une erreur dans l'index de commande / ticket selon la magie 0. Au moment de l'accès à la structure de commande, les données de la mauvaise commande y sont stockées. Dans le cycle de sélection, il se peut que le numéro suivant aille au dernier ensemble de commandes, mais pas celui dont vous avez besoin. Les données de la dernière commande sélectionnée sont renvoyées de la structure de commande.

Je n'ai toujours pas réussi à comprendre pourquoi ce problème se produit. Enfin, j'ai pris le code qui est responsable de la création du panneau avec les boutons et je l'ai réécrit dans l'EA où ce même code fonctionne correctement et tout a fonctionné. En tout cas, merci !
 

Bonjour !

Aidez-moi à résoudre un problème simple.

Compteur d'écart. Je veux compter les écarts qui sont supérieurs à 10 points.

int start()
{
int gap=0;
int r=MathAbs(Close[2]-Open[1])/Point;
if (r>=10)
{
gap=gap+1;
}
Comment("ГЭП!========: ",gap,"\n",
        "ВЕЛИЧИНА ГЭПА==: ",r,"\n");
return(0);

La variable "gap" est remise à zéro. Je ne comprends pas pourquoi. J'ai déjà tout essayé. J'ai essayé les boucles et les statiques - ça ne marche pas. Je pense que j'ai mal écrit les boucles.

 
Alexey Belyakov:

Bonjour !

Aidez-moi à résoudre un problème simple.

Compteur d'écart. Je veux compter les écarts qui sont supérieurs à 10 points.

La variable "gap" est remise à zéro. Je ne comprends pas pourquoi. J'ai déjà tout essayé. J'ai essayé les boucles et les statiques - ça ne marche pas. Je pense que j'ai mal écrit les boucles.

La variable gap est dans la portée du début de la fonction - et à chaque nouveau tick, elle est réinitialisée à zéro.

 
Alexey Belyakov:

Bonjour !

Aidez-moi à résoudre un problème simple.

Compteur d'écart. Je veux compter les écarts qui sont supérieurs à 10 points.

La variable "gap" est remise à zéro. Je ne comprends pas pourquoi. J'ai déjà tout essayé. J'ai essayé les boucles et les statiques - ça ne marche pas. Je pense que j'ai mal écrit les boucles.

int gap=0;
int start()
{
int r=MathAbs(Close[2]-Open[1])/Point;
if (r>=10)
{
gap++;
}
Comment("ГЭП!========: ",gap,"\n",
        "ВЕЛИЧИНА ГЭПА==: ",r,"\n");
return(0);
int start()
{
static int gap=0;
int r=MathAbs(Close[2]-Open[1])/Point;
if (r>=10)
{
gap=gap+1;
}
Comment("ГЭП!========: ",gap,"\n",
        "ВЕЛИЧИНА ГЭПА==: ",r,"\n");
return(0);