Кнопки и текстовые поля на графике 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".

 

Вот новый снимок экрана


 

pro_

Вы можете найти файлы в разделе загрузки с 2 дней есть обновления. Цвета теперь работают и несколько ошибок были исправлены.

Да, вам нужны включаемые файлы, но они не связаны с проектом mt4gui. Это просто мои собственные процедуры для определения некоторых функций, таких как p (печать на экран). Код примера полностью демонстрирует mt4gui, с другой стороны, мы все еще работаем над этим проектом.

Скоро будет готов:

Определение положения мыши
Определение фона графика для автоматической адаптации bgcolors объектов
Listbox

привет

 
 

Продукт работает, и это именно то, что мне нужно. Но...

У меня есть несколько проблем с ним.

1) не могу разместить текст на экране; (лоты, SL, TP и т.д. линии)

2) цвета не работают, независимо от того, что я делаю;

3) это скорее предложение - возможно ли разместить кнопки в отдельном подокне? Это будет гораздо удобнее, будет выглядеть как торговая консоль и, если подокно свернуто, поможет избежать случайных нажатий на кнопку. Насколько я могу судить по функции PutObject, координаты не связаны с основным или подокном.

Но несмотря на все это, это отличный продукт. То, что он реализован в МТ4, было долгожданным. Спасибо.

 

еще один момент:

кнопки остаются на месте после удаления эксперта.

 

pro__

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.

Причина обращения: