Questions des débutants MQL4 MT4 MetaTrader 4 - page 237

 
Sergey Likho:

L'indicateur de MT5 dessine une ligne en deux couleurs.

Les valeurs de la ligne sont dans le même tampon.

Existe-t-il un moyen d'identifier la couleur de la ligne lors de la demande de valeurs à l'indicateur ?

Vous pouvez. La couleur de la ligne est stockée dans le tampon de couleur. S'il n'y a qu'une seule ligne, le tampon de valeur est 0 et le tampon de couleur est 1. En conséquence, dans CopyBuffer vous mettez le deuxième paramètre comme 1.
 
Ventura:

S'il n'est pas possible d'afficher la fenêtre des paramètres de manière programmatique, veuillez indiquer si les paramètres peuvent être initialisés d'une manière ou d'une autre.

input double BuyStop=100;
double MyBuyStop=BuyStop;


.........
if(something) MyBuyStop=200;
 
Евгений:

Que recommandez-vous ?

D'abord, les mandats doivent être passés au crible par le symbole et le magicien. Il ne vous reste que deux ordres. Vous sélectionnez celui que vous voulez supprimer sur votre état. Vous en supprimez un et modifiez le stop loss.

 
Aleksei Stepanenko
input double BuyStop=100;
double MyBuyStop=BuyStop;


.........
if(something) MyBuyStop=200;

Alexey, j'ai demandé une suggestion sur la façon d'appeler la fonction de calcul des paramètres AVANT l'apparition de la fenêtre des paramètres, et non après.

La question est ouverte : est-il possible d'appeler la fenêtre de paramètres de manière programmatique ? Sinon, est-il possible d'initialiser les paramètres à partir d'une fonction AVANT que la fenêtre de paramètres n'apparaisse.

Je voudrais faire quelque chose comme ceci

entrée double BuyStop = GetMyBuyStop() ;

Mais je reçois une erreur disant que seule une constante peut être sur le côté droit (

 
Ventura:

Alexey, j'ai demandé une suggestion sur la façon d'appeler la fonction de calcul des paramètres AVANT l'apparition de la fenêtre des paramètres, et non après.

La question est ouverte : est-il possible d'appeler la fenêtre de paramètres de manière programmatique ? Sinon, est-il possible d'initialiser les paramètres à partir de la fonction AVANT que la fenêtre de paramètres n'apparaisse.

Je voudrais faire quelque chose comme ceci

entrée double BuyStop = GetMyBuyStop() ;

Mais une erreur se produit car il ne peut y avoir qu'une constante à droite (

Il n'y a rien avant l'apparition de la fenêtre de paramétrage, tout ne commence que plus tard, lorsque la fenêtre est déjà chargée

 

Exactement ce que Vitaly a dit !

Créez un panneau sur le graphique, gérez les variables à partir de là.

 
Vitaly Muzichenko:

Il n'y a rien avant l'apparition de la fenêtre des paramètres, elle ne commence qu'après, lorsque la fenêtre est déjà chargée.

Je le sais, c'est pourquoi j'attends l'avis d'un professionnel. Il est peut-être possible de le faire par des moyens non standard, via l'API de Win ou autre.

N'y a-t-il vraiment aucun moyen d'afficher la fenêtre de manière programmatique, à partir du code ?

 
Ventura:

Je le sais, c'est pourquoi j'attends l'avis d'un professionnel. Il est peut-être possible de le faire par des moyens non standard, via l'API de Win ou autre.

N'y a-t-il aucun moyen d'afficher la fenêtre de manière programmatique, à partir du code ?

Avant l'initialisation de l'EA (et les paramètres sont entrés avant l'initialisation), l'EA n'est pas disponible, il ne fonctionne pas... Avant l'initialisation de l'Expert Advisor, la fenêtre de ses paramètres est à votre disposition. Mais cela ne vous convient pas. Donc, utilisez une autre entrée des valeurs dont vous avez besoin - après l'initialisation de l'EA. Vous avez accès à la fenêtre MessageBox(). Mais cela ne vous aidera pas beaucoup - il n'y a pas de champs de saisie de valeur - seulement des boutons d'accord/désaccord/annulation.

Donc - vous devez utiliser votre propre fenêtre. Vous pouvez le créer vous-même à partir d'objets. Cherchez-le dans ObjectCreate(). Ou utilisez Canvas. Mais kanvas n'est pas destiné à de simples travaux d'artisanat.

Документация по MQL5: Графические объекты / ObjectCreate
Документация по MQL5: Графические объекты / ObjectCreate
  • www.mql5.com
ObjectCreate - Графические объекты - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin:

L'EA n'est pas disponible avant son initialisation (et les paramètres sont entrés avant l'initialisation), il ne fonctionne pas... Avant que l'EA ne soit initialisé, sa fenêtre de paramètres est à votre disposition. Mais cela ne vous convient pas. Donc, utilisez une autre entrée des valeurs dont vous avez besoin - après l'initialisation de l'EA. Vous avez accès à la fenêtre MessageBox(). Mais cela ne vous aidera pas beaucoup - il n'y a pas de champs de saisie de valeur - seulement des boutons d'accord/désaccord/annulation.

Donc - vous devez utiliser votre propre fenêtre. Vous pouvez le créer vous-même à partir d'objets. Cherchez-le dans ObjectCreate(). Ou utilisez Canvas. Mais kanvas n'est pas destiné à de simples travaux d'artisanat.

Artem, merci, j'attendais vos conseils. En attendant, je cherchais moi-même des solutions possibles. Ce matin, j'ai trouvé comment afficher la fenêtre des paramètres de manière programmatique !

J'ai découvert que la fenêtre est appelée en appuyant sur F7. Une recherche sur Internet a montré que je peux réaliser un affichage des touches de fonction à l'aide de MQL.

Le reste est une question de technique. Je colle le code ici pour le partager avec vous si quelqu'un peut le trouver utile :

extern double BuyStop, SellStop ;

...

void SetParams()
  {
   BuyStop = CalcBuyStop();
   SellStop = CalcSellStop();
   int handle = WindowHandle(Symbol(), 0);
   PostMessageA(handle,WM_KEYDOWN,VK_F7,0);
  } 
 

Mais je me suis réjoui trop tôt. J'ai réussi à ouvrir la fenêtre des paramètres de manière programmatique, mais les valeurs que j'ai assignées aux paramètres dans la procédure n'ont pas été sauvegardées (((

C'est-à-dire que lorsque j'ouvre la fenêtre des paramètres, je vois les valeurs spécifiées lors de l'initialisation, dans mon cas des zéros.

Existe-t-il un moyen de transférer les valeurs calculées dans le formulaire des paramètres ?

Raison: