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

 
Ivan Butko:

Si vous savez quelle condition ajouter ou comment l'implémenter (si c'est facile), merci de partager.

Je peux, mais ce n'est pas intéressant de vérifier comment ça marche, alors voici un aperçu

void OnTick()
{  static int ticket = -1;
   while(!IsStopped() &&ticket<0)
   {  if(TerminalInfoInteger(TERMINAL_CONNECTED) && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && !IsTradeContextBusy())
      {  
         RefreshRates();
         ticket = OrderSend("EURUSD", OP_SELL, 0.01, Bid, 3, 0, 0, "", 0, 0, clrRed);
         if(ticket > 0) break; 
      }
   Sleep(123); 
   }
}
 
Igor Makanu:

Je peux, mais ce n'est pas intéressant de vérifier comment ça marche, alors j'ai juste fait un croquis.

Igor, merci. Et pas besoin de vérifier, je le ferai moi-même, bien sûr.

Y a-t-il un moyen de le faire sans attendre un tic-tac ?

Pour que la demande d'ouverture se fasse immédiatement lorsque l'on appuie sur le "push".

C'est comme un bouton standard "acheter/vendre" d'ouverture rapide des transactions dans le terminal (en haut à gauche du graphique). Vous appuyez dessus et la vente s'ouvre instantanément. Il suffit d'ouvrir un panier d'ordres au lieu d'une seule transaction, sans attendre le tick.

Il existe deux mises en œuvre (selon moi) :
1) soit un bouton (similaire) sur le graphique qui ouvre le panier,
2) ou un conseiller expert. Le conseiller me semble plus pratique, car il peut répéter la demande d'ouverture (s'il y a des problèmes) plus rapidement que moi.



UPD

Votre code fonctionne, s'ouvre sur un nouveau tick, cool, merci)


UPD

Je me suis également souvenu que les copieurs ont un paramètre "ms", où vous pouvez définir le temps de vérification. Et si le maître a une affaire ouverte, il peut envoyer une demande d'ouverture d'affaire à partir d'un esclave ms. C'est-à-dire que l'ouverture instantanée est possible.

 
Igor Makanu:

Je peux, mais ce n'est pas intéressant de vérifier comment ça marche, alors voici un croquis

Igor, veuillez vérifier à l'œil, cette ouverture est-elle instantanée, sans attendre un nouveau tick ?

int OnInit()

{

//---

statique int ticket = -1 ;

while(!IsStopped() &&ticket<0)

{ if(TerminalInfoInteger(TERMINAL_CONNECTED) && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && !IsTradeContextBusy())

{

RefreshRates() ;

ticket = OrderSend("EURUSD", OP_SELL, 0.01, Bid, 3, 0, 0, "", 0, 0, clrRed) ;

if(ticket > 0) break ;

}

Sleep(1) ;

}

//---

return(INIT_SUCCEEDED) ;

}

------------------

Et ça semble fonctionner comme prévu...
 
Ivan Butko:



Sinon, il semble fonctionner comme prévu...

pas la meilleure option.... alors écrivez-le au moins de cette façon

#property strict
int ticket = -1;
int OnInit()
{  if(ticket < 0) SendMyOrder();
   return(INIT_SUCCEEDED); 
}
//+------------------------------------------------------------------+
void OnTick()
{
   if(ticket < 0) SendMyOrder();
}
//+------------------------------------------------------------------+
void SendMyOrder()
{  while(!IsStopped() && ticket < 0)
   {  if(TerminalInfoInteger(TERMINAL_CONNECTED) && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && !IsTradeContextBusy())
      {  RefreshRates();
         ticket = OrderSend("EURUSD", OP_SELL, 0.01, Bid, 3, 0, 0, "", 0, 0, clrRed);
         if(ticket > 0) break; 
      }
      Sleep(123); 
   } 
}
//+------------------------------------------------------------------+

mais la première option devrait fonctionner clairement si vous avez jeté sur un graphique et appuyé sur le bouton autotrade lorsque vous considérez qu'il est nécessaire de "se mettre en veille".

Si vous voulez faire un échange, alors vous devez l'écrire de cette façon :

void OnTick()
{
   if(ticket < 0) SendMyOrder();
   if(ticket > 0) ExpertRemove();
}
 
Igor Makanu:

pas la meilleure option.... alors écrivez-le au moins de cette façon

mais la première option devrait fonctionner clairement si vous avez jeté sur un graphique et appuyé sur le bouton autotrade lorsque vous considérez qu'il est nécessaire de " se mettre en veille ".

Si vous voulez faire un échange, alors vous devez l'écrire de cette façon :

de nombreux remerciements
 

Super ! Les tests des variantes se poursuivent. La variante de Vladimir et Igor s'est avérée assez rapide. En pratique, il s'est avéré que les transactions s'ouvraient plus rapidement en cliquant sur le bouton d'achat rapide qu'en utilisant le conseiller expert. Les deux variantes ont des avantages et des inconvénients. Une autre chose curieuse est que si nous prescrivons dans l'Expert Advisor les paires à ouvrir une par une, elles s'ouvrent une par une et très lentement... et si nous mettons 7 EAs dans chaque graphique (plutôt sans charge), alors au contraire - toutes les transactions s'ouvrent instantanément, PAS en séquence, sans délais entre les ordres (mais il y a toujours un espace d'une demi-seconde ou seconde au début).

Je veux essayer le bouton sur la carte, j'ai trouvé le manuel, mais il ne décrit que les coordonnées et autres. Veuillez me conseiller, où dans le script du "bouton" dois-je écrire le code pour ouvrir le marché ? Cliquer dessus sur le graphique et l'affaire s'est ouverte. Comme dans le bouton standard d'achat/vente rapide de MT.

Ou comment mettre à niveau le Trade Panel pour ouvrir un panier d'ordres ?

 
Aidez-nous à résoudre ce problème
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам
  • 2019.10.14
  • www.mql5.com
В этой ветке я хочу начать свою помощь тем, кто действительно хочет разобраться и научиться программированию на новом MQL4 и желает легко перейти н...
 
Ivan Butko:

Je veux essayer le bouton sur la carte, j'ai trouvé le manuel,

Je n'ai pas cherché le manuel, mais j'ai tiré le bouton ))))

#property copyright "IgorM"
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
input string   sym1 = "EURUSD";
input string   sym2 = "GBPUSD";
input string   sym3 = "USDCAD";
input string   sym4 = "USDJPY";
input string   sym5 = "AUDUSD";
#include <Controls\Button.mqh>
CButton ButtonSend;

string sym[5];
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   sym[0] = sym1;
   sym[1] = sym2;
   sym[2] = sym3;
   sym[3] = sym4;
   sym[4] = sym5;
   ButtonSend.Create(0, "ButtonSend" + _Symbol, 0, 10, 50, 100, 90);
   ButtonSend.Color(clrRed);
   ButtonSend.Text("Kill Forex!");
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   static int ticket[5] = {-1, -1, -1, -1, -1 };
   if(ticket[0] > 0 && ticket[1] > 0 && ticket[2] > 0 && ticket[3] > 0 && ticket[4] > 0) return;
   if(ButtonSend.Pressed())
     {
      ButtonSend.Pressed(false);
      Print("Start OrderSend()");
      while(!IsStopped())
        {
         if(TerminalInfoInteger(TERMINAL_CONNECTED) && TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && !IsTradeContextBusy())
           {
            RefreshRates();
            for(int i = 0; i < 5; i++)
              {
               if(sym[i] == "") ticket[i] = INT_MAX;
               if(ticket[i] > 0) continue;
               ticket[i] = OrderSend(sym[i], OP_SELL, 0.01, SymbolInfoDouble(sym[i],SYMBOL_BID), 3, 0, 0, "", 0, 0, clrRed);
              }
           }
         if(ticket[0] > 0 && ticket[1] > 0 && ticket[2] > 0 && ticket[3] > 0 && ticket[4] > 0)  break;
         Sleep(123);
        }
     }
  }
//+------------------------------------------------------------------+

Si les paramètres du symbole seront "", alors n'ouvrez pas de lot 0.01 sur ce symbole, le réglage du lot n'a pas été fait, car comme le sujet sur la façon d'apprendre, de ne pas regarder qui fera, essayez de vous attacher si nécessaire ;)

 
Igor Makanu:

Je n'ai pas cherché de manuel, mais j'ai dessiné le bouton )))).

si le symbole est réglé sur "", alors n'ouvrez pas de lot 0.01 pour ce symbole, le réglage du lot n'a pas été fait, car comme le sujet sur la façon d'apprendre, de ne pas regarder qui fera, essayez de vous attacher si nécessaire ;)

Merci beaucoup, Igor ! Rapide et précis !

va essayer

 
Igor Makanu:

Étrange, si dans un EA, il ouvre des trades l'un après l'autre pour chaque paire de devises spécifiée.... avec un décalage dans le temps. Et lorsque vous le placez sur 5 graphiques différents avec différentes paires de devises (symbole(0)), les 5 transactions s'ouvrent simultanément et instantanément lorsque vous appuyez sur autotrade.

Pouvez-vous suggérer ce que cela peut être et comment le réparer ? Tout avoir dans un seul EA et sur un seul graphique (de sorte que le bouton sur le graphique ouvre toutes les paires aussi rapidement qu'en activant "autotrade" avec plusieurs EAs, comme dans la version originale)