Boutons et champs de texte sur le graphique mt4 possible maintenant

 

Ici, je veux présenter un nouvel addon gratuit pour mt4 en avant-première. Je teste actuellement un produit appelé mt4gui. Ce produit permet de placer des boutons, des champs de texte, des champs de liste directement sur le graphique ; voici une capture d'écran en avant-première qui fonctionne déjà.

http://fx1.net/wiki/uploads/img_7.png

Les boutons réagissent immédiatement après le clic sans attendre le tick côté broker. Nous améliorons ce produit avec plus de fonctionnalités dans les semaines à venir. La raison pour laquelle j'ai posté ce message est pour obtenir des idées de la communauté sur ce qui est nécessaire. Bien sûr, tout ne peut pas être réalisé, mais je vais filtrer les idées intéressantes ici.

Voici un exemple de code très basique qui démontre l'utilisation :

//
// Copyright (c) www.fx1.net  2009-2011
//

#import "toolbox.dll"   
   int tbPutButton(int,int,int,int,int,string);   
   bool tbIsClicked( int );
#import

#include <libtrade.mqh>
#include <libvisual.mqh>

int btn1 = 0;
int buybtn,sellbtn,closebtn,lotbtnp,lotbtnm;
double  LotSize = 0.10;

int init()
  {
   lotbtnp = tbPutButton(WindowHandle(Symbol(),Period()),100,55,50,35,"Lot +");
   lotbtnm = tbPutButton(WindowHandle(Symbol(),Period()),150,55,50,35,"Lot -");
   
   buybtn = tbPutButton(WindowHandle(Symbol(),Period()),210,55,100,35,"Market Buy");
   sellbtn = tbPutButton(WindowHandle(Symbol(),Period()),210,90,100,35,"Market Sell");
   closebtn = tbPutButton(WindowHandle(Symbol(),Period()),210,145,100,35,"Close All");      
   pFontSize(14);
   return(0);
  }
int deinit()
  {
   return(0);
  }
int start()
  {
  pReset();
  p("Lotsize: "+DoubleToStr(LotSize,2),Yellow);
  
  if (tbIsClicked(lotbtnp)) LotSize=LotSize+0.10;      
  if (tbIsClicked(lotbtnm) && LotSize>0.10) LotSize=LotSize-0.10;      
  
  
  if (tbIsClicked(buybtn))
      {
      PlaySound("ok.wav");
      OrderSend(Symbol(),OP_BUY,LotSize,Ask,3,0,0,"Buy",1);
      }

  if (tbIsClicked(sellbtn))
      {
      PlaySound("ok.wav");
      OrderSend(Symbol(),OP_SELL,LotSize,Bid,3,0,0,"Sell",1);
      }

  if (tbIsClicked(closebtn))
      {
      PlaySound("ok.wav");
      CloseAllByMagic(3,1);
      } 
  Print(tbIsClicked(buybtn));
  Print(tbIsClicked(sellbtn));
  Print(tbIsClicked(closebtn));
  return(0);
  }
 

Nous avons publié une nouvelle version de MT4GUI. Tous les bêta-testeurs sont invités à me contacter

pour des échantillons : http://www.fx1.net/wiki/pmwiki.php/MT4GUI/MT4GUI

#import "toolbox.dll"   
   int tbPutObject(int,string,int,int,int,int,string);
   int tbRemoveAll(int);
   int tbSetText(int,string,int,string);
   int tbSetBgColor(int,int);
   int tbSetTextColor(int,int);
   
   bool tbIsClicked( int );
   int tbRemove(int); 
   int tbEnable(int,int);
#import

 


Excellente idée, mais le produit ne fonctionne pas encore. Pas sans les fichiers "libtrade.mqh" et "libvisual.mqh". Où puis-je obtenir ces fichiers pour tester réellement la mt4gui.dll ?

Sans ces fichiers, le compilateur ne peut pas définir les fonctions "pFontSize", "pReset", "p" et "CloseAllByMagic".

 

Voici une nouvelle mise à jour des captures d'écran


 

pro_

vous pouvez trouver les fichiers dans la section téléchargement depuis 2 jours il y a des mises à jour. Les couleurs fonctionnent maintenant et plusieurs bugs ont été corrigés.

Oui, vous avez besoin des fichiers include mais ils ne sont pas liés au projet mt4gui. Ce sont simplement mes propres routines pour définir certaines fonctions comme p (print to screen). L'exemple de code est une démonstration complète de mt4gui et d'autre part nous travaillons toujours sur ce projet.

Prochainement :

Détection de la position de la souris
Détection de l'arrière-plan du graphique pour adapter automatiquement les couleurs d'arrière-plan des objets.
Boîte de liste

Salutations

 
 

Le produit fonctionne et c'est exactement ce dont j'ai besoin. Mais...

J'ai quelques problèmes avec lui.

1) je ne peux pas placer le texte à l'écran ; (lots, SL, TP, etc. ligne)

2) les couleurs ne fonctionnent pas, peu importe ce que je fais ;

3) c'est plus une suggestion - est-il possible de placer les boutons dans une sous-fenêtre séparée ? Ce serait beaucoup plus pratique, cela ressemblerait à une console de négociation et, si la sous-fenêtre est réduite, cela permettrait d'éviter les clics accidentels sur un bouton. D'après ce que je peux voir de la fonction PutObject, les coordonnées ne sont pas liées à la fenêtre principale ou secondaire.

Mais indépendamment de tout cela, c'est un excellent produit. L'avoir implémenté dans MT4 était attendu depuis longtemps. Merci.

 

une dernière chose :

les boutons restent en place après le retrait de l'expert.

 

pro__

1) pour placer un texte à l'écran vous pouvez utiliser les objets internes de MQL voici un exemple de code :

// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
string pxy(string mytext,color clr,int posx,int posy,int size)
{
   string n="pxy3txt"+posx+posy;
   ObjectCreate(n, OBJ_LABEL, 0, Time[lib_startbarno], lib_nextlinelevel);
   ObjectSet(n, OBJPROP_CORNER, 0);
   ObjectSet(n, OBJPROP_XDISTANCE, posx);
   ObjectSet(n, OBJPROP_YDISTANCE, posy);
   ObjectSet(n, OBJPROP_COLOR, clr);
   ObjectSet(n, OBJPROP_BACK, false);
   ObjectSetText(n, mytext, size);
   return(n);
}

Un autre exemple complet est :

#import "mt4gui.dll"   
   int tbPutObject(int,string,int,int,int,int,string);
   int tbRemoveAll(int);
   int tbSetText(int,string,int,string);
   int tbSetBgColor(int,int);
   int tbSetTextColor(int,int);
   string tbGetText( int );
   bool tbIsClicked( int );
   int tbRemove(int); 
   int tbEnable(int,int);
#import

#include <libtrade.mqh>
#include <libvisual.mqh>
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
// Login implementation demo
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
int btn1,btn2,edit1,edit2,l1,l2;
int ticks;
bool LoggedIn = false;
string obj1="";

int init()
  {
   int hwnd=WindowHandle(Symbol(),Period());
   tbRemoveAll(hwnd); ObjectsDeleteAll();
   
   
   //void  pxy(string mytext,color clr,int posx,int posy,int size)
   pxy("Please login",Yellow,250,50,19);
   pxy("Login :",White,250,100,17);
   pxy("Passwd:",White,250,140,17);
   
   l1=tbPutObject(hwnd,"text",350,100,250,30,"Username");   
   l2=tbPutObject(hwnd,"text",350,140,250,30,"Password");   
   btn1=tbPutObject(hwnd,"button",250,200,150,40,"Login");
   btn2=tbPutObject(hwnd,"button",450,200,150,40,"Exit");
   
   
   // set colors
   tbSetBgColor(btn1,Green); tbSetTextColor(btn1,White);
   tbSetBgColor(btn2,IndianRed); tbSetTextColor(btn2,White);
   
   tbSetText(l2,"xxxxxxxxxx",24,"Wingdings");
        
   return(0);
  }

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//| dont forget to remove objects on deinit()                        |
//+------------------------------------------------------------------+
int deinit()
  {
   tbRemove(btn1);tbRemove(btn2);
   tbRemove(l1);tbRemove(l2);   
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   int hwnd=WindowHandle(Symbol(),Period()); ticks++; pReset();
   if (MathMod(ticks,20)==19 && StringLen(obj1)>0) ObjectDelete(obj1);
   
   
   
   // If still not logged in we use this block
   if (!LoggedIn)
   {
      // exit button
      if (tbIsClicked(btn2)) {     ObjectsDeleteAll(); tbRemoveAll(hwnd); Destroy("Authentification Failed"); return(1);      }
  
      // login button
      if (tbIsClicked(btn1)) {
       if (tbGetText(l1)=="admin" && tbGetText(l2)=="pass")
         { PlaySound("ok.wav"); LoggedIn=true; tbRemoveAll(hwnd); ObjectsDeleteAll(); }
         else
         { PlaySound("alert2.wav"); obj1 = pxy("Authentification Failed",Red,250,20,12);}        
      } 
      return(1);
   }
   // From here we have the functions after login
   p("Admin has been autentificated successfully",Green); 
   
   
   
   return(0);
  }
// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
string pxy(string mytext,color clr,int posx,int posy,int size)
{
   string n="pxy3txt"+posx+posy;
   ObjectCreate(n, OBJ_LABEL, 0, Time[lib_startbarno], lib_nextlinelevel);
   ObjectSet(n, OBJPROP_CORNER, 0);
   ObjectSet(n, OBJPROP_XDISTANCE, posx);
   ObjectSet(n, OBJPROP_YDISTANCE, posy);
   ObjectSet(n, OBJPROP_COLOR, clr);
   ObjectSet(n, OBJPROP_BACK, false);
   ObjectSetText(n, mytext, size);
   return(n);
}

Comme vous le voyez sur mes screenshoots les démos fonctionnent. Cette version de mt4gui que je viens de télécharger en tant que version 0.3, vous pouvez prendre la dernière version. La version 0.1 ne supporte pas du tout les couleurs. Vous utilisez probablement la version 0.1.

Pour supprimer les boutons de l'écran vous devez utiliser deinit()

//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//| dont forget to remove objects on deinit()                        |
//+------------------------------------------------------------------+
int deinit()
  {
   tbRemove(btn1);tbRemove(btn2);
   tbRemove(l1);tbRemove(l2);   
   return(0);
  }
 

Salut,

C'est l'addon le plus utile que j'ai jamais vu, merci pour le développement.

Y a-t-il un moyen d'obtenir l'état d'une case à cocher ou d'obtenir le texte d'une case à texte/étiquette/bouton ?

Les couleurs ne fonctionnent pas avec la version 0.2.