last works on XOSCS ...

This commit is contained in:
2025-04-13 02:35:47 +03:30
parent 60a67628b7
commit d1ab32ffb8
7 changed files with 4531 additions and 289 deletions
+448 -1
View File
@@ -62,4 +62,451 @@ XCAlert *eaAlert;
XCTrade *eaTrade;
//
XCX121XSTRHelper *strHelper;
XSignal eaSignal;
XCXSTRCCISignaller *eaSignaller;
XSTRCCIStrategyConditions eaConditions;
//
int eaMaxAllowedPositions = 5;
double eaMaxAllowedSpread = 25;
double eaMaxAllowedDrawdownFactor = 0.3;
//
string eaTag = "";
//
// Event Handlers ...
//
// Initialization ...
int OnInit()
{
//
// Validate Inputs and Required Parameters
// for EA to Works fine ...
if (!ValidateInputs())
{
return INIT_PARAMETERS_INCORRECT;
}
//
// Initialize Timer ...
if (!InitTimer())
{
return INIT_FAILED;
}
//
// Initial Requirements ...
InitRequirements();
//
// Init Succeed ...
return INIT_SUCCEEDED;
}
//
// DeInitialization ...
void OnDeinit(const int reason)
{
//
// REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function
// REASON_REMOVE 1 Program removed from a chart
// REASON_RECOMPILE 2 Program recompiled
// REASON_CHARTCHANGE 3 A symbol or a chart period is changed
// REASON_CHARTCLOSE 4 Chart closed
// REASON_PARAMETERS 5 Inputs changed by a user
// REASON_ACCOUNT 6 Another account has been activated or reconnection to the trade server has occurred due to changes in the account settings
// REASON_TEMPLATE 7 Another chart template applied
// REASON_INITFAILED 8 The OnInit() handler returned a non-zero value
// REASON_CLOSE 9 Terminal closed
//
// Destroy Timer ...
}
//
// On Tick Handler ...
void OnTick()
{
//
int idx = -1;
int count = 0;
bool has = false;
//
eaSignal.Clean();
eaConditions.Clean();
//
double sl = 0;
double tp = 0;
double r2r = 5;
double risk = 0;
double entry = 0;
double reward = 0;
double volume = 0.01;
string provider = "XSTRCCI";
ENUM_POSITION_TYPE type = POSITION_TYPE_BUY;
ENUM_X_ORDER_MODES mode = X_ORDER_MODE_MARKET;
//
bool hasLong = false;
bool hasShort = false;
//
double selectedSL = 0;
//
// Start Calculations ...
//
// Retrieve Common Data ...
string symbol = eaSignaller.GetSymbol();
ENUM_TIMEFRAMES period = eaSignaller.GetPeriod();
//
datetime cTime = TimeCurrent();
//
// Required Value For SL/TP Calculations ...
double points = GetPoints(symbol);
double pip = GetPipPrice(symbol);
double pip2 = 2 * pip;
//
has = eaSignaller.DetectSignalSetup(
r2r,
300 // Max Allowed SL Distance ...
);
if (has)
{
//
count = eaSignaller
.AddConditionsIfNotExists();
//
eaSignaller.mConditions.Clean();
}
//
// Check Setuped Conditions Exists ...
count = ArraySize(eaSignaller.mConditionsCollection);
has = IsValidSize(count);
if (!has)
{
return;
}
//
for (int i = 0; i < count; i++)
{
//
has = eaSignaller
.DetectSignalTrigger(eaSignaller
.mConditionsCollection[i]);
//
if (has)
{
//
idx = i;
eaConditions = eaSignaller.mConditionsCollection[i];
break;
}
}
//
has = IsValidIndex(idx);
if (has)
{
//
ArrayRemove(
eaSignaller.mConditionsCollection,
idx,
1 //
);
}
//
// Check EA Conditions is Valid or not ...
has = eaConditions.IsSetuped() &&
eaConditions.CanTrigger();
if (!has)
{
//
eaConditions.Clean();
return;
}
//
// Checking Trigger Direction ...
hasLong = eaConditions.HasBullishSignal();
hasShort = eaConditions.HasBearishSignal();
has = hasLong ||
hasShort;
if (!has)
{
//
eaConditions.Clean();
return;
}
//
// Preparing Signal ...
//
eaSignal.sl = sl;
eaSignal.tp = tp;
eaSignal.type = type;
eaSignal.mode = mode;
eaSignal.entry = entry;
eaSignal.volume = volume;
eaSignal.symbol = symbol;
eaSignal.period = period;
eaSignal.provider = provider;
eaSignal.time = TimeCurrent();
//
Copy(
eaConditions.targets,
eaSignal.targets //
);
//
has = eaSignal.IsValid();
if (!has)
{
//
eaSignal.Clean();
eaConditions.Clean();
return;
}
//
// Draw Signal ...
//
// Execute Signal ...
//
Print("Execute Signal ...");
//
eaSignal.Clean();
eaConditions.Clean();
}
//
// Handle On Trade Event ...
void OnTrade()
{
}
//
// On Timer ...
void OnTimer()
{
}
//
// Chart Event Handler ...
void OnChartEvent(
const int id,
const long &lparam,
const double &dparam,
const string &sparam //
)
{
}
//
// Event Listeners ...
/**
* Handle StopLoss Triggered Positions ...
*
* @param deal: XDeal instance ...
*/
void OnStopLossTriggered(const XDeal &deal)
{
}
/**
* Handle Take Profit Triggered Positions ...
*
* @param deal: XDeal instance ...
*/
void OnTakeProfitTriggered(const XDeal &deal)
{
}
/**
* Handle Force Close a Position ...
*
* @param ticket: ULONG ...
* @param position: XPosition instance ...
* @param comment: String ...
*/
void OnPositionForceClosed(
const ulong ticket,
const XPosition &position,
const string comment //
)
{
}
/**
* Handle Deals Changes ...
*
* @param count: Integer, Number of Changes ...
*/
void OnDealsChanged(int count)
{
}
/**
* Handle Orders Changes ...
*
* @param count: Integer, Number of Changes ...
*/
void OnOrdersChanged(int count)
{
}
/**
* Handle Positions Changes ...
*
* @param count: Integer, Number of Changes ...
*/
void OnPositionsChanged(int count)
{
}
//
// Custom Functions ...
/**
* Validate all Inputs of Expert Adviser ...
*
* @return ( bool )
*/
bool ValidateInputs()
{
//
bool result = false;
//
string errMessage = "";
//
bool isCommonValid = (
//
eaSlippage > 0 &&
eaMagicNumber > 0
//
);
if (!isCommonValid)
{
//
errMessage += "common configurations error;" + "\n";
}
//
result =
//
// Common ...
isCommonValid &&
//
// Otere ...
true
//
;
//
if (!result)
{
//
// Since here Logger not Initiallized, we Use Raw Print Command ...
Print(ShortName + " Errors: \n", errMessage);
}
//
return result;
}
/**
* Initialize Timer ...
*
* @return ( bool )
*/
bool InitTimer()
{
//
bool result = false;
//
// TODO: Initialize Timer if necessary ...
// result = EventSetTimer(1);
// result = EventSetMillisecondTimer(100);
result = true;
//
return result;
}
/**
* Destroy Timer ...
*/
void DestroyTimer()
{
//
// TODO: Use This ...
// EventKillTimer();
}
/**
* Initial Requirements of EA ...
*
*/
void InitRequirements()
{
//
// Preparing Tags ...
eaTag =
(IsValid(eaLogSuffix)
? eaLogSuffix + "_"
: "") +
ShortName;
//
// EA Alert ...
eaAlert = new XCAlert(
eaTag,
eaEnableAlerts,
eaLogAlerts,
eaTerminalAlerts,
eaMailAlerts,
eaPushAlerts //
);
//
// EA Trade ...
eaTrade = new XCTrade(
eaSlippage,
eaMagicNumber,
eaMaxAllowedSpread,
eaMaxAllowedPositions,
eaMaxAllowedDrawdownFactor //
);
//
// EA Signaller ...
eaSignaller = new XCXSTRCCISignaller(
_Symbol,
_Period //
);
//
}
//