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

 
Alexey Viktorov #:

1. Si la poignée de la base n'est pas reçue, il n'est pas nécessaire de fermer la base.

2. Si INVALID_HANDLE est reçu, pourquoi poursuivre l'exécution du programme ? Je pense que dans ce cas, il est préférable d'interrompre, de retourner

J'essaie maintenant à plusieurs reprises d'ouvrir et de fermer une base de données inexistante et je n'arrive pas à obtenir l'impression de l'erreur. Je pense que cette impression intervient au moment de la création des requêtes vers la base qui n'a pas pu être ouverte.

Je vais créer un Expert Advisor de test minimal qui mettra à jour l'enregistrement dans la base de données toutes les secondes. Exécutons-le sur 10 paires et tout sera clair. Je le posterai ici...
 
Evgeny Dyuka #:
Je vais créer un Expert Advisor de test minimal qui mettra à jour l'enregistrement dans la base de données toutes les secondes. Exécutez-le sur 10 paires et tout sera clair. Je le posterai ici.

Intéressant. J'attends...

 
Alexey Viktorov #:

Intéressant. J'attendrai...

Voici un expert. Il crée une base (si elle n'existe pas déjà) et y écrit l'heure actuelle une fois par seconde.
Il n'y a pas de Print() dans le code.
Je l'ai exécuté sur 10 paires et il a obtenu des erreurs :

CS      2       11:44:36.561    Test_DB (EURUSD,M10)    database error, database is locked
CS      2       11:55:27.018    Test_DB (BTCUSD,M10)    database error, database is locked
CS      2       11:55:28.026    Test_DB (BTCUSD,M10)    database error, database is locked
CS      2       11:55:49.177    Test_DB (TRXUSD,M10)    database error, database is locked
CS      2       11:55:51.183    Test_DB (EURUSD,M10)    database error, database is locked
CS      2       11:55:53.182    Test_DB (TRXUSD,M10)    database error, database is locked

Pour obtenir une erreur, vous devez fermer et redémarrer MT5, puis tous les EA commencent à fonctionner de manière synchronisée.

Ce serait bien :
1. De comprendre comment se débarrasser de cette erreur.
2. D'inventer un mécanisme de template qui ferait la queue en cas d'indisponibilité de la base.

J'ai résolu le point 2 en ajoutant Sleep() avec un temps aléatoire, mais cela ressemble à une béquille.

MISE A JOUR : J'airetéléchargé le fichier, le premier avait une erreur.

Dossiers :
Test_DB_1.mq5  3 kb
 
Evgeny Dyuka #:

Voici un expert. Il crée une base (si elle n'existe pas déjà) et y écrit l'heure actuelle une fois par seconde.
Il n'y a pas de Print() dans le code.
Je l'ai exécuté sur 10 paires, des erreurs se sont produites :

Pour obtenir une erreur, vous devez fermer et redémarrer MT5, puis tous les Expert Advisors commencent à fonctionner de manière synchronisée.

Ce serait bien :
1. De comprendre comment se débarrasser de cette erreur.
2. D'inventer un mécanisme de template qui ferait la queue en cas d'indisponibilité de la base.

J'ai résolu le point 2 en ajoutant Sleep() avec un temps aléatoire, mais cela ressemble à une béquille.

MISE A JOUR : J'airetéléchargé le fichier, le premier avait une erreur.

Hélas, mes connaissances ne sont pas suffisantes. Juste assez pour réaliser qu'une erreur est imprimée

      DatabaseExecute(db, sql);

Il n'est pas possible de vérifier la disponibilité avant de créer une requête.

La base de données s'ouvre, mais il n'est pas possible de créer une requête.

 
Aucun ordre n'est ouvert sur le serveur, aucun stop et aucune prise, les modes algo sont activés et la commande setup passe, mais les logs sont silencieux classeCTrade. Dans le testeur, les transactions réelles sont silencieuses. Que faut-il vérifier ?
 
mwwm CTrade. Dans le testeur, les transactions réelles sont silencieuses. Que faut-il vérifier ?

journal du terminal

 
Vladimir Deryagin #:

journal du terminal

Je suppose que j'ai activé les logs, mais je n'arrive pas à calculer le lot. Je ne comprends pas pourquoi il ne veut pas calculer en réel ?

void OpenBuy(const int index,double sl,double tp)
  {
   sl=m_symbol.NormalizePrice(sl);
   tp=m_symbol.NormalizePrice(tp);
   double long_lot=0.0;
   if(InpLotOrRisk==risk)
     {
      long_lot=m_money.CheckOpenLong(m_symbol.Ask(),sl);
      if(InpPrintLog)
         Print(__FILE__," ",__FUNCTION__,", OK: ","sl=",DoubleToString(sl,m_symbol.Digits()),
               ", CheckOpenLong: ",DoubleToString(long_lot,2),
               ", Balance: ",    DoubleToString(m_account.Balance(),2),
               ", Equity: ",     DoubleToString(m_account.Equity(),2),
               ", FreeMargin: ", DoubleToString(m_account.FreeMargin(),2));
      if(long_lot==0.0)
        {
         ArrayRemove(SPosition,index,1);
         if(InpPrintLog)
            Print(__FILE__," ",__FUNCTION__,", ERROR: ","CMoneyFixedMargin.CheckOpenLong returned the value of 0.0");
         return;
        }
     }
 
mwwm #:

J'ai supposé que j'avais activé les logs, il ne peut pas calculer le lot. Je ne comprends pas pourquoi il ne veut pas calculer en réel ?

Il n'y a pas de logs, donc il peut y avoir beaucoup plus de suppositions.

En option, lors du trading de crosses, si dans l'aperçu du marché la paire n'est pas sélectionnée avec la devise du dépôt, elle ne sera pas négociée.

Par exemple, nous négocions l'EURJPY, la devise de dépôt est l'USD, l'aperçu du marché doit contenir l'EURUSD et l'USDJPY.

 
Aleksandr Slavskii #:

Il n'y a pas de registre, il pourrait donc y avoir plusieurs fois plus de suppositions.

En option, lors du trading de crosses, si la paire avec la devise de dépôt n'est pas sélectionnée dans la vue d'ensemble du marché, elle ne sera pas négociée.

Par exemple, nous négocions l'EURJPY, la devise de dépôt est l'USD, dans la vue d'ensemble du marché doivent être présents l'EURUSD et l'USDJPY.

Compte en USD pro cent, trading XAUUSD

 

Bonjour à tous. Je n'arrive pas à dessiner une flèche sur la première barre en utilisant les buffers dans MQL5.

Dans MQL4, je fais ce qui suit :

Déclarer une variable globale double XX[] ;

écrire dans init :

SetIndexBuffer(0,XX) ;

SetIndexStyle(0,DRAW_ARROW) ;

SetIndexArrow(0,108) ;

Dans Oncalculate, j'écris

XX[1]=High[1] ; j'obtiens une flèche dessinée sur le chandelier 1. et c'est tout.

Je fais la même chose dans MQL5 :

Déclarer une variable globale double XX[];

écrire dans init :

SetIndexBuffer(0,XX,INDICATOR_DATA) ;

PlotIndexSetInteger(0,PLOT_ARROW,108) ;

Dans Oncalculate, j'écris:

XX[1]=high[1] ; - cela ne dessine pas

XX[1]=iHigh(Symbol(),PERIOD_CURRENT,1) ; - ne s'affiche pas non plus.

Bien sûr, même dans l'en-tête, il est spécifié :

#property indicator_buffers 1

#property indicator_plots 1

#property indicator_type1 DRAW_ARROW

#property indicator_color1 clrGreen

#property indicator_width1 1

Qu'est-ce que je fais de travers, merci de me le dire ! !!!

Raison: