Questions des débutants MQL5 MT5 MetaTrader 5 - page 748

 
RogozaIV:
Je viens de passer de mql4 à mql5. Je teste un Expert Advisor sur l'indice RTS et j'ai un problème pour ouvrir plusieurs positions, bien que l'une des conditions pour ouvrir une position soit si (...OrdersTotal()==0). Pourquoi cette condition ne fonctionne-t-elle pas ? Que puis-je faire pour n'ouvrir qu'un seul poste ?

Total des commandes

OrdersTotal Renvoie le nombre de commandes actives.

PostesTotal

PositionsTotal Renvoie le nombre de postes ouverts.


Note

Il ne doit pas y avoir de confusion entre lesordres en attente actifs et les positions, qui sont également affichés dans l'onglet "Trade" du panneau "Toolbox". Un ordre est un ordre d'exécution d'une transaction, tandis qu'une position est le résultat d'une ou plusieurstransactions.

Avec le "netting" des positions (ACCOUNT_MARGIN_MODE_RETAIL_NETTING etACCOUNT_MARGIN_MODE_EXCHANGE), une seuleposition peut être ouverte pour chaquesymbole à tout moment et elle est le résultat d'une ou plusieurstransactions. Il ne faut pas confondre les positions et lesordres en attente actifs, qui sont également affichés dans l'onglet "Trade" du panneau "Toolbox".

En cas de représentation indépendante des positions (ACCOUNT_MARGIN_MODE_RETAIL_HEDGING), plusieurs positions peuvent être ouvertes simultanément pour chaque symbole.


C'est-à-dire qu'en utilisantOrdersTotal, vous vérifiez le nombre de COMMANDES RETAILISÉES qu'il y a en ce moment :

LIMITE_TYPE_D'ACHAT

Ordre d'achat limite en attente

LIMITE_TYPE_VENTE

Ordre limite de vente en attente

TYPE DE COMMANDE_BUY_STOP

Ordre d'achat stop en attente

TYPE DE COMMANDE_VENTE_ARRÊT

Ordre d'arrêt de vente en suspens

LIMITE_TYPE_D'ACHAT_STOP_DE_L'ORDRE

Lorsque le prix de l'ordre est atteint, un ordre d'achat limite en attente est placé au prix StopLimit.

LIMITE D'ARRÊT DE LA VENTE PAR TYPE DE COMMANDE

Lorsque le prix de l'ordre est atteint, un ordre de vente limite en attente est placé au prix StopLimit.


et vous devez vérifier combien de positions ouvertes il y a à ce moment-là :

POSITION_TYPE_BUY

Acheter

POSITION_TYPE_SELL

Vendez


- PositionsTotal doit être utilisé pour cela.

 
 
Agat:
Bon après-midi. Après la dernière mise à jour de MT5 (build 1604), mes indicateurs ne fonctionnent plus correctement. J'utilise
Les indicateurs dits "liquides". Par exemple, j'ai plusieurs stochastiques multi-périodes dans une fenêtre. Eh bien, maintenant les courts sont tirés
Comme précédemment, les plus longs ne sont dessinés que sur quelques barres et les plus longs ne sont pas dessinés du tout.

J'ai l'impression qu'ils ont soudainement commencé à manquer d'histoire. Pouvez-vous me dire ce qui ne va pas ?
Il s'avère que le problème s'est produit dans les MT où les délais inférieurs n'étaient pas ouverts. J'ai dû ouvrir des graphiques à partir de M1 et plus et tout allait bien. Le dossier est maintenant clos.
 
Oui, tu t'es excité trop tôt, quand tu redémarres le terminal c'est pareil, tu dois cliquer sur tous les graphiques à chaque fois.
Ce n'est pas bon, c'est impossible de travailler. Quelqu'un va-t-il au moins dire un mot sur le fond de la question ou non ? La mise à jour est manifestement défectueuse.

Où vont les gens pour de telles questions ?
 
Bonjour ! 2017.06.02_17:45 GMT+3. J'ai une question. Le programme .mq5 a écrit son calcul de lot, -- le résultat, -- le programme dans le testeur de stratégie essaie d'ouvrir une transaction avec un lot prohibitif. Le pourcentage de risque est de 1,09. La taille du dépôt est supérieure au dépôt (par défaut 10 000 $). J'ai essayé d'utiliser le fichier OOP standard du dossier Include>Expert>Money>MoneyFixedRisk.mqh . Résultat : Le programme tente d'ouvrir une transaction avec un lot nul. (0.00). Je pense... que c'est un truc de programmeur d'entreprise. Ou est-ce que je rate quelque chose ? Eh bien, rendez votre EA inutile. Pliez le terrain sur le côté. Peut-être, qui sait ce que je devrais écrire, pour que le conseiller expert ouvre des transactions avec le lot calculé, avec le pourcentage de risque spécifié ? Je ne peux pas le faire moi-même, je perds mon temps. J'espère que les programmeurs de notre société ne seront pas offensés. Je joins le fichier inclus Lot.mqh . J'espère que quelqu'un répondra. 18H00 GMT+3. Inséré à 18:11 GMT+3.
Dossiers :
Lot.mqh  2 kb
 
Agat:
Bon après-midi. Après la dernière mise à jour de MT5 (build 1604), mes indicateurs ne fonctionnent plus correctement. J'utilise
Les indicateurs dits "liquides". Par exemple, j'ai plusieurs stochastiques multi-périodes dans une fenêtre. Eh bien, maintenant les courts sont tirés
Comme précédemment, les plus longs ne sont dessinés que sur quelques barres et les plus longs ne sont pas dessinés du tout.

J'ai l'impression qu'ils ont soudainement commencé à manquer d'histoire. Pouvez-vous me dire ce qui ne va pas ?


Comment accéder à l'histoire d'une autre période ? Quels contrôles effectuez vous pour l'accès ? Quels sont les codes d'erreur que vous obtenez ?

 
Николай Никитюк:
Bonjour ! 2017.06.02_17:45 GMT+3. J'ai une question. Le programme .mq5 a écrit son calcul de lot, -- le résultat, -- le programme dans le testeur de stratégie essaie d'ouvrir une transaction avec un lot prohibitif. Le pourcentage de risque est de 1,09. La taille du dépôt est supérieure au dépôt (par défaut 10 000 $). J'ai essayé d'utiliser le fichier OOP standard du dossier Include>Expert>Money>MoneyFixedRisk.mqh . Résultat : Le programme tente d'ouvrir une transaction avec un lot nul. (0.00). Je pense... que c'est un truc de programmeur d'entreprise. Ou est-ce que je rate quelque chose ? Eh bien, rendez votre EA inutile. Pliez le terrain sur le côté. Peut-être, qui sait ce que je devrais écrire, pour que le conseiller expert ouvre des transactions avec le lot calculé, avec le pourcentage de risque spécifié ? Je ne peux pas le faire moi-même, je perds mon temps. J'espère que les programmeurs de notre société ne seront pas offensés. Je joins le fichier inclus Lot.mqh . J'espère que quelqu'un répondra. 18H00 GMT+3. Inséré à 18:11 GMT+3.

Exécutez cet EA :Money Fixed Risk- modifiez les deux paramètres d'entrée et voyez les résultats dans l'onglet "Experts" du terminal.
 

Je ne peux pas obtenir de données dans mon indicateur.

int OnInit()
  {  
   handle1=iMA(NULL,0,per1,0,MODE_LWMA,PRICE_CLOSE);
   handle2=iMA(NULL,0,PLength1,0,MODE_LWMA,PRICE_CLOSE);
  }
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int copied1=CopyBuffer(handle1,0,0,toCount,TMP_Buf1);
   if(copied1<=0)
     {
      Sleep(50);
      for(int i=0;i<100;i++)
        {
         if(BarsCalculated(handle1)>0)
            break;
         Sleep(50);
        }
      copied1=CopyBuffer(handle1,0,0,toCount,TMP_Buf1);
      if(copied1<=0)
        {
         Print(__FUNCTION__+": copying indicator data failed. Error=",GetLastError());
         return(0);
        }
     }  
   int copied2=CopyBuffer(handle2,0,0,toCount,TMP_Buf2);
   if(copied2<=0)
     {
      Sleep(50);
      for(int i=0;i<100;i++)
        {
         if(BarsCalculated(handle2)>0)
            break;
         Sleep(50);
        }
      copied2=CopyBuffer(handle2,0,0,toCount,TMP_Buf2);
      if(copied2<=0)
        {
         Print(__FUNCTION__+": copying indicator data failed. Error=",GetLastError());
         return(0);
        }
     }
  }

Rien n'est copié. Les variables copiées1/2 sont toujours inférieures à zéro. Dans le débogueur, je n'arrive pas à aller plus loin que ce code. Comment le faire correctement, ma tête est déjà cassée.

 
Hmm... avant il y avait une erreur 4806, maintenant c'est 4807 quand j'ai déplacé la création du handle à OnInit(). Comment faites-vous ?
 
Je crois que j'ai compris. La poignée n'a pas été créée. Je n'ai pas initialisé toutes les données.