remove test panel ea ...
This commit is contained in:
@@ -0,0 +1,696 @@
|
||||
//+------------------------------------------------------------------+
|
||||
//| 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;
|
||||
|
||||
//
|
||||
// SIGNALLING GUI ...
|
||||
XCPanel eaSignallingPanel;
|
||||
string eaSignallingPanelName;
|
||||
XCButton eaSignallingBtn;
|
||||
string eaSignallingBtnName;
|
||||
XCButton eaSignallingLongBtn;
|
||||
string eaSignallingLongBtnName;
|
||||
XCButton eaSignallingShortBtn;
|
||||
string eaSignallingShortBtnName;
|
||||
|
||||
//
|
||||
// PROTECTOR GUI ...
|
||||
XCPanel eaProtectorPanel;
|
||||
string eaProtectorPanelName;
|
||||
XCButton eaHedgingBtn;
|
||||
string eaHedgingBtnName;
|
||||
XCButton eaTraillingBtn;
|
||||
string eaTraillingBtnName;
|
||||
XCButton eaFreezingBtn;
|
||||
string eaFreezingBtnName;
|
||||
XCButton eaSupportingBtn;
|
||||
string eaSupportingBtnName;
|
||||
|
||||
//
|
||||
bool eaEnableLongs = true;
|
||||
bool eaEnableShorts = true;
|
||||
|
||||
//
|
||||
bool mAllowHedge = true; // Allow Protector to Hedge Positions
|
||||
double eaHedgeMinVolumeStep = 0.01; // Minimum Volume Step For Hedge
|
||||
int eaMinimumOpenPositionsForHEHedge = 2; // Minimum Open Positions For HE Hedge
|
||||
double eaHedgeHEMinProfitPerVolumeStep = 1; // Minimum Required Profit For HE Hedge Per Volume Step
|
||||
double eaHedgeBEMinProfitPerVolumeStep = 0.5; // Minimum Required Profit For BE Hedge Per Volume Step
|
||||
|
||||
//
|
||||
bool mAllowTrail = true; // Allow Trail Stop for Positions
|
||||
double eaTrailStartDistance = 35; // Specify Trail Start in Point
|
||||
double eaTrailStep = 10; // Trail Step in Point
|
||||
|
||||
//
|
||||
bool mllowFreeze = false; // Allow Freezing
|
||||
double eaFreezeVolumeMultiplier = 3; // Specify Freeze Volume Multiplier
|
||||
double eaFreezeDistance = 100; // Specify Freeze Start Drawdown in Point
|
||||
|
||||
//
|
||||
bool mAllowSupport = false; // Allow Support
|
||||
double eaSupportStartDistance = 0; // Specify Start Support Drawdown in Point
|
||||
double eaSupportVolumeMultiplier = 1; // Specify Support Volume Multiplier
|
||||
|
||||
//+------------------------------------------------------------------+
|
||||
//| 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 ...
|
||||
eaProtectorPanel.OnEvent(id, lparam, dparam, sparam);
|
||||
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;
|
||||
}
|
||||
|
||||
//
|
||||
result = InitialProtectorGUI();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
ChartRedraw(0);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update GUI Content ...
|
||||
*/
|
||||
void UpdateGUI()
|
||||
{
|
||||
//
|
||||
UpdateSignallingGUI();
|
||||
UpdateProtectorGUI();
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy GUI ...
|
||||
*/
|
||||
void DestroyGUI()
|
||||
{
|
||||
//
|
||||
DestroySignallingGUI();
|
||||
DestroyProtectorGUI();
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle Object's Click Events ...
|
||||
*
|
||||
* @param name: Clicked Object Name
|
||||
*/
|
||||
void HandleOnClickEvent(string name)
|
||||
{
|
||||
//
|
||||
if (!IsValid(name))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
bool isClicked = false;
|
||||
|
||||
//
|
||||
// Signalling State Button ...
|
||||
if (name == eaSignallingBtnName)
|
||||
{
|
||||
//
|
||||
isClicked = true;
|
||||
HandleChangeState();
|
||||
eaSignallingBtn.SetState(false);
|
||||
Print("State Button Clicked ...");
|
||||
}
|
||||
//
|
||||
// Long Signalling State ...
|
||||
else if (name == eaSignallingLongBtnName)
|
||||
{
|
||||
//
|
||||
isClicked = true;
|
||||
HandleChangeLongsState();
|
||||
eaSignallingLongBtn.SetState(false);
|
||||
Print("Long State Button Clicked ...");
|
||||
}
|
||||
//
|
||||
// Short Signalling State ...
|
||||
else if (name == eaSignallingShortBtnName)
|
||||
{
|
||||
//
|
||||
isClicked = true;
|
||||
HandleChangeShortsState();
|
||||
eaSignallingShortBtn.SetState(false);
|
||||
Print("Short State Button Clicked ...");
|
||||
}
|
||||
//
|
||||
// Hedging State Button ...
|
||||
else if (name == eaHedgingBtnName)
|
||||
{
|
||||
//
|
||||
isClicked = true;
|
||||
HandleChangeHedgingState();
|
||||
eaHedgingBtn.SetState(false);
|
||||
Print("Hedging State Button Clicked ...");
|
||||
}
|
||||
//
|
||||
// Trailling State Button ...
|
||||
else if (name == eaTraillingBtnName)
|
||||
{
|
||||
//
|
||||
isClicked = true;
|
||||
HandleChangeTraillingState();
|
||||
eaTraillingBtn.SetState(false);
|
||||
Print("Trailling State Button Clicked ...");
|
||||
}
|
||||
//
|
||||
// Freezing State Button ...
|
||||
else if (name == eaFreezingBtnName)
|
||||
{
|
||||
//
|
||||
isClicked = true;
|
||||
HandleChangeFreezingState();
|
||||
eaFreezingBtn.SetState(false);
|
||||
Print("Freezing State Button Clicked ...");
|
||||
}
|
||||
//
|
||||
// Supporting State Button ...
|
||||
else if (name == eaSupportingBtnName)
|
||||
{
|
||||
//
|
||||
isClicked = true;
|
||||
HandleChangeSupportingState();
|
||||
eaSupportingBtn.SetState(false);
|
||||
Print("Supporting State Button Clicked ...");
|
||||
}
|
||||
|
||||
//
|
||||
if (isClicked)
|
||||
{
|
||||
UpdateGUI();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// SIGNALLING GUI ...
|
||||
|
||||
/**
|
||||
* Initialize State and Signalling GUI ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool InitSignallingGUI()
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
eaSignallingPanelName = mTag + "SIGNALLING";
|
||||
|
||||
//
|
||||
// Create a Panel ...
|
||||
result = eaSignallingPanel.Create(
|
||||
eaSignallingPanelName,
|
||||
10,
|
||||
40,
|
||||
300,
|
||||
50 //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
eaSignallingPanel.Caption("Signalling");
|
||||
|
||||
//
|
||||
// Create Activation Button ...
|
||||
string eaSignallingPrefix = eaSignallingPanelName + "_";
|
||||
|
||||
//
|
||||
// Signalling ...
|
||||
eaSignallingBtnName = eaSignallingPrefix + "btn";
|
||||
result = eaSignallingBtn.Create(
|
||||
eaSignallingBtnName,
|
||||
10,
|
||||
60,
|
||||
300,
|
||||
25 //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
eaSignallingBtn.SetText("");
|
||||
eaSignallingPanel.Add(eaSignallingBtnName);
|
||||
|
||||
//
|
||||
// Long Signalling ...
|
||||
eaSignallingLongBtnName = eaSignallingPrefix + "_Long_btn";
|
||||
result = eaSignallingLongBtn.Create(
|
||||
eaSignallingLongBtnName,
|
||||
10,
|
||||
85,
|
||||
150,
|
||||
25 //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
eaSignallingLongBtn.SetText("");
|
||||
eaSignallingPanel.Add(eaSignallingLongBtnName);
|
||||
|
||||
//
|
||||
// Short Signalling ...
|
||||
eaSignallingShortBtnName = eaSignallingPrefix + "_Short_btn";
|
||||
result = eaSignallingShortBtn.Create(
|
||||
eaSignallingShortBtnName,
|
||||
160,
|
||||
85,
|
||||
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 Signalling GUI ...
|
||||
*/
|
||||
void DestroySignallingGUI()
|
||||
{
|
||||
//
|
||||
eaSignallingBtnName = NULL;
|
||||
eaSignallingLongBtnName = NULL;
|
||||
eaSignallingShortBtnName = NULL;
|
||||
|
||||
//
|
||||
eaSignallingPanel.Destroy();
|
||||
eaSignallingBtn.Destroy();
|
||||
eaSignallingLongBtn.Destroy();
|
||||
eaSignallingShortBtn.Destroy();
|
||||
}
|
||||
|
||||
//
|
||||
// PROTECTOR GUI ...
|
||||
|
||||
/**
|
||||
* Initial Protector GUI ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool InitialProtectorGUI()
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
eaProtectorPanelName = mTag + "PROTECTOR";
|
||||
|
||||
//
|
||||
// Create a Panel ...
|
||||
result = eaProtectorPanel.Create(
|
||||
eaProtectorPanelName,
|
||||
10,
|
||||
110,
|
||||
300,
|
||||
100 //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
eaProtectorPanel.Caption("Protector");
|
||||
|
||||
//
|
||||
string eaProtectorPrefix = eaProtectorPanelName + "_";
|
||||
|
||||
//
|
||||
// Hedging ...
|
||||
eaHedgingBtnName = eaProtectorPrefix + "HEDGING_btn";
|
||||
result = eaHedgingBtn.Create(
|
||||
eaHedgingBtnName,
|
||||
10,
|
||||
130,
|
||||
300,
|
||||
25 //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
eaHedgingBtn.SetText("");
|
||||
eaProtectorPanel.Add(eaHedgingBtnName);
|
||||
|
||||
//
|
||||
// Trailling ...
|
||||
eaTraillingBtnName = eaProtectorPrefix + "TRAILLING_btn";
|
||||
result = eaTraillingBtn.Create(
|
||||
eaTraillingBtnName,
|
||||
10,
|
||||
155,
|
||||
300,
|
||||
25 //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
eaTraillingBtn.SetText("");
|
||||
eaProtectorPanel.Add(eaTraillingBtnName);
|
||||
|
||||
//
|
||||
// Freezing ...
|
||||
eaFreezingBtnName = eaProtectorPrefix + "FREEZING_btn";
|
||||
result = eaFreezingBtn.Create(
|
||||
eaFreezingBtnName,
|
||||
10,
|
||||
180,
|
||||
300,
|
||||
25 //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
eaFreezingBtn.SetText("");
|
||||
eaProtectorPanel.Add(eaFreezingBtnName);
|
||||
|
||||
//
|
||||
// Supporting ...
|
||||
eaSupportingBtnName = eaProtectorPrefix + "SUPPORTING_btn";
|
||||
result = eaSupportingBtn.Create(
|
||||
eaSupportingBtnName,
|
||||
10,
|
||||
205,
|
||||
300,
|
||||
25 //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
eaSupportingBtn.SetText("");
|
||||
eaProtectorPanel.Add(eaSupportingBtnName);
|
||||
|
||||
//
|
||||
UpdateProtectorGUI();
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update Signalling GUI Content ...
|
||||
*/
|
||||
void UpdateProtectorGUI()
|
||||
{
|
||||
//
|
||||
// Hedging ...
|
||||
bool isHedgingEnabled =
|
||||
mAllowHedge &&
|
||||
eaHedgeMinVolumeStep > 0 &&
|
||||
(eaHedgeHEMinProfitPerVolumeStep > 0 ||
|
||||
eaHedgeBEMinProfitPerVolumeStep > 0) &&
|
||||
eaMinimumOpenPositionsForHEHedge >= 0;
|
||||
|
||||
//
|
||||
color eaHedgingBtnTextColor = isHedgingEnabled
|
||||
? clrRed
|
||||
: clrGreen;
|
||||
string eaHedgingBtnText = isHedgingEnabled
|
||||
? "Deactive Hedging"
|
||||
: "Active Hedging";
|
||||
eaHedgingBtn.SetText(eaHedgingBtnText);
|
||||
eaHedgingBtn.SetColor(eaHedgingBtnTextColor);
|
||||
|
||||
//
|
||||
// Trailling ...
|
||||
bool isTraillingEnabled =
|
||||
mAllowTrail &&
|
||||
eaTrailStep > 0 &&
|
||||
eaTrailStartDistance >= 0;
|
||||
|
||||
//
|
||||
color eaTraillingBtnColor = isTraillingEnabled
|
||||
? clrRed
|
||||
: clrGreen;
|
||||
string eaTraillingBtnText = isTraillingEnabled
|
||||
? "Deactive Trailling"
|
||||
: "Active Trailling";
|
||||
eaTraillingBtn.SetText(eaTraillingBtnText);
|
||||
eaTraillingBtn.SetColor(eaTraillingBtnColor);
|
||||
|
||||
//
|
||||
// Freezing ...
|
||||
bool isFreezingEnabled =
|
||||
mllowFreeze &&
|
||||
eaFreezeDistance > 0 &&
|
||||
eaFreezeVolumeMultiplier > 0;
|
||||
|
||||
//
|
||||
color eaFreezingBtnColor = isFreezingEnabled
|
||||
? clrRed
|
||||
: clrGreen;
|
||||
string eaFreezingBtnText = isFreezingEnabled
|
||||
? "Deactive Freezing"
|
||||
: "Active Freezing";
|
||||
eaFreezingBtn.SetText(eaFreezingBtnText);
|
||||
eaFreezingBtn.SetColor(eaFreezingBtnColor);
|
||||
|
||||
//
|
||||
// Supporting ...
|
||||
bool isSupportingEnabled =
|
||||
!isFreezingEnabled &&
|
||||
mAllowSupport &&
|
||||
eaSupportStartDistance > 0 &&
|
||||
eaSupportVolumeMultiplier > 0;
|
||||
|
||||
//
|
||||
color eaSupportingBtnColor = isSupportingEnabled
|
||||
? clrRed
|
||||
: clrGreen;
|
||||
string eaSupportingBtnText = isSupportingEnabled
|
||||
? "Deactive Supporting"
|
||||
: "Active Supporting";
|
||||
eaSupportingBtn.SetText(eaSupportingBtnText);
|
||||
eaSupportingBtn.SetColor(eaSupportingBtnColor);
|
||||
}
|
||||
|
||||
/**
|
||||
* Destroy Protector GUI ...
|
||||
*/
|
||||
void DestroyProtectorGUI()
|
||||
{
|
||||
//
|
||||
eaHedgingBtnName = NULL;
|
||||
eaFreezingBtnName = NULL;
|
||||
eaTraillingBtnName = NULL;
|
||||
eaSupportingBtnName = NULL;
|
||||
eaProtectorPanelName = NULL;
|
||||
|
||||
//
|
||||
eaHedgingBtn.Destroy();
|
||||
eaFreezingBtn.Destroy();
|
||||
eaTraillingBtn.Destroy();
|
||||
eaSupportingBtn.Destroy();
|
||||
eaProtectorPanel.Destroy();
|
||||
}
|
||||
|
||||
//
|
||||
// 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;
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggle Hedging State ...
|
||||
*/
|
||||
void HandleChangeHedgingState()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Toggle Trailling State ...
|
||||
*/
|
||||
void HandleChangeTraillingState()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Toogle Freezing State ...
|
||||
*/
|
||||
void HandleChangeFreezingState()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Toogle Supporting State ...
|
||||
*/
|
||||
void HandleChangeSupportingState()
|
||||
{
|
||||
}
|
||||
|
||||
//
|
||||
Reference in New Issue
Block a user