358 lines
7.7 KiB
Plaintext
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;
|
|
}
|
|
|
|
// |