last ...
This commit is contained in:
+172
-47
@@ -38,6 +38,27 @@ input group "Common";
|
||||
input long eaMagicNumber = 78692110; // Magic Number
|
||||
input int eaSlippage = 10; // Slippgae
|
||||
input string eaLogSuffix = ""; // Log Suffix
|
||||
input ENUM_TIMEFRAMES eaAnalysisPeriod = PERIOD_H1; // Analysis Period
|
||||
|
||||
//
|
||||
// Symbols ...
|
||||
//
|
||||
// -------------------------------------------------------
|
||||
// eaSymbols:
|
||||
// ----------
|
||||
// - if EMPTY use Current Symbol;
|
||||
// - for Multi Symbol use Comma Separated Symbols:
|
||||
// EURUSDb,XAUUSDb
|
||||
//
|
||||
// eaSymbolSessions:
|
||||
// ------------------
|
||||
// - if EMPTY use WHOLE Times;
|
||||
// - for each Symbol use Comma Separated:
|
||||
// (Name,[hh:mm],[hh:mm]),
|
||||
// -------------------------------------------------------
|
||||
input group "Symbols";
|
||||
input string eaSymbols = "EURUSDb,XAUUSDb"; // Symbols Description
|
||||
input string eaSymbolSessions = "()"; // Symbols Sessions
|
||||
|
||||
//
|
||||
// Volume ...
|
||||
@@ -60,8 +81,6 @@ input ENUM_XCAEA_TRADE_RESTRICTION_PERIOD eaRestrictionsPeriod = XCAEA_TRADE_RES
|
||||
input int eaMaxAllowedTPs = 2; // Max Allowed TP(s) per Day
|
||||
input int eaMaxAllowedSLs = 2; // Max Allowed SL(s) per Day
|
||||
input int eaMaxAllowedTrades = 3; // Max Allowed Trades per Day
|
||||
input string eaSessionStartTime = ""; // Trade Start Time
|
||||
input string eaSessionEndTime = ""; // Trade End Time
|
||||
input int eaMaxAllowedPositions = 5; // Max Allowed Same Time Trades
|
||||
input double eaMaxAllowedSpread = 25; // Max Allowed Spread For Trade
|
||||
input double eaMaxAllowedDrawdownFactor = 0.3; // Max Allowed DrawDown for Trade
|
||||
@@ -97,7 +116,7 @@ XCTrade *eaTrade;
|
||||
XSignal eaSignal;
|
||||
XCVolume *eaVolume;
|
||||
XTimeTracker eaTimeTracker;
|
||||
XCXCAEASignaller *eaSignaller;
|
||||
XCXCAEASignaller *eaSignallers[];
|
||||
XCXCAEATradeManager *eaTradeManager;
|
||||
XCAEAStrategyConditions eaConditions;
|
||||
|
||||
@@ -159,19 +178,27 @@ void OnDeinit(const int reason)
|
||||
// REASON_CLOSE 9 Terminal closed
|
||||
|
||||
//
|
||||
eaSignaller.DeInit();
|
||||
|
||||
//
|
||||
ZeroMemory(eaAlert);
|
||||
ZeroMemory(eaTrade);
|
||||
ZeroMemory(eaVolume);
|
||||
ZeroMemory(eaSignaller);
|
||||
|
||||
//
|
||||
eaSignal.Clean();
|
||||
eaConditions.Clean();
|
||||
eaTimeTracker.Clean();
|
||||
|
||||
//
|
||||
int count = ArraySize(eaSignallers);
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
eaSignallers[i].DeInit();
|
||||
ZeroMemory(eaSignallers[i]);
|
||||
}
|
||||
Clean(eaSignallers);
|
||||
|
||||
//
|
||||
DestroyTimer();
|
||||
}
|
||||
@@ -199,6 +226,7 @@ void OnTick()
|
||||
//
|
||||
double r2r = 4;
|
||||
string provider = "XCAEA";
|
||||
datetime cTime = TimeCurrent();
|
||||
ENUM_POSITION_TYPE type = POSITION_TYPE_BUY;
|
||||
ENUM_X_ORDER_MODES mode = X_ORDER_MODE_MARKET;
|
||||
|
||||
@@ -206,16 +234,25 @@ void OnTick()
|
||||
bool hasLong = false;
|
||||
bool hasShort = false;
|
||||
|
||||
//
|
||||
// Checking Signallers ...
|
||||
has = HasChild(eaSignallers);
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
int signallersCount = ArraySize(eaSignallers);
|
||||
for (int is = 0; is < signallersCount; is++)
|
||||
{
|
||||
//
|
||||
// Start Calculations ...
|
||||
|
||||
//
|
||||
// Retrieve Common Data ...
|
||||
string symbol = eaSignaller.GetSymbol();
|
||||
ENUM_TIMEFRAMES period = eaSignaller.GetPeriod();
|
||||
|
||||
//
|
||||
datetime cTime = TimeCurrent();
|
||||
string symbol = eaSignallers[is].GetSymbol();
|
||||
ENUM_TIMEFRAMES period = eaSignallers[is].GetPeriod();
|
||||
|
||||
//
|
||||
// Required Value For SL/TP Calculations ...
|
||||
@@ -224,35 +261,39 @@ void OnTick()
|
||||
double pip2 = 2 * pip;
|
||||
|
||||
//
|
||||
has = eaSignaller.DetectSignalSetup(
|
||||
// Detect Signal Setups ...
|
||||
has = eaSignallers[is].DetectSignalSetup(
|
||||
r2r,
|
||||
300 // Max Allowed SL Distance ...
|
||||
);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
count = eaSignaller
|
||||
count = eaSignallers[is]
|
||||
.AddConditionsIfNotExists();
|
||||
|
||||
//
|
||||
eaSignaller.mConditions.Clean();
|
||||
eaSignallers[is].mConditions.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
// Check Setuped Conditions Exists ...
|
||||
count = ArraySize(eaSignaller.mConditionsCollection);
|
||||
count = ArraySize(eaSignallers[is].mConditionsCollection);
|
||||
has = IsValidSize(count);
|
||||
if (!has)
|
||||
{
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
// Loop through Setuped Conditions for
|
||||
// Validating or Looking up Triggers ...
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
has = eaSignaller
|
||||
.DetectSignalTrigger(eaSignaller
|
||||
// Check Signal Triggered or not ...
|
||||
has = eaSignallers[is]
|
||||
.DetectSignalTrigger(eaSignallers[is]
|
||||
.mConditionsCollection[i]);
|
||||
|
||||
//
|
||||
@@ -261,14 +302,14 @@ void OnTick()
|
||||
{
|
||||
//
|
||||
idx = i;
|
||||
eaConditions = eaSignaller.mConditionsCollection[i];
|
||||
eaConditions = eaSignallers[is].mConditionsCollection[i];
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
// Check Condition Validation ...
|
||||
has = eaSignaller.mConditionsCollection[i].IsValid() &&
|
||||
eaSignaller.mConditionsCollection[i].IsSetuped();
|
||||
has = eaSignallers[is].mConditionsCollection[i].IsValid() &&
|
||||
eaSignallers[is].mConditionsCollection[i].IsSetuped();
|
||||
if (!has)
|
||||
{
|
||||
idx = i;
|
||||
@@ -282,7 +323,7 @@ void OnTick()
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
eaSignaller.mConditionsCollection,
|
||||
eaSignallers[is].mConditionsCollection,
|
||||
idx,
|
||||
1 //
|
||||
);
|
||||
@@ -295,8 +336,11 @@ void OnTick()
|
||||
if (!has)
|
||||
{
|
||||
//
|
||||
eaSignal.Clean();
|
||||
eaConditions.Clean();
|
||||
return;
|
||||
|
||||
//
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
@@ -313,7 +357,7 @@ void OnTick()
|
||||
eaConditions.Clean();
|
||||
|
||||
//
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
@@ -329,12 +373,11 @@ void OnTick()
|
||||
eaConditions.Clean();
|
||||
|
||||
//
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
// Preparing Signal ...
|
||||
//
|
||||
eaSignal.mode = mode;
|
||||
eaSignal.type = type;
|
||||
eaSignal.entry = GetEntry(
|
||||
@@ -358,13 +401,16 @@ void OnTick()
|
||||
);
|
||||
|
||||
//
|
||||
// Validate Signal ...
|
||||
has = eaSignal.IsValid();
|
||||
if (!has)
|
||||
{
|
||||
//
|
||||
eaSignal.Clean();
|
||||
eaConditions.Clean();
|
||||
return;
|
||||
|
||||
//
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
@@ -376,14 +422,8 @@ void OnTick()
|
||||
eaSignal.volume = iVolume;
|
||||
}
|
||||
|
||||
//
|
||||
// Draw Signal ...
|
||||
|
||||
//
|
||||
// Execute Signal ...
|
||||
|
||||
//
|
||||
// eaSignal.sl = 0;
|
||||
has = eaTradeManager.Execute(
|
||||
eaSignal,
|
||||
eaConditions //
|
||||
@@ -392,6 +432,7 @@ void OnTick()
|
||||
//
|
||||
eaSignal.Clean();
|
||||
eaConditions.Clean();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
@@ -674,31 +715,115 @@ void InitRequirements()
|
||||
);
|
||||
|
||||
//
|
||||
// Setting Sessions ...
|
||||
eaTradeManager
|
||||
.SetTradeSession(
|
||||
_Symbol,
|
||||
"01:30", // Start ...
|
||||
"14:25", // End ...
|
||||
"XSaherSession" // Name ...
|
||||
InitSymbolSessions();
|
||||
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Initial Symbols and Active Sessions of EA ...
|
||||
*/
|
||||
void InitSymbolSessions()
|
||||
{
|
||||
//
|
||||
string symbols[];
|
||||
string sessions[];
|
||||
string iSymbol = NULL;
|
||||
XCXCAEASignaller *iSignaller;
|
||||
|
||||
//
|
||||
// Parse Symbols ...
|
||||
int symbolsCount = 0;
|
||||
bool isMultiSymbol = IsValid(eaSymbols);
|
||||
if (isMultiSymbol)
|
||||
{
|
||||
//
|
||||
symbolsCount = SplitContent(
|
||||
symbols,
|
||||
eaSymbols //
|
||||
);
|
||||
eaTradeManager
|
||||
.SetTradeSession(
|
||||
isMultiSymbol = IsValidSize(symbolsCount);
|
||||
}
|
||||
if (!isMultiSymbol)
|
||||
{
|
||||
//
|
||||
Add(
|
||||
_Symbol,
|
||||
"19:30", // Start ...
|
||||
"11:30", // End ...
|
||||
"XSaherSession" // Name ...
|
||||
symbols //
|
||||
);
|
||||
|
||||
//
|
||||
symbolsCount = 1;
|
||||
}
|
||||
|
||||
//
|
||||
// Parse Sessions ...
|
||||
int sessionsCount = 0;
|
||||
bool hasSession = IsValid(eaSymbolSessions);
|
||||
if (hasSession)
|
||||
{
|
||||
//
|
||||
sessionsCount = SplitContent(
|
||||
sessions,
|
||||
eaSymbolSessions //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
// Setting Up Symbols ...
|
||||
|
||||
//
|
||||
for (int i = 0; i < symbolsCount; i++)
|
||||
{
|
||||
//
|
||||
iSymbol = symbols[i];
|
||||
|
||||
//
|
||||
// EA Signaller ...
|
||||
eaSignaller = new XCXCAEASignaller(
|
||||
_Symbol,
|
||||
iSignaller = new XCXCAEASignaller(
|
||||
iSymbol,
|
||||
_Period,
|
||||
PERIOD_H1 // Analysing Period ...
|
||||
eaAnalysisPeriod // Analysing Period ...
|
||||
);
|
||||
|
||||
//
|
||||
Add(
|
||||
iSignaller,
|
||||
eaSignallers //
|
||||
);
|
||||
|
||||
//
|
||||
ZeroMemory(iSignaller);
|
||||
}
|
||||
|
||||
//
|
||||
// Setting Up Sessions ...
|
||||
if (hasSession)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
//
|
||||
// Setting Sessions ...
|
||||
// eaTradeManager
|
||||
// .SetTradeSession(
|
||||
// _Symbol,
|
||||
// "01:30", // Start ...
|
||||
// "14:25", // End ...
|
||||
// "XSaherSession" // Name ...
|
||||
// );
|
||||
// eaTradeManager
|
||||
// .SetTradeSession(
|
||||
// _Symbol,
|
||||
// "19:30", // Start ...
|
||||
// "11:30", // End ...
|
||||
// "XSaherSession" // Name ...
|
||||
// );
|
||||
|
||||
//
|
||||
Clean(symbols);
|
||||
Clean(sessions);
|
||||
ZeroMemory(iSignaller);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user