Welcome to Blog No 4 in this miniseries of 10 daily blogs in which I will exploit MT4GUIs functionalities.
I hope you find it both interesting as well as valuable!
Sincerely
Thommy Tikka
Ever needed a quick way to switch between pairs or periods in your MT4 chart!?
Or adjust terminal size, close terminal or chart quickly from a button!?
Check this out, you are a couple of code blocks from doing it!
// mt4gui-TerminalChartingFunctions.mq4 // Created by Thommy Tikka (thommy_tikka@hotmail.com) // Version 0.1, 20130404 // Include library file with common functions for mt4gui #include <mt4gui.mqh> // Declare global variables int hwnd = 0; int menuTerminalBtn, menuChartBtn; int controlPanelHeader, controlPanelMenuTerminal, controlPanelMenuChart; bool chartMenuOpen=false, terminalMenuOpen=false; int RChart1,RChart2,RChart3,RChart4,RChart5,RChart6,RChart7,RChart8; int RTerm1, RTerm2, RTerm3, RTerm4; int gUIXPosition, gUIYPosition; // Declare variables that are adjustable in the EA properties inputs extern string MENUPAIRS = "--- Choose menu pairs ---", MenuPair1 = "EURUSD", MenuPair2 = "USDCHF", MenuPair3 = "GBPUSD", MenuPair4 = "USDJPY"; extern string MENUPERIODS = "--- Choose menu periods ---"; extern int MenuPeriod1 = 1, //1Min MenuPeriod2 = 15, //15Min MenuPeriod3 = 60, //1Hour MenuPeriod4 = 1440; //1Day extern string GUICOLORS = "--- Color settings ---"; extern color ChartBtnColor = Red, ChartMenuColor = OrangeRed, ChartMenuColor2 = Orange, TerminalBtnColor = Blue, TerminalMenuColor = RoyalBlue; extern string GUIOFFSET = "--- Offset from borders ---"; extern int GUIXOffset = -180, GUIYOffset = 30; // MT4 function called during the module initialization //+-------------------------------------------------------------------------------------------+ int init() { hwnd = WindowHandle(Symbol(),Period()); guiRemoveAll(hwnd); // Measures chart width and height and sets default GUI X/Y-positions to top right of chart (with an offset) AutoPositionControlPanel(); // Add interface with panel and buttons to chart function call BuildInterface(); return(0); } // MT4 function called during deinitialization of the module //+-------------------------------------------------------------------------------------------+ int deinit() { // Very important to cleanup and remove all gui items from chart if (hwnd>0) guiRemoveAll(hwnd); guiCleanup(hwnd); return(0); } // MT4 function called on every MT4 tick //+-------------------------------------------------------------------------------------------+ int start() { // Call function ManageEvents on every MT4 tick ManageEvents(); } // MT4GUI functions to capture Menu & Button Events //+-------------------------------------------------------------------------------------------+ void ManageEvents() { // If menuTerminalBtn is clicked execute function OpenTerminalMenu() if (guiIsClicked(hwnd,menuTerminalBtn)) TerminalMenu(); // If chartBtn is clicked execute function OpenTerminalMenu() if (guiIsClicked(hwnd,menuChartBtn)) ChartMenu(); //If Radio chart buttons is checked change chart CheckRadioButton(); } // MT4GUI functions to build Interface with labels, buttons & textfields //+-------------------------------------------------------------------------------------------+ void BuildInterface() { // Build control panel (labels) and set look and feel for it controlPanelHeader = guiAdd(hwnd,"label",gUIXPosition,gUIYPosition,120,20," ControlPanel"); // Create control panel menu buttons, Terminal & Chart and set look and feel for them menuTerminalBtn = guiAdd(hwnd,"button",gUIXPosition,gUIYPosition+20,60,20,""); guiSetBorderColor(hwnd,menuTerminalBtn,TerminalMenuColor); guiSetBgColor(hwnd,menuTerminalBtn, TerminalBtnColor); guiSetTextColor(hwnd,menuTerminalBtn,White); guiSetText(hwnd,menuTerminalBtn,"Terminal",10,"Arial Bold"); menuChartBtn = guiAdd(hwnd,"button",gUIXPosition+60,gUIYPosition+20,60,20,""); guiSetBorderColor(hwnd,menuChartBtn,ChartMenuColor); guiSetBgColor(hwnd,menuChartBtn,ChartBtnColor); guiSetTextColor(hwnd,menuChartBtn,Black); guiSetText(hwnd,menuChartBtn,"Chart",10,"Arial Bold"); } // MT4GUI functions to change chart settings within GUI //+-------------------------------------------------------------------------------------------+ void ChartMenu() { if (chartMenuOpen) { RemoveCPMC(); } else { RemoveCPMT(); controlPanelMenuChart = guiAdd(hwnd,"label",gUIXPosition,gUIYPosition+40,120,80,""); guiSetBgColor(hwnd,controlPanelMenuChart,ChartMenuColor); chartMenuOpen=true; // Radio Buttons for chart functions RChart1 = guiAdd(hwnd,"radio",gUIXPosition,gUIYPosition+40,120,20,MenuPair1); RChart2 = guiAdd(hwnd,"radio",gUIXPosition,gUIYPosition+60,120,20,MenuPair2); RChart3 = guiAdd(hwnd,"radio",gUIXPosition,gUIYPosition+80,120,20,MenuPair3); RChart4 = guiAdd(hwnd,"radio",gUIXPosition,gUIYPosition+100,120,20,MenuPair4); RChart5 = guiAdd(hwnd,"radio",gUIXPosition,gUIYPosition+120,120,20,PeriodToText(MenuPeriod1)); RChart6 = guiAdd(hwnd,"radio",gUIXPosition,gUIYPosition+140,120,20,PeriodToText(MenuPeriod2)); RChart7 = guiAdd(hwnd,"radio",gUIXPosition,gUIYPosition+160,120,20,PeriodToText(MenuPeriod3)); RChart8 = guiAdd(hwnd,"radio",gUIXPosition,gUIYPosition+180,120,20,PeriodToText(MenuPeriod4)); // Look and feel for chart radio buttons guiSetBgColor(hwnd,RChart1,ChartMenuColor);guiSetBgColor(hwnd,RChart2,ChartMenuColor);guiSetBgColor(hwnd,RChart3,ChartMenuColor);guiSetBgColor(hwnd,RChart4,ChartMenuColor); guiSetBgColor(hwnd,RChart5,ChartMenuColor2);guiSetBgColor(hwnd,RChart6,ChartMenuColor2);guiSetBgColor(hwnd,RChart7,ChartMenuColor2);guiSetBgColor(hwnd,RChart8,ChartMenuColor2); } } // MT4GUI functions to change terminal actions within GUI //+-------------------------------------------------------------------------------------------+ void TerminalMenu() { if (terminalMenuOpen) { RemoveCPMT(); } else { RemoveCPMC(); controlPanelMenuTerminal = guiAdd(hwnd,"label",gUIXPosition,gUIYPosition+40,120,80,""); guiSetBgColor(hwnd,controlPanelMenuTerminal,TerminalMenuColor); terminalMenuOpen=true; // Radio Buttons for terminal functions RTerm1 = guiAdd(hwnd,"radio",gUIXPosition,gUIYPosition+40,120,20,"Min terminal"); RTerm2 = guiAdd(hwnd,"radio",gUIXPosition,gUIYPosition+60,120,20,"Max terminal"); RTerm3 = guiAdd(hwnd,"radio",gUIXPosition,gUIYPosition+80,120,20,"Close terminal"); RTerm4 = guiAdd(hwnd,"radio",gUIXPosition,gUIYPosition+100,120,20,"Close chart"); // Look and feel for terminal radio buttons guiSetBgColor(hwnd,RTerm1,TerminalMenuColor);guiSetBgColor(hwnd,RTerm2,TerminalMenuColor);guiSetBgColor(hwnd,RTerm3,TerminalMenuColor);guiSetBgColor(hwnd,RTerm4,TerminalMenuColor);} } // MT4GUI functions to remove controlPanelMenuTerminal //+-------------------------------------------------------------------------------------------+ void RemoveCPMC() { guiRemove(hwnd,controlPanelMenuChart); guiRemove(hwnd,RChart1);guiRemove(hwnd,RChart2);guiRemove(hwnd,RChart3);guiRemove(hwnd,RChart4); guiRemove(hwnd,RChart5);guiRemove(hwnd,RChart6);guiRemove(hwnd,RChart7);guiRemove(hwnd,RChart8); chartMenuOpen=false; } // MT4GUI functions to remove controlPanelMenuChart //+-------------------------------------------------------------------------------------------+ void RemoveCPMT() { guiRemove(hwnd,controlPanelMenuTerminal); guiRemove(hwnd,RTerm1);guiRemove(hwnd,RTerm2);guiRemove(hwnd,RTerm3);guiRemove(hwnd,RTerm4); terminalMenuOpen=false; } // MT4GUI functions check radio buttons and change chart pair/period or execute terminal function //+-------------------------------------------------------------------------------------------+ void CheckRadioButton() { string tempdel = CharToStr(8)+CharToStr(8)+CharToStr(8)+CharToStr(8)+CharToStr(8)+CharToStr(8)+CharToStr(8)+CharToStr(8)+CharToStr(8)+CharToStr(8)+CharToStr(8)+CharToStr(8); if (guiIsChecked(hwnd, RChart1) && Symbol()!=MenuPair1) {guiChangeSymbol(hwnd, tempdel+MenuPair1); RemoveCPMC();} if (guiIsChecked(hwnd, RChart2) && Symbol()!=MenuPair2) {guiChangeSymbol(hwnd, tempdel+MenuPair2); RemoveCPMC();} if (guiIsChecked(hwnd, RChart3) && Symbol()!=MenuPair3) {guiChangeSymbol(hwnd, tempdel+MenuPair3); RemoveCPMC();} if (guiIsChecked(hwnd, RChart4) && Symbol()!=MenuPair4) {guiChangeSymbol(hwnd, tempdel+MenuPair4); RemoveCPMC();} if (guiIsChecked(hwnd, RChart5) && Period()!=MenuPeriod1) {guiChangeSymbol(hwnd, tempdel+Symbol()+","+MenuPeriod1); RemoveCPMC();} if (guiIsChecked(hwnd, RChart6) && Period()!=MenuPeriod2) {guiChangeSymbol(hwnd, tempdel+Symbol()+","+MenuPeriod2); RemoveCPMC();} if (guiIsChecked(hwnd, RChart7) && Period()!=MenuPeriod3) {guiChangeSymbol(hwnd, tempdel+Symbol()+","+MenuPeriod3); RemoveCPMC();} if (guiIsChecked(hwnd, RChart8) && Period()!=MenuPeriod4) {guiChangeSymbol(hwnd, tempdel+Symbol()+","+MenuPeriod4); RemoveCPMC();} //If Radio terminal buttons is checked call terminal function if (guiIsChecked(hwnd, RTerm1)) {guiMinimizeTerminal(); RemoveCPMT();} //Minimize terminal if (guiIsChecked(hwnd, RTerm2)) {guiMaximizeTerminal(); RemoveCPMT();} //Maximize terminal if (guiIsChecked(hwnd, RTerm3)) {guiCloseTerminal(); RemoveCPMT();} //Close terminal if (guiIsChecked(hwnd, RTerm4)) {guiCloseChart(hwnd); RemoveCPMT();} //Close chart } // MT4GUI Function for getting Chart Width and postition X/Y for ControlPanel (GUI) //+-------------------------------------------------------------------------------------------+ void AutoPositionControlPanel() { gUIXPosition = guiGetChartWidth(hwnd)+GUIXOffset; gUIYPosition = GUIYOffset; } // MT4/MQL4 Function to convert period number to text string //+-------------------------------------------------------------------------------------------+ string PeriodToText(int period) { switch (period) { case 1: return("M1"); break; case 5: return("M5"); break; case 15: return("M15"); break; case 30: return("M30"); break; case 60: return("H1"); break; case 240: return("H4"); break; case 1440: return("D1"); break; case 10080: return("W1"); break; case 43200: return("MN1"); break; } }
Thats all folks!
Tomorrow I will show you several ways to use links in MT4, with MT4GUI.
You must be logged in to post a comment.