이제 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" 기능을 정의할 수 없습니다.

 

새로운 스크린샷 업데이트가 있습니다.


 

찬성_

2일 업데이트 이후 다운로드 섹션에서 파일을 찾을 수 있습니다. 색상이 지금 작동하고 몇 가지 버그가 수정되었습니다.

예, 포함 파일이 필요하지만 mt4gui 프로젝트와 관련이 없습니다. 단순히 p(화면에 인쇄)와 같은 일부 기능 을 정의하는 내 루틴입니다. 샘플 코드는 mt4gui를 완전히 보여주고 있는 반면에 우리는 여전히 그 프로젝트를 진행하고 있습니다.

출시 예정:

마우스 위치 감지
객체의 bcolor를 자동으로 조정하는 차트 감지의 배경
리스트 박스

문안 인사

 
 

제품이 작동 중이며 정확히 제가 필요로 하는 것입니다. 하지만...

몇 가지 문제가 있습니다.

1) 화면에 텍스트를 배치할 수 없습니다. (lot, 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에서 작동하지 않습니다.