Buttons & Textfelder im mt4 Chart jetzt möglich

 

Hier möchte ich ein neues kostenloses Addon für mt4 als Preview vorstellen. Ich teste derzeit ein Produkt namens mt4gui. Dieses Produkt ermöglicht es, Buttons, Text- und Listenfelder direkt im Chart zu platzieren; hier ist ein Preview-Screenshoot, der bereits funktioniert

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

Die Schaltflächen reagieren sofort nach dem Klick, ohne auf den Tick auf der Brokerseite zu warten. Wir werden dieses Produkt in den nächsten Wochen mit weiteren Funktionen verbessern. Der Grund, warum ich das hier poste, ist, um Ideen von der Community zu bekommen, was benötigt wird. Natürlich kann nicht alles realisiert werden, aber ich werde interessante Ideen hier filtern.

Hier ist ein Beispiel mit sehr einfachem Code, der die Anwendung demonstriert:

//
// 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);
  }
 

Wir haben jetzt eine neue Version von MT4GUI veröffentlicht. Alle Betatester sind herzlich eingeladen, mich zu kontaktieren

für Beispiele: 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

 


Tolle Idee, aber das Produkt funktioniert noch nicht. Nicht ohne die "libtrade.mqh" und "libvisual.mqh". Wo kann ich diese Dateien bekommen, um die mt4gui.dll wirklich zu testen?

Ohne diese Dateien kann der Compiler die Funktionen "pFontSize", "pReset", "p" und "CloseAllByMagic" nicht definieren.

 

Hier ist ein neues Bildschirmfoto-Update


 

pro_

Sie können die Dateien in der Download-Sektion finden. Seit 2 Tagen gibt es Updates. Die Farben funktionieren jetzt und einige Bugs wurden behoben.

Ja, man braucht die Include-Dateien, aber sie haben nichts mit dem mt4gui-Projekt zu tun. Es sind einfach meine eigenen Routinen, um einige Funktionen wie p (print to screen) zu definieren. Der Beispielcode ist eine vollständige Demonstration von mt4gui und auf der anderen Seite arbeiten wir immer noch an diesem Projekt.

Kommt bald:

Erkennung der Mausposition
Erkennung des Diagrammhintergrunds zur automatischen Anpassung der Bg-Farben von Objekten
Listbox

Grüße

 
 

Das Produkt funktioniert, und es ist genau das, was ich brauche. Aber...

Ich habe ein paar Probleme damit.

1) Ich kann den Text nicht auf dem Bildschirm platzieren (Lots, SL, TP, etc. Zeile)

2) Die Farben funktionieren nicht, egal was ich tue;

3) dies ist eher ein Vorschlag - ist es möglich, die Schaltflächen in einem separaten Unterfenster zu platzieren? Das wäre viel bequemer, würde wie eine Handelskonsole aussehen und, wenn das Unterfenster minimiert ist, helfen, versehentliche Klicks auf eine Schaltfläche zu vermeiden. Soweit ich aus der PutObject-Funktion ersehen kann, sind die Koordinaten nicht mit dem Haupt- oder Unterfenster verbunden.

Aber unabhängig von all dem ist dies ein großartiges Produkt. Ich habe lange darauf gewartet, dass es in MT4 implementiert wird. Vielen Dank!

 

noch eine Sache:

Die Knöpfe bleiben an, nachdem der Experte entfernt wurde.

 

pro__

1) um einen Text auf dem Bildschirm zu platzieren, können Sie MQL-interne Objekte verwenden, hier ist ein Beispielcode:

// -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
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);
}

Ein weiteres vollständiges Beispiel ist:

#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);
}

Wie Sie auf meinen Screenshoots sehen, funktionieren Demos. Diese Version von mt4gui habe ich gerade als Version 0.3 hochgeladen, Sie können die neueste Version nehmen. 0.1 hat überhaupt keine Farbunterstützung. Sie benutzen wahrscheinlich 0.1.

Um Schaltflächen vom Bildschirm zu entfernen, müssen Sie deinit() verwenden.

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

Hallo!

Dies ist das nützlichste Addon, das ich je gesehen habe, vielen Dank für die Entwicklung.

Gibt es eine Möglichkeit, den Status eines Kontrollkästchens oder den Text eines Textfeldes/Labels/Buttons abzurufen?

Farben funktionieren nicht mit Version 0.2.