MetaTrader용 GUI 그래픽 라이브러리: 설치 및 사용 가이드

MetaTrader용 GUI 그래픽 라이브러리: 설치 및 사용 가이드

10 11월 2026, 16:43
Omar Alkassar
0
2

✔️ GUI 그래픽 라이브러리 MT4©:   https://www.mql5.com/en/market/product/206760

✔️ GUI 그래픽 라이브러리 MT5©:   https://www.mql5.com/en/market/product/206761

✔️ 전체 문서, 요소 갤러리 및 이미지를 코드로 변환하는 도구5:   https://www.betasoft.dev/gui-graphic-library



포지션 테이블, 주문 티켓 및 실시간 차트.

GUI 그래픽 라이브러리는 Expert Advisor와 지표에 창, 탭, 메뉴, 표, 차트, 선택기, 대화 상자 및 거래 위젯을 포함한 완벽한 인터페이스를 제공합니다. 모든 요소는 하나의 캔버스에 그려지며, 동일한 코드가 MetaTrader 4와 MetaTrader 5에서 모두 작동하고, 전체 API는 15개의 함수로 구성되어 있습니다.

이 가이드는 다운로드부터 첫 번째 작동 패널 생성, 그리고 가장 자주 수행하게 될 작업까지 안내합니다. 모든 코드 예제는 공개된 포함 파일만 사용하므로, 여러분의 프로그램에 붙여넣어 사용할 수 있습니다.

78개 요소 중 일부: 버튼, 입력란, 슬라이더, 탭.

1. 시작하기 전에

  • Windows용 MetaTrader 4 또는 MetaTrader 5입니다. 글꼴과 아이콘은 Windows 화면 배율(100%, 125%, 150%, 200%)을 따릅니다.
  • 데모 및 사용자 지정 프로그램을 컴파일하는 데 사용하는 MetaEditor입니다.
  • 터미널 옵션에서 허용할 사항이 없습니다. 이 라이브러리는 DLL을 사용하지 않고, 웹 요청을 하지 않으며, 터미널 전역 변수를 사용하지 않습니다.
  • MT4와 MT5 버전은 별개의 제품입니다. 사용하시는 터미널에 맞는 버전을 설치하세요.

2. 설치

  1. 터미널에서 파일 메뉴를 선택한 다음 데이터 폴더 열기를 선택하세요.
  2. MetaTrader 5의 경우 MQL5 폴더를, MetaTrader 4의 경우 MQL4 폴더를 엽니다.
  3. 위 표에 표시된 폴더(Libraries, Include, Experts 및 Indicators)에 각 파일을 복사하십시오.
  4. MetaEditor에서 각 데모를 열고 F7 키를 누르십시오. 결과는 오류 0개, 경고 0개로 표시되어야 합니다.
  5. 터미널로 돌아가서 네비게이터를 새로 고침(마우스 오른쪽 버튼 클릭 후 새로 고침)하면 새 프로그램이 나타납니다.

폴더 구조는 다음과 같아야 합니다.

MQL5/

  Include/GUI_Graphic_Library.mqh

  Libraries/GUI_Graphic_Library.ex5

  Experts/GUI_Graphic_Library_FullDemo.mq5

          GUI_Graphic_Library_ElementTests.mq5

  Indicators/GUI_Graphic_Library_IndicatorWindow.mq5

             GUI_Graphic_Library_IndicatorChart.mq5

MQL4/   the same files with .mq4 and .ex4

라이브러리 파일의 이름을 바꾸지 마십시오. 포함 파일에서 해당 이름으로 라이브러리 파일을 불러옵니다.

설치 후 점검 사항

확인하다

어디

.ex5 (또는 .ex4) 파일은 라이브러리 폴더에 있습니다.

데이터 폴더

.mqh 파일은 Include 폴더에 있습니다.

데이터 폴더

데모는 오류 없이 컴파일됩니다.

메타에디터

데모에서는 차트의 창이 표시됩니다.

차트

전문가 탭에는 "지원되지 않음"이라는 항목이 없습니다.

터미널, 툴박스

GUI_Graphic_Library.mqh 파일 안에는 무엇이 들어있나요?

포함 파일은 의도적으로 크기가 작습니다. 가져오기 블록 위에는 열거형(객체 유형, 속성, 이벤트, 테마 및 아이콘)이 선언되어 있습니다. 아래의 가져오기 블록은 컴파일된 라이브러리를 로드하고 15개의 함수 목록을 표시합니다. MetaTrader 5는 컴파일러가 선택한 .ex5 파일을 로드하고 MetaTrader 4는 .ex4 파일을 로드합니다. 이 파일은 포함만 하고 절대 수정하지 않습니다.

 #ifdef __MQL5__
#import "\\Market\\GUI_Graphic_Library.ex5"
#else
#import "\\Market\\GUI_Graphic_Library.ex4"
#endif
   string Gui_Version();
   bool    Gui_Create( const long chart= 0 , const string name= "GUI_Graphic_Library" , const int subwin= 0 );
   void    Gui_Destroy();
   void    Gui_ChartEvent( const int id, const long lparam, const double dparam, const string sparam);
   void    Gui_Timer();
   void    Gui_Update( const bool force= false );
   bool    Gui_NextEvent(ENUM_GUI_EVENT &event, int &sender, long &lparam, double &dparam, string &sparam);
   int     Gui_Add( const ENUM_GUI_OBJECT type, const int parent, const string name, const string text, const int x, const int y, const int w, const int h);
   int     Gui_Set( const int id, const ENUM_GUI_PROP prop, const string s= "" , const double a= EMPTY_VALUE , const double b= EMPTY_VALUE , const double c= EMPTY_VALUE , const double d= EMPTY_VALUE );
   string Gui_Get( const int id, const ENUM_GUI_PROP prop, const string s= "" , const double a= EMPTY_VALUE , const double b= EMPTY_VALUE );
   double Gui_GetNum( const int id, const ENUM_GUI_PROP prop, const string s= "" , const double a= EMPTY_VALUE , const double b= EMPTY_VALUE );
   int     Gui_SetArray( const int id, const ENUM_GUI_PROP prop, const double &values[], const double a= EMPTY_VALUE );
   int     Gui_AddImage( const string name, const uint &argb[], const int w, const int h);
   int     Gui_Find( const string name);
   void    Gui_BringToFront();
#import

다음은 나타나는 순서대로 나열된 15가지 기능입니다.

기능

이 제품의 기능은 무엇인가요?

당신이 그것을 부르는 곳

GUI 버전

라이브러리 버전을 텍스트로 반환합니다.

어딘가에

GUI_생성

차트에서 GUI를 시작합니다. 현재 차트를 사용하려면 0을 전달하고, 프로그램 이름과 지표를 표시할 하위 창 번호를 전달하세요. 성공하면 true를 반환합니다.

OnInit

Gui_Destroy

GUI와 GUI가 그린 모든 내용을 제거합니다.

온데이닛

Gui_ChartEvent

차트 이벤트(마우스, 키보드, 클릭)를 라이브러리에 전달합니다.

온차트이벤트

GUI_타이머

라이브러리의 타이머(애니메이션, 알림, 카운터)를 실행합니다.

온타이머

GUI_업데이트

변경된 부분만 다시 그립니다. true를 전달하면 모든 것을 다시 그립니다.

각 핸들러의 끝

Gui_NextEvent

큐에서 다음 이벤트(클릭, 변경, 대화 상자 결과, 거래 요청)를 가져옵니다. 큐가 비어 있으면 false를 반환합니다.

이벤트 루프

Gui_Add

요소를 생성하고 해당 요소의 ID를 반환합니다. 유형, 부모 요소, 이름, 텍스트, x, y, 너비, 높이 값을 입력으로 받습니다.

OnInit

Gui_Set

요소의 속성을 변경하거나 해당 요소의 액션을 실행합니다. 요소가 해당 기능을 지원하지 않는 경우 -1을 반환하고 로그에 한 줄을 추가합니다.

어딘가에

Gui_Get

속성을 텍스트로 읽습니다.

어딘가에

Gui_GetNum

속성을 숫자로 읽습니다.

어딘가에

Gui_SetArray

예를 들어 전체 차트 시리즈와 같은 요소에 숫자 목록을 보냅니다.

어딘가에

Gui_AddImage

ARGB 픽셀 배열에서 이미지를 등록하여 요소들이 이미지를 표시할 수 있도록 합니다. 웹사이트의 Image to Code 도구는 PNG 파일에서 이 배열을 생성합니다.

OnInit

Gui_Find

이름으로 요소의 ID를 찾습니다.

어딘가에

Gui_BringToFront

그 뒤에 그린 차트 객체 위로 GUI를 이동합니다.

차트 개체를 생성한 후

이것이 전체 인터페이스입니다. 이 가이드의 나머지 내용은 모두 이 15가지 호출의 조합입니다.

3. 전체 데모를 실행하세요

  1. 차트를 여세요. 예를 들어 1280x720픽셀 이상의 큰 창에서 가장 많은 정보를 볼 수 있습니다.
  2. 네비게이터에서 GUI_Graphic_Library_FullDemo를 차트로 드래그하세요.
  3. 상단의 섹션 탭을 사용하세요: 홈, 사용 사례, 버튼, 입력, 선택기, 데이터, 차트, 레이아웃, 피드백, 거래 및 설정.

데모 계정은 InpLiveTrading 입력값을 true로 설정하지 않으면 주문을 전송하지 않습니다. 실계정에서는 이 값을 비활성화하십시오. 메인 창을 닫으면 Expert Advisor가 자동으로 종료됩니다.

한 번에 하나의 요소만 살펴보려면 GUI_Graphic_Library_ElementTests를 사용하세요. 선택 창에서 그룹을 클릭하면 됩니다.

라이브러리의 요소만으로 구성된 대시보드.

4. 첫 번째 패널

이것은 완전한 Expert Advisor입니다. 거래량 선택 상자, 매수 버튼, 그리고 상태 표시줄이 있는 창으로 구성되어 있습니다. 실제 거래는 수행하지 않고 메시지만 표시합니다.

 #include <GUI_Graphic_Library.mqh>
int wMain, spLots, btnBuy, lblInfo;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
  {
   if (!Gui_Create( 0 , "MyPanel" ))
       return INIT_FAILED ;       // 0 = this chart
   Gui_Set( 0 , GUI_PROP_THEME, "" , GUI_THEME_DARK);
   wMain = Gui_Add(GUI_OBJ_WINDOW, 0 , "wMain" , "My panel" , 20 , 40 , 300 , 170 );
   Gui_Set(wMain, GUI_PROP_THEME_BUTTON, "" , true );       // sun / moon button
   Gui_Set(wMain, GUI_PROP_MAIN_WINDOW, "" , true );         // close asks to remove the program
   spLots = Gui_Add(GUI_OBJ_SPIN, wMain, "spLots" , "" , 10 , 10 , 280 , 30 );
   Gui_Set(spLots, GUI_PROP_RANGE, "" , 0.01 , 50 , 0.01 , 2 ); // min, max, step, digits
   Gui_Set(spLots, GUI_PROP_VALUE, "" , 0.10 );
   Gui_Set(spLots, GUI_PROP_SUFFIX, "lots" );
   btnBuy = Gui_Add(GUI_OBJ_BUTTON, wMain, "btnBuy" , "BUY" , 10 , 50 , 280 , 40 );
   Gui_Set(btnBuy, GUI_PROP_STYLE, "" , GUI_BUTTON_SUCCESS);
   Gui_Set(btnBuy, GUI_PROP_ICON, "" , GUI_ICON_ARROW_UP);
   lblInfo = Gui_Add(GUI_OBJ_LABEL, wMain, "lblInfo" , "Ready" , 10 , 100 , 280 , 20 );
   Gui_Set(lblInfo, GUI_PROP_DIM, "" , true );
   Gui_Set( 0 , GUI_PROP_REDRAW);
   return INIT_SUCCEEDED ;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ProcessEvents()
  {
   ENUM_GUI_EVENT ev;
   int sender;
   long l;
   double d;
   string s;
   while (Gui_NextEvent(ev, sender, l, d, s))
       if (ev == GUI_EVENT_CLICK && sender == btnBuy)
        {
         double lots = Gui_GetNum(spLots, GUI_PROP_VALUE);
         Gui_Set(lblInfo, GUI_PROP_TEXT, "Buy " + DoubleToString (lots, 2 ) + " lots" );
         Gui_Set( 0 , GUI_PROP_TOAST, "Buy|" + DoubleToString (lots, 2 ) + " lots" , GUI_NOTICE_SUCCESS, 3000 );
        }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit ( const int r)
  {
   Gui_Destroy();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer ()
  {
   Gui_Timer();
   ProcessEvents();
   Gui_Update();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id, const long &l, const double &d, const string &s)
  {
   Gui_ChartEvent(id, l, d, s);
   ProcessEvents();
   Gui_Update();
  }

패턴은 절대 변하지 않는다.

  1. OnInit 메서드는 GUI와 그 구성 요소를 생성합니다.
  2. OnChartEvent와 OnTimer는 라이브러리에 이벤트를 전달하고, 큐를 읽어 Gui_Update를 호출합니다.
  3. OnDeinit 메서드는 GUI를 파괴합니다.

5. 도서관은 어떻게 생각하는가

  • ID. Gui_Add는 정수 ID를 반환합니다. 필요한 ID를 저장해 두거나, 나중에 Gui_Find("name")을 사용하여 이름으로 찾을 수 있습니다. ID 0은 테마, 토스트 메시지, 대화 상자, 카운터 등 GUI 자체입니다.
  • 부모 요소. 모든 요소는 부모 요소인 창 또는 컨테이너에 추가됩니다. 창, 메뉴 및 가격표는 부모 요소 0을 사용합니다. 탭의 경우 부모 요소는 탭 요소이며, 반환된 ID는 자식 요소를 추가하는 페이지입니다.
  • 속성. Gui_Set(id, property, text, a, b, c, d) 함수는 속성을 변경하거나 작업을 실행합니다. text 인수에는 text 값을, a~d 인수에는 숫자, 색상 및 열거형 값을 입력합니다. Gui_Get 함수는 text 값을 읽고, Gui_GetNum 함수는 숫자를 읽습니다.
  • 이벤트. 라이브러리는 사용자가 수행한 작업을 큐에 저장합니다. Gui_NextEvent를 사용하여 큐를 읽을 수 있습니다.
  • 좌표는 100% 배율의 픽셀 단위입니다. 라이브러리는 윈도우 디스플레이 배율을 자동으로 곱해줍니다.

요소가 지원하지 않는 속성을 전달해도 아무런 문제가 발생하지 않습니다. 호출은 -1을 반환하고 Experts 로그에 한 줄이 기록됩니다.

6. 당신이 가장 많이 하게 될 업무들

사용자가 입력했거나 선택한 내용을 읽으세요.

 string name=Gui_Get(edName,GUI_PROP_TEXT);
double lots=Gui_GetNum(spLots,GUI_PROP_VALUE);
int     tab =( int )Gui_GetNum(tabs,GUI_PROP_SELECTED);

탭

 int t=Gui_Add(GUI_OBJ_TABS,win, "tabs" , "" , 10 , 10 , 600 , 300 );
int pOrders =Gui_Add(GUI_OBJ_TAB,t, "" , "Orders" , 0 , 0 , 0 , 0 );     // returns the page
int pHistory=Gui_Add(GUI_OBJ_TAB,t, "" , "History" , 0 , 0 , 0 , 0 );
Gui_Add(GUI_OBJ_BUTTON,pOrders, "b1" , "Close all" , 10 , 10 , 120 , 30 );

테이블

 int tb=Gui_Add(GUI_OBJ_TABLE,page, "tbl" , "" , 10 , 10 , 600 , 300 );
Gui_Set(tb,GUI_PROP_ADD_COLUMN, "Symbol" , 120 ,GUI_ALIGN_LEFT);
Gui_Set(tb,GUI_PROP_ADD_COLUMN, "Strength" , 130 ,GUI_ALIGN_LEFT,GUI_COL_PROGRESS);
Gui_Set(tb,GUI_PROP_ADD_BUTTON_COLUMN, "Action" , 100 ,GUI_BUTTON_PRIMARY);
Gui_Set(tb,GUI_PROP_ADD_ROW, "EURUSD|64|Trade" );
Gui_Set(tb,GUI_PROP_SORT, "" , 0 , true );

버튼 셀을 클릭하면 lparam에 행 번호, dparam에 열 번호를 전달하여 GUI_EVENT_CELL_BUTTON 이벤트가 전송됩니다.

차트

 int ch=Gui_Add(GUI_OBJ_LINECHART,page, "chart" , "Price" , 10 , 10 , 500 , 260 );
int ln=Gui_Set(ch,GUI_PROP_ADD_SERIES, "Close" , clrDodgerBlue );     // returns the series index
double closes[]; CopyClose ( _Symbol , PERIOD_H1 , 0 , 100 ,closes);
Gui_SetArray(ch,GUI_PROP_SERIES,closes,ln);                       // a whole series at once

int cd=Gui_Add(GUI_OBJ_CANDLECHART,page, "cd" , _Symbol , 10 , 280 , 500 , 260 );
Gui_Set(cd,GUI_PROP_LOAD_BARS, _Symbol , 80 );
Gui_Set(cd,GUI_PROP_ADD_MA, "" , 20 , clrDodgerBlue );
Gui_Set(cd,GUI_PROP_ADD_BANDS, "" , 20 , 2.0 );

대화와 건배

 enum { CMD_CLOSE_ALL= 500 };
Gui_Set( 0 ,GUI_PROP_CONFIRM, "Close all|Close every position?|Close|Cancel" ,CMD_CLOSE_ALL);
// later, in the event loop:
if (ev==GUI_EVENT_DIALOG && Gui_GetNum(sender,GUI_PROP_CMD)==CMD_CLOSE_ALL && l== 0 )
   CloseAll();                       // l = button index, -1 = cancelled

Gui_Set( 0 ,GUI_PROP_TOAST, "Order|Filled" ,GUI_NOTICE_SUCCESS, 3000 );

테마와 색상

Gui_Set( 0 ,GUI_PROP_THEME, "" ,GUI_THEME_MIDNIGHT);   // DARK, LIGHT, MIDNIGHT, HIGHCONTRAST, SOFT
Gui_Set( 0 ,GUI_PROP_ACCENT, "" , clrOrange );
Gui_Set( 0 ,GUI_PROP_RADIUS, "" , 10 );

창과 값을 기억하세요

Gui_Set( 0 ,GUI_PROP_AUTO_LAYOUT, "" , true );   // load now, save when the GUI is destroyed
Gui_Set( 0 ,GUI_PROP_LOAD_VALUES);             // in OnInit
Gui_Set( 0 ,GUI_PROP_SAVE_VALUES);             // in OnDeinit

두 방법 모두 작은 텍스트 파일을 사용합니다. 터미널 전역 변수는 사용하지 않습니다.

매초마다 무언가를 하세요

Gui_Set( 0 ,GUI_PROP_COUNTER, "refresh" , 1000 , true );   // name, ms, repeat
// in OnTimer:
if (Gui_GetNum( 0 ,GUI_PROP_COUNTER_DONE, "refresh" )!= 0 ) RefreshNumbers();

7. 자체 주문 기능을 갖춘 거래 패널

주문 티켓, 포지션 패널, 위험 계산기는 계정과 종목 코드를 읽어 이벤트를 표시합니다. 이러한 도구들은 주문을 직접 전송하지는 않습니다. 사용자가 매수 또는 매도 버튼을 클릭했을 때 어떤 일이 발생하는지는 사용자가 결정해야 합니다.

 #include <GUI_Graphic_Library.mqh>
#ifdef __MQL5__
#include <Trade\Trade.mqh>
CTrade g_trade;
#endif
input bool InpLiveTrading = false ;   // send real orders
int g_ticket = 0 ;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
  {
   if (!Gui_Create( 0 , "GUI_TradePanel" ))
       return INIT_FAILED ;
   int w = Gui_Add(GUI_OBJ_WINDOW, 0 , "w" , "Trade" , 20 , 40 , 360 , 260 );
   Gui_Set(w, GUI_PROP_MAIN_WINDOW, "" , true );
   g_ticket = Gui_Add(GUI_OBJ_ORDERTICKET, w, "ticket" , _Symbol , 10 , 10 , 340 , 212 );
   Gui_Set(g_ticket, GUI_PROP_LOTS, "" , 0.10 );
   Gui_Set(g_ticket, GUI_PROP_STOP_POINTS, "" , 300 );
   Gui_Set(g_ticket, GUI_PROP_TP_POINTS, "" , 600 );
   Gui_Set(g_ticket, GUI_PROP_SHOW_LINES, "" , true );   // SL and TP lines on the chart
   Gui_Set( 0 , GUI_PROP_CLEAR_EVENTS);
   return INIT_SUCCEEDED ;
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void MyTrade( const bool buy, const double lots, const double sl, const double tp)
  {
   if (!InpLiveTrading)
     {
       Print ( "Trading is off. Would " , buy ? "buy " : "sell " , lots, " lots" );
       return ;
     }
#ifdef __MQL5__
   if (buy)
      g_trade.Buy(lots, _Symbol , 0.0 , sl, tp);
   else
      g_trade.Sell(lots, _Symbol , 0.0 , sl, tp);
#else
   if (buy)
       OrderSend ( _Symbol , OP_BUY, lots, Ask, 3 , sl, tp, "GUI" , 0 , 0 , clrGreen );
   else
       OrderSend ( _Symbol , OP_SELL, lots, Bid, 3 , sl, tp, "GUI" , 0 , 0 , clrRed );
#endif
   }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void ProcessEvents()
  {
   ENUM_GUI_EVENT ev;
   int sender;
   long l;
   double d;
   string s;
   while (Gui_NextEvent(ev, sender, l, d, s))
       if (ev == GUI_EVENT_TRADE)           // l: 0 buy, 1 sell   d: lots   s: "sl|tp" prices
        {
         string p[];
         StringSplit (s, '|' , p);
         double sl = ( ArraySize (p) > 0 ) ? StringToDouble (p[ 0 ]) : 0.0 ;
         double tp = ( ArraySize (p) > 1 ) ? StringToDouble (p[ 1 ]) : 0.0 ;
         MyTrade(l == 0 , d, sl, tp);
        }
  }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit ( const int r)
  {
   Gui_Destroy();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer ()
  {
   Gui_Timer();
   ProcessEvents();
   Gui_Update();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id, const long &l, const double &d, const string &s)
  {
   Gui_ChartEvent(id, l, d, s);
   ProcessEvents();
   Gui_Update();
  }

먼저 데모 계정에서 테스트해 보세요. 실제 주문을 보내기 전에, 로트 크기가 해당 종목의 최소, 최대 및 스텝과 일치하는지, 그리고 손절매 거리가 브로커의 손절매 수준과 일치하는지 확인하십시오.

위치도 같은 방식으로 작동합니다. GUI_OBJ_POSITIONS를 추가한 다음 GUI_EVENT_POSITION에 반응합니다(lparam은 티켓이고, dparam은 닫기의 경우 1, 수정의 경우 2입니다).

8. 지표에 활용하기

인디케이터는 자체 하위 창에 GUI를 그릴 수 있습니다. Gui_Create 함수에 해당 창의 번호를 전달하세요.

 #property indicator_separate_window
int OnInit ()
  {
   int sub= ChartWindowFind ();
   Gui_Create( 0 , "GUI_MyIndicator" ,sub);
   // add windows and controls as usual
   return INIT_SUCCEEDED ;
  }

지표를 사용하여 가격 차트에 그림을 그리려면 하위 창 0을 사용하십시오. 두 가지 지표 데모는 완전한 예제입니다. 프로그램과 차트당 하나의 GUI가 있으므로 각 프로그램에 고유한 GUI 이름을 지정하십시오.

9. 메타트레이더 4 및 메타트레이더 5

주제

메타트레이더 4

메타트레이더 5

라이브러리 파일

.ex4

.ex5

컨텍스트 메뉴

왼쪽 버튼을 길게 누르거나 Ctrl 키를 누른 상태에서 클릭하세요.

마우스 오른쪽 클릭

마우스 휠

터미널에서 전송되지 않습니다. 스크롤 막대를 사용하세요.

공장

시장 깊이

레벨을 직접 추가하세요

시장 관련 서적을 읽습니다.

경제 캘린더

행을 직접 추가하세요

터미널에서 로드됨

타자

내장된 미국 주요 지도

모든 키보드 레이아웃이 작동합니다.

10. 만약 어떤 것이 작동하지 않는다면

문제

어떻게 해야 할까요?

차트에 아무것도 나타나지 않습니다.

Gui_Create 함수가 true를 반환했는지 확인하고 전문가 탭의 마지막 줄을 읽으십시오.

컴파일러가 GUI_Graphic_Library.mqh 파일을 열 수 없습니다.

포함 파일이 프로그램이 설치된 데이터 폴더 내의 Include 폴더에 없습니다.

프로그램이 실행 시 라이브러리를 로드할 수 없습니다.

라이브러리에서 .ex5 또는 .ex4 파일이 없거나 파일 이름이 변경되었습니다.

코드에서 값이 변경되어도 표시되지 않습니다.

핸들러의 끝에서 Gui_Update()를 호출하세요.

전문가 탭에는 해당 속성이 지원되지 않는다고 표시됩니다.

해당 요소에는 해당 속성이 존재하지 않습니다. API 참조를 확인하십시오.

두 프로그램이 하나의 차트에서 경쟁합니다.

Gui_Create 함수에서 각각에 고유한 이름을 지정하세요.

차트 선이 GUI를 덮고 있습니다.

차트 객체를 생성한 후 Gui_BringToFront() 함수를 호출하세요.

글자 크기가 너무 작거나 너무 큽니다.

Gui_Set(0,GUI_PROP_SCALE,"",1.5)를 설정하거나 Windows 배율을 변경한 후 터미널을 다시 시작하십시오.

도서관이 무슨 일을 하고 있는지 보고 싶으신가요?

디버그 오버레이를 활성화하려면 Gui_Set(0,GUI_PROP_DEBUG,"",true)를 켜십시오.

11. 팁

  • 각 핸들러의 끝에서 Gui_Update()를 호출하세요. 그러면 변경된 부분만 다시 그려집니다.
  • 숨겨진 탭 페이지와 접힌 창은 화면 재표시를 발생시키지 않으므로 타이머를 이용한 업데이트는 비용이 저렴합니다.
  • 차트를 많이 실행하는 경우 GUI_PROP_MAX_FPS를 사용하여 프레임 속도를 제한하십시오.
  • 패널을 생성하는 동안 대기 중인 이벤트를 삭제하려면 OnInit 메서드 끝에 GUI_PROP_CLEAR_EVENTS를 사용하십시오.
  • 웹사이트의 이미지-코드 변환 도구를 사용하여 PNG 로고 또는 아이콘을 Gui_AddImage 함수에서 사용할 배열로 변환하세요.
  • 새로운 열거형 값은 마지막에만 추가되므로 이전 버전의 포함 파일을 사용하여 빌드된 프로그램은 업데이트 후에도 계속 작동합니다. 라이브러리 파일과 포함 파일을 함께 교체하십시오.

12. 다음 행선지는 어디인가요?

여러분의 의견을 환영합니다. 질문이나 개선 아이디어가 있으시면 제품 댓글에 남겨주시거나 MQL5.com에서 메시지를 보내주세요.




파일: