Files
MQL5Data/Experts/x-saherelm.test-panel.ea.mq5
T

358 lines
7.7 KiB
Plaintext

//+------------------------------------------------------------------+
//| ProjectName |
//| Copyright 2020, CompanyName |
//| http://www.companyname.net |
//+------------------------------------------------------------------+
//
// Imports ...
#include "../Classes/XCObjects/x-saherelm.x-panel.class.mq5"
#include <Trade/Trade.mqh>
//
CTrade trade;
//
string mTag;
XCPanel eaSignallingPanel;
string eaSignallingPanelName;
XCButton eaSignallingBtn;
string eaSignallingBtnName;
XCButton eaSignallingLongBtn;
string eaSignallingLongBtnName;
XCButton eaSignallingShortBtn;
string eaSignallingShortBtnName;
//
bool eaEnableLongs = true;
bool eaEnableShorts = true;
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//
mTag = "XPanel";
if (!InitialGUI())
{
return INIT_FAILED;
}
//
return (INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
DestroyGUI();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//
UpdateGUI();
}
//+------------------------------------------------------------------+
//|Chart event handling function |
//+------------------------------------------------------------------+
void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam)
{
//
// Handle Object Movement ...
eaSignallingPanel.OnEvent(id, lparam, dparam, sparam);
//
// Handle OnClick Event ...
if (id == CHARTEVENT_OBJECT_CLICK)
{
HandleOnClickEvent(sparam);
}
}
//+------------------------------------------------------------------+
/**
* Initial GUI ...
*
* @return ( bool )
*/
bool InitialGUI()
{
//
bool result = false;
//
result = InitSignallingGUI();
if (!result)
{
return result;
}
//
ChartRedraw(0);
//
return result;
}
/**
* Update GUI Content ...
*/
void UpdateGUI()
{
//
UpdateSignallingGUI();
}
/**
* Initialize State and Signalling GUI ...
*
* @return ( bool )
*/
bool InitSignallingGUI()
{
//
bool result = false;
//
eaSignallingPanelName = mTag + "SIGNALLING";
//
// Create a Panel ...
result = eaSignallingPanel.Create(
eaSignallingPanelName,
100,
100,
300,
50 //
);
if (!result)
{
return result;
}
eaSignallingPanel.Caption("Signalling");
//
// Create Activation Button ...
string eaSignallingPrefix = eaSignallingPanelName + "_State_";
//
// Signalling ...
eaSignallingBtnName = eaSignallingPrefix + "btn";
result = eaSignallingBtn.Create(
eaSignallingBtnName,
100,
120,
300,
25 //
);
if (!result)
{
return result;
}
eaSignallingBtn.SetText("");
eaSignallingPanel.Add(eaSignallingBtnName);
//
// Long Signalling ...
eaSignallingLongBtnName = eaSignallingPrefix + "_Long_btn";
result = eaSignallingLongBtn.Create(
eaSignallingLongBtnName,
100,
145,
150,
25 //
);
if (!result)
{
return result;
}
eaSignallingLongBtn.SetText("");
eaSignallingPanel.Add(eaSignallingLongBtnName);
//
// Short Signalling ...
eaSignallingShortBtnName = eaSignallingPrefix + "_Short_btn";
result = eaSignallingShortBtn.Create(
eaSignallingShortBtnName,
250,
145,
150,
25 //
);
if (!result)
{
return result;
}
eaSignallingShortBtn.SetText("");
eaSignallingPanel.Add(eaSignallingShortBtnName);
//
UpdateSignallingGUI();
//
return result;
}
/**
* Update Signalling GUI Content ...
*/
void UpdateSignallingGUI()
{
//
// Preparing State ...
bool isSignallingActive = eaEnableLongs ||
eaEnableShorts;
//
// All Signalls ...
color mSignallingBtnTextColor = isSignallingActive
? clrRed
: clrGreen;
string mSignallingBtnText = isSignallingActive
? "Deactive"
: "Active";
eaSignallingBtn.SetText(mSignallingBtnText);
eaSignallingBtn.SetColor(mSignallingBtnTextColor);
//
// Long Signals ...
color mSignallingLongBtnTextColor = eaEnableLongs
? clrRed
: clrGreen;
string mSignallingLongBtnText = eaEnableLongs
? "Deactive Longs"
: "Active Longs";
eaSignallingLongBtn.SetText(mSignallingLongBtnText);
eaSignallingLongBtn.SetColor(mSignallingLongBtnTextColor);
//
// Short Signals ...
color mSignallingShortBtnTextColor = eaEnableShorts
? clrRed
: clrGreen;
string mSignallingShortBtnText = eaEnableShorts
? "Deactive Shorts"
: "Active Shorts";
eaSignallingShortBtn.SetText(mSignallingShortBtnText);
eaSignallingShortBtn.SetColor(mSignallingShortBtnTextColor);
}
/**
* Destroy GUI ...
*/
void DestroyGUI()
{
//
eaSignallingBtnName = NULL;
eaSignallingLongBtnName = NULL;
eaSignallingShortBtnName = NULL;
//
eaSignallingPanel.Destroy();
eaSignallingBtn.Destroy();
eaSignallingLongBtn.Destroy();
eaSignallingShortBtn.Destroy();
}
/**
* Handle Object's Click Events ...
*
* @param name: Clicked Object Name
*/
void HandleOnClickEvent(string name)
{
//
if (!IsValid(name))
{
return;
}
//
// State Button ...
bool isClicked = false;
if (name == eaSignallingBtnName)
{
//
isClicked = true;
HandleChangeState();
eaSignallingBtn.SetState(false);
Print("State Button Clicked ...");
}
//
else if (name == eaSignallingLongBtnName)
{
//
isClicked = true;
HandleChangeLongsState();
eaSignallingLongBtn.SetState(false);
Print("Long State Button Clicked ...");
}
//
else if (name == eaSignallingShortBtnName)
{
//
isClicked = true;
HandleChangeShortsState();
eaSignallingShortBtn.SetState(false);
Print("Short State Button Clicked ...");
}
//
if (isClicked)
{
UpdateGUI();
}
}
//
// GUI EVENT Handlers ...
/**
* Toggle Signalling State ...
*/
void HandleChangeState()
{
//
bool isActive = eaEnableLongs ||
eaEnableShorts;
//
if (isActive)
{
//
eaEnableLongs = false;
eaEnableShorts = false;
}
else
{
//
eaEnableLongs = true;
eaEnableShorts = true;
}
}
/**
* Toggle Longs Signalling State ...
*/
void HandleChangeLongsState()
{
eaEnableLongs = !eaEnableLongs;
}
/**
* Toggle Shorts Signalling State ...
*/
void HandleChangeShortsState()
{
eaEnableShorts = !eaEnableShorts;
}
//