现在可以在mt4图表上设置按钮和文本字段了

 

在这里,我想介绍一个新的mt4的免费插件作为预览。我目前正在测试一个名为mt4gui的产品。这个产品可以将按钮、文本字段、列表字段直接放在图表上;这里有一张已经工作的预览屏幕截图

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

按钮在点击后立即作出反应,而不需要等待经纪商的勾选。我们正在改进这个产品,下周会有更多的功能。我为什么发这个帖子是为了从社区获得所需的想法。当然,并不是所有的东西都能实现,但我将在这里过滤有趣的想法。

这里有一个非常基本的代码演示使用方法的例子。

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

我们现在已经发布了新版本的MT4GUI。欢迎所有的测试者与我联系

索取样品 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

 


好主意,但产品还不能用。没有 "libtrade.mqh "和 "libvisual.mqh "就不行。 我在哪里可以得到这些文件来真正测试mt4gui.dll?

没有这些文件,编译器无法定义 "pFontSize"、"pReset"、"p "和 "CloseAllByMagic "函数。

 

这里是新的屏幕照片更新


 

亲_

你可以在下载区找到这些文件,从两天前开始有了更新。颜色现在可以工作了,一些错误也被修复了。

是的,你需要include文件,但它们与mt4gui项目没有关系。它只是我自己定义一些功能 的程序,比如p(打印到屏幕)。示例代码充分展示了mt4gui,另一方面,我们仍在为该项目工作。

即将推出。

鼠标位置检测
图表背景检测以自动适应对象的背景颜色
列表框

问候

 
 

该产品是有效的,它正是我所需要的。但是...

我有几个问题。

1)无法将文本放在屏幕上;(地段、SL、TP等线)。

2)颜色不工作,不管我怎么做。

3)这更像是一个建议--是否有可能将按钮放在一个单独的子窗口中?这将更方便,看起来像一个交易控制台,如果子窗口被最小化,将有助于避免意外点击按钮。就我所知,从PutObject函数 中,坐标与主窗口或子窗口没有关系。

但不管怎样,这是个伟大的产品。在MT4中实现它是人们期待已久的。谢谢。

 

还有一件事。

在专家被移走 后,纽扣仍在。

 

亲_

1) 在屏幕上放置一个文本,你可以使用MQL内部对象,这里有一个示例代码。

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

另一个完整的例子是。

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

正如你在我的屏幕拍摄中看到的演示工作。这个版本的mt4gui是我刚刚上传的0.3版本,你可以使用最新的版本。0.1版根本不支持颜色。你可能正在使用0.1版本。

要从屏幕上删除 按钮,你必须使用deinit()

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

你好。

这是我见过的最有用的附加组件,谢谢你的开发。

有什么方法可以获得复选框 的状态或获得文本框/标签/按钮的文本吗?

颜色在0.2版本中不起作用。