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

 

Bonjour. Pouvez-vous me dire comment organiser un délai d'exécution ? Ainsi, après une nouvelle bougie, 10 secondes s'écoulent avant que la mise à jour ne soit effectuée.

#define   WM_COMMAND                    0x0111
#property indicator_chart_window
#import "user32.dll"
int RegisterWindowMessageA(string lpstring);
int PostMessageA(int  hWnd,int  Msg,int  wParam,string lParam);
int New_Bar;
datetime Time_0;
#import
int start()
 {
     New_Bar=0;                   // Для начала обнулимся
  if (Time_0 != Time[0])          // Если уже другое время начала бара
      {
      New_Bar= 1;                 // А вот и новый бар
      Time_0 = Time[0];           // Запомним время начала нового бара
      PostMessageA (WindowHandle (Symbol(), Period()), WM_COMMAND, 33324, 0);
      PostMessageA (WindowHandle (Symbol(), 0), RegisterWindowMessageA ("MetaTrader4_Internal_Message"), 2, 1);
      } 
 return(0);
 }
 
Bonjour, veuillez écrire un code à condition que si vous supprimez 1 objet du graphique, alors le reste (un choix) sera supprimé.

J'ai d'autres objets attachés à un objet, et lorsque vous supprimez cet objet, les autres restent accrochés au graphique.
 
Dmitry Ivkin:
Bonjour, je vous demande d'écrire du code à condition que si vous retirez un objet du graphique, alors le reste (selon votre choix) sera retiré

J'ai d'autres objets attachés à un objet, et quand je retire cet objet, le reste reste reste accroché au graphique
Lorsque je crée des objets, j'utilise des préfixes, c'est-à-dire des noms commençant par . Par exemple : ObjectCreate("777_a" ... ObjectCreate("777_z" et ensuite supprimer le groupe ObjectsDelete(0, "777_")
 
werter:

Bonjour. Pouvez-vous me dire comment organiser un délai d'exécution ? Je veux attendre 10 secondes après un nouveau chandelier avant d'exécuter la mise à jour.

Le plus simple est d'ajouter Sleep(10000) ; après Time_0 = Time[0] ; et je pense que la directive #import inférieure devrait être remontée 2 lignes plus haut

 
STARIJ:

Le plus simple est d'insérer Sleep(10000) ; après Time_0 = Time[0] ; et je pense que la directive #import inférieure devrait être remontée 2 lignes plus haut

Oui, ce serait un conseiller expert... Vous ne pouvez pas dans l'indicateur de sommeil, hélas.
 
STARIJ:
Lors de la création d'objets, j'utilise un préfixe, c'est-à-dire le début d'un nom. Par exemple : ObjectCreate("777_a" ... ObjectCreate("777_z" et ensuite je supprime le groupe ObjectsDelete(0, "777_")

Merci de votre réponse, non vous ne comprenez pas, j'ai d'autres objets attachés à l'objet, et si vous supprimez l'indicateur alors tout est normal, mais si vous faites un clic droit et que vous supprimez, alors vous supprimez exactement 1 objet et vous avez besoin de tous les objets attachés, j'espère que vous comprenez)

 
Dmitry Ivkin:

Merci de votre réponse, non vous ne comprenez pas, j'ai d'autres objets attachés à l'objet et si vous supprimez l'indicateur alors tout va bien, mais si vous faites un clic droit et supprimez alors 1 objet sera supprimé et j'ai besoin de tous ceux qui sont attachés, j'espère que vous comprenez)

Vérifier périodiquement(chaque tick?) la présence de l'objet principal et supprimer les objets enfants par le préfixe s'il est absent.
 
werter Ouais, eh bien, si c'était un expert... Vous ne pouvez pas le faire dans l'indicateur de veille, hélas.
datetime Time_0=0;

void ...
{
   if (Time_0 < TimeCurrent())
   {
      Alert(TimeCurrent());
      Time_0 = Time[0]+PeriodSeconds()+10; 
   }
 

Cela fait longtemps que je n'ai pas écrit en MQL4, maintenant je dois réécrire mon EA à partir de MQL5. Le code qui doit ouvrir une transaction sur le symbole où se trouve l'EA est correct ?

Dans le testeur de stratégie, deux transactions sont ouvertes pour une raison quelconque.

...
if(!Orderex(_Symbol))
{
   OrderSend(NULL,OP_SELL,lot,Bid,30,Bid+stop*Point,Bid-take*Point,NULL,magicf,0,clrRed);
}
...
bool Orderex(string symbol)
{
   for(int i=OrdersTotal(); i>0; i--)
      {
         OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()==symbol && OrderMagicNumber()==magicf) return true;
      
      
      
      }


   return false;
}
 

Je suis tombé sur une autre nuance à laquelle je n'avais pas pensé auparavant.

1) Nous avons beaucoup d'Expert Advisors installés sur les paires.

2) Lors de l'ouverture d'un ordre par un Expert Advisor avec ses propres paramètres (certains EA ouvrent 0.1 ou 0.5, par exemple), cet enregistrement apparaîtra dans la ligne "Expert Advisors".

3) La ligne "Experts" est lue et les autres robots s'effacent s'il y a des positions ouvertes pour plus de x lots.


La question est de savoir comment le lire et le traiter ? Il n'est pas inclus dans les fichiers journaux.