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

 

Bonjour,

J'essaie de créer un EA très simple qui compare deux cours de clôture et, en fonction de cela, ouvre un ordre d'achat ou de vente.

Tout se passe bien pour le premier ordre, mais dès que la condition passe de vente à achat, il passe plusieurs ordres à la fois.

m_trade est un objet Ctrade.

// Current position information

bool Buy_openend = false;
bool Sell_openend = false;

double currentVolume = 0;

if(PositionSelect(_Symbol) == true)
  {
   if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
     {
      Buy_openend = true;
     }
      if (PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
     {
      Sell_openend = true;
      }   
        currentVolume = PositionGetDouble(POSITION_VOLUME);   
  } 

// Check for trade conditions

bool SellCondition = close <= closeprev && bar[1].time == startTime;
bool BuyCondition = close >= closeprev && bar[1].time == startTime;


// Entering trade

if(SellCondition)
  {
   if(Sell_openend)
   {
   Print("We already have a sell open");
   return;
   }
   m_trade.Sell(TradeVolume+currentVolume,_Symbol,m_symbol.Ask(),NULL,NULL,NULL);
  }
if(BuyCondition)
  {
   if(Buy_openend)
     {
      Print("We already have a buy open");
   return;
     }
     m_trade.Buy(TradeVolume+currentVolume,_Symbol,m_symbol.Bid(),NULL,NULL,NULL);
  }
 
Divania111 objet Ctrade.

Vous avez oublié que le temps 'startTime' doit être réinitialisé.

 
Vladimir Karputov #:

Vous avez oublié que l'heure "startTime" doit être réinitialisée.

Merci Vladimir, je vais essayer de corriger le problème en suivant votre conseil.

Pourtant, je suis toujours surpris. En effet, dans l'instruction if pour l'entrée d'une transaction, nous vérifions si un ordre du même type a déjà été placé. Si c'est le cas, alors l'ordre ne doit pas être placé. Je pensais donc qu'avec cette instruction, seul un type d'ordre pouvait être saisi en même temps.

Cette idée est-elle incorrecte ?

 
Divania111 # :

Merci Vladimir, je vais essayer de le corriger en me basant sur votre conseil.

Pourtant, je suis toujours surpris. En effet, dans l'instruction if pour l'entrée d'une transaction, nous vérifions si un ordre du même type a déjà été placé. Si c'est le cas, alors l'ordre ne doit pas être placé. Je pensais donc qu'avec cette instruction, seul un type d'ordre pouvait être saisi en même temps.

Cette idée est-elle incorrecte ?

Vous ne contrôlez pas les ORDRES de quelque manière que ce soit, vous vérifiez le nombre et le type de la POSITION dans le code. De plus, vous ne travaillez pas correctement avec les POSITIONS (erreur d'utilisation de 'PositionSelect(_Symbol)' si votre compte est de type hedging). Votre algorithme présente de graves erreurs de conception.

Ce que vous devriez faire :

1. Travailler EXCLUSIVEMENT au moment de la naissance d'une nouvelle barre. S'il n'y a pas de nouvelle barre - ne faites rien, ne faites pas de mouvements inutiles.

2. Ce point sera divulgué une fois le point 1 terminé.

 
Bonjour. Pouvez-vous me dire si le commentaire dans void OnTick() ralentit l'EA. Le mettre dans int OnInit() fonctionne beaucoup plus vite.
 
Marco Nicholas le commentaire dans void OnTick() ralentit l'EA. Le mettre dans int OnInit() fonctionne beaucoup plus vite.

Oui, dans MT5, cela ralentit considérablement l'opération.

Dans OnInit, il ne fonctionne qu'une fois pendant l'initialisation et pas plus.

 
Marco Nicholas le commentaire dans void OnTick() ralentit l'EA. Le mettre dans int OnInit() fonctionne beaucoup plus vite.

Parlez-vous de la fonction Comment()?

Si oui, c'est évident. Dans la fonction OnInit(), le commentaire ne sera mis à jour qu'une seule fois, alors que dans la fonction OnTick(), le commentaire pourrait être mis à jour à chaque tick.

La solution consiste à ne mettre à jour le commentaire que lorsque cela est nécessaire. S'il est statique, alors il n'est mis à jour que lors de OnInit() et il est effacé lors de OnDeinit(), mais s'il est dynamique, alors lors de OnTick(), il n'est mis à jour que lorsqu'il doit être modifié.

EDIT : Ce post a été fait à l'origine sur le forum anglais.

 
Bonjour enseignants, lorsque j'utilise la fonction SocketConnect() côté client , je n'arrive pas à établir une connexion avec le serveur même après avoir rempli les paramètres correctement selon les instructions de l'utilisateur, mais le serveur est normalement disponible après les tests.
 

Bonne journée à tous.

J'ai une question

comment faire une requête à sqlite pour sélectionner une ligne d'un ticket.

La structure de la base de données est la suivante :

symbole-texte

ticket - texte

pirce- real

s_l - réel

t_p - réel

il faut mettre toute la chaîne du ticket dans la structure

 
Bonjour, pouvez-vous utiliser Comment() dans switch() au lieu du même Print.
Raison: