complete save signalinfo in files after a position finished by it's conditions, also remove force XASCT verifications and add new Signal Provider based on it ...

This commit is contained in:
2024-06-12 01:24:08 +03:30
parent e023518bba
commit aaf55da2de
5 changed files with 742 additions and 298 deletions
+327 -21
View File
@@ -46,6 +46,152 @@
// //
// Definitions ... // Definitions ...
//
enum ENUM_X121_SIGNAL_PROVIDER
{
//
PROVIDER_UNKNOWN = 0,
PROVIDER_XMATD = 1,
PROVIDER_XSARD = 2,
PROVIDER_XADXTD = 3,
PROVIDER_XSTR = 4,
PROVIDER_XCHE = 5,
PROVIDER_XTD = 6,
PROVIDER_XSI = 7,
PROVIDER_XCI = 8,
PROVIDER_XMCD = 9,
PROVIDER_XICH = 10,
PROVIDER_XHK = 11,
PROVIDER_XSMHK = 12,
PROVIDER_XMRB = 13,
PROVIDER_XSSLC = 14,
PROVIDER_XHULL = 15,
PROVIDER_XASCT = 16,
};
//
string ToString(ENUM_X121_SIGNAL_PROVIDER value)
{
//
string result = NULL;
//
string vStr = EnumToString(value);
if (!IsValid(vStr))
{
return result;
}
//
string parts[];
int partsCount = SplitContent(
parts,
vStr,
"_"
//
);
if (partsCount <= 0)
{
return result;
}
//
bool hasLastPart = GetLastItem(
result,
parts
//
);
if (!hasLastPart)
{
return result;
}
//
return result;
}
//
ENUM_X121_SIGNAL_PROVIDER FromString(string value)
{
//
ENUM_X121_SIGNAL_PROVIDER result = PROVIDER_UNKNOWN;
//
if (!IsValid(value))
{
return result;
}
//
if (Contains(value, (EnumToString(PROVIDER_XMATD))))
{
result = PROVIDER_XMATD;
}
else if (Contains(value, (EnumToString(PROVIDER_XSARD))))
{
result = PROVIDER_XSARD;
}
else if (Contains(value, (EnumToString(PROVIDER_XADXTD))))
{
result = PROVIDER_XADXTD;
}
else if (Contains(value, (EnumToString(PROVIDER_XSTR))))
{
result = PROVIDER_XSTR;
}
else if (Contains(value, (EnumToString(PROVIDER_XCHE))))
{
result = PROVIDER_XCHE;
}
else if (Contains(value, (EnumToString(PROVIDER_XTD))))
{
result = PROVIDER_XTD;
}
else if (Contains(value, (EnumToString(PROVIDER_XSI))))
{
result = PROVIDER_XSI;
}
else if (Contains(value, (EnumToString(PROVIDER_XCI))))
{
result = PROVIDER_XCI;
}
else if (Contains(value, (EnumToString(PROVIDER_XMCD))))
{
result = PROVIDER_XMCD;
}
else if (Contains(value, (EnumToString(PROVIDER_XICH))))
{
result = PROVIDER_XICH;
}
else if (Contains(value, (EnumToString(PROVIDER_XHK))))
{
result = PROVIDER_XHK;
}
else if (Contains(value, (EnumToString(PROVIDER_XSMHK))))
{
result = PROVIDER_XSMHK;
}
else if (Contains(value, (EnumToString(PROVIDER_XMRB))))
{
result = PROVIDER_XMRB;
}
else if (Contains(value, (EnumToString(PROVIDER_XSSLC))))
{
result = PROVIDER_XSSLC;
}
else if (Contains(value, (EnumToString(PROVIDER_XHULL))))
{
result = PROVIDER_XHULL;
}
else if (Contains(value, (EnumToString(PROVIDER_XASCT))))
{
result = PROVIDER_XASCT;
}
//
return result;
}
// //
// Inputs ... // Inputs ...
struct X121SetupInputs struct X121SetupInputs
@@ -479,17 +625,17 @@ struct X121SetupConditions
); );
// //
string matdSummary = matdConditions.GenerateSummary(false, true, false); string matdSummary = matdConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string adxtdSummary = adxtdConditions.GenerateSummary(false, true, false); string adxtdSummary = adxtdConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string strSummary = strConditions.GenerateSummary(false, true, false); string strSummary = strConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string cheSummary = cheConditions.GenerateSummary(false, true, false); string cheSummary = cheConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string asctSummary = asctConditions.GenerateSummary(false, true, false); string asctSummary = asctConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string tdSummary = tdConditions.GenerateSummary(false, true, false); string tdSummary = tdConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string ichSummary = ichConditions.GenerateSummary(false, true, false); string ichSummary = ichConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string hkSummary = hkConditions.GenerateSummary(false, true, false); string hkSummary = hkConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string mrbSummary = mrbConditions.GenerateSummary(false, true, false); string mrbSummary = mrbConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string sslcSummary = sslcConditions.GenerateSummary(false, true, false); string sslcSummary = sslcConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
string hullSummary = hullConditions.GenerateSummary(false, true, false); string hullSummary = hullConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
// //
string conditionsStr = string conditionsStr =
@@ -628,7 +774,8 @@ struct X121SignalGenerator
// Check Market Conditions for Long Signals ... // Check Market Conditions for Long Signals ...
bool HasLongConditions( bool HasLongConditions(
X121SetupConditions &conditions, // Conditions X121SetupConditions &conditions, // Conditions
int &pusher // Pushers int &pusher, // Pushers
string &provider // Provider
) )
{ {
// //
@@ -654,6 +801,7 @@ struct X121SignalGenerator
); );
// //
// XMATD ...
bool long1 = bool long1 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -675,10 +823,13 @@ struct X121SignalGenerator
; ;
if (long1) if (long1)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XMATD);
} }
// //
// XSARD ...
bool long2 = bool long2 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -700,10 +851,13 @@ struct X121SignalGenerator
; ;
if (long2) if (long2)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XSARD);
} }
// //
// XADXTD ...
bool long3 = bool long3 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -723,10 +877,13 @@ struct X121SignalGenerator
; ;
if (long3) if (long3)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XADXTD);
} }
// //
// XSTR ...
bool long4 = bool long4 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -747,10 +904,13 @@ struct X121SignalGenerator
; ;
if (long4) if (long4)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XSTR);
} }
// //
// XCHE ...
bool long5 = bool long5 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -771,10 +931,13 @@ struct X121SignalGenerator
; ;
if (long5) if (long5)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XCHE);
} }
// //
// XTD ...
bool long6 = bool long6 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -795,10 +958,13 @@ struct X121SignalGenerator
; ;
if (long6) if (long6)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XTD);
} }
// //
// XSI ...
bool long7 = bool long7 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -821,10 +987,13 @@ struct X121SignalGenerator
; ;
if (long7) if (long7)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XSI);
} }
// //
// XCI ...
bool long8 = bool long8 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -847,10 +1016,13 @@ struct X121SignalGenerator
; ;
if (long8) if (long8)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XCI);
} }
// //
// XMCD ...
bool long9 = bool long9 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -873,10 +1045,13 @@ struct X121SignalGenerator
; ;
if (long9) if (long9)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XMCD);
} }
// //
// XICH ...
bool long10 = bool long10 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -898,10 +1073,13 @@ struct X121SignalGenerator
; ;
if (long10) if (long10)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XICH);
} }
// //
// XHK ...
bool long11 = bool long11 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -922,10 +1100,13 @@ struct X121SignalGenerator
; ;
if (long11) if (long11)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XHK);
} }
// //
// XSMHK ...
bool long12 = bool long12 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -946,10 +1127,13 @@ struct X121SignalGenerator
; ;
if (long12) if (long12)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XSMHK);
} }
// //
// XMRB ...
bool long13 = bool long13 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -970,10 +1154,13 @@ struct X121SignalGenerator
; ;
if (long13) if (long13)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XMRB);
} }
// //
// XSSLC ...
bool long14 = bool long14 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -994,10 +1181,13 @@ struct X121SignalGenerator
; ;
if (long14) if (long14)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XSSLC);
} }
// //
// XHULL ...
bool long15 = bool long15 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -1018,7 +1208,37 @@ struct X121SignalGenerator
; ;
if (long15) if (long15)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XHULL);
}
//
// XASCT ...
bool long16 =
//
// Starting Conditions ...
conditions.asctConditions.isLongSignal &&
//
// Verifications ...
conditions.tdConditions.isBullish &&
conditions.matdConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
conditions.cheConditions.isStrongBullish &&
conditions.hkConditions.isHKBullish &&
conditions.hkConditions.isSMHKBullish &&
conditions.mrbConditions.isFastOverSlow &&
conditions.hullConditions.isBullish &&
conditions.sslcConditions.isBullish
//
;
if (long16)
{
//
pusher++;
provider = ToString(PROVIDER_XASCT);
} }
// //
@@ -1026,7 +1246,6 @@ struct X121SignalGenerator
// //
pusher >= 1 && pusher >= 1 &&
!isOSCShortVerified && !isOSCShortVerified &&
conditions.asctConditions.isLongSignal &&
bullishScore > bearishScore * 2 && bullishScore > bearishScore * 2 &&
( (
// //
@@ -1088,6 +1307,10 @@ struct X121SignalGenerator
// //
long15 long15
// //
||
//
long16
//
) )
// //
; ;
@@ -1100,7 +1323,8 @@ struct X121SignalGenerator
// Check Market Conditions for Short Signals ... // Check Market Conditions for Short Signals ...
bool HasShortConditions( bool HasShortConditions(
X121SetupConditions &conditions, // Conditions X121SetupConditions &conditions, // Conditions
int &pusher // Pushers int &pusher, // Pushers
string &provider // Provider
) )
{ {
// //
@@ -1126,6 +1350,7 @@ struct X121SignalGenerator
); );
// //
// XMATD ...
bool short1 = bool short1 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -1147,10 +1372,13 @@ struct X121SignalGenerator
; ;
if (short1) if (short1)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XMATD);
} }
// //
// XSARD ...
bool short2 = bool short2 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -1172,10 +1400,13 @@ struct X121SignalGenerator
; ;
if (short2) if (short2)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XSARD);
} }
// //
// XADXTD ...
bool short3 = bool short3 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -1195,10 +1426,13 @@ struct X121SignalGenerator
; ;
if (short3) if (short3)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XADXTD);
} }
// //
// XSTR ...
bool short4 = bool short4 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -1219,10 +1453,13 @@ struct X121SignalGenerator
; ;
if (short4) if (short4)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XSTR);
} }
// //
// XCHE ...
bool short5 = bool short5 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -1243,10 +1480,13 @@ struct X121SignalGenerator
; ;
if (short5) if (short5)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XCHE);
} }
// //
// XTD ...
bool short6 = bool short6 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -1267,10 +1507,13 @@ struct X121SignalGenerator
; ;
if (short6) if (short6)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XTD);
} }
// //
// XSI ...
bool short7 = bool short7 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -1293,10 +1536,13 @@ struct X121SignalGenerator
; ;
if (short7) if (short7)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XSI);
} }
// //
// XCI ...
bool short8 = bool short8 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -1319,10 +1565,13 @@ struct X121SignalGenerator
; ;
if (short8) if (short8)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XCI);
} }
// //
// XMCD ...
bool short9 = bool short9 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -1345,10 +1594,13 @@ struct X121SignalGenerator
; ;
if (short9) if (short9)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XMCD);
} }
// //
// XICH ...
bool short10 = bool short10 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -1370,10 +1622,13 @@ struct X121SignalGenerator
; ;
if (short10) if (short10)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XICH);
} }
// //
// XHK ...
bool short11 = bool short11 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -1394,10 +1649,13 @@ struct X121SignalGenerator
; ;
if (short11) if (short11)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XHK);
} }
// //
// XSMHK ...
bool short12 = bool short12 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -1418,10 +1676,13 @@ struct X121SignalGenerator
; ;
if (short12) if (short12)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XSMHK);
} }
// //
// XMRB ...
bool short13 = bool short13 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -1438,15 +1699,17 @@ struct X121SignalGenerator
conditions.hkConditions.isSMHKBearish && conditions.hkConditions.isSMHKBearish &&
conditions.sslcConditions.isBearish && conditions.sslcConditions.isBearish &&
conditions.hullConditions.isBearish conditions.hullConditions.isBearish
// //
; ;
if (short13) if (short13)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XMRB);
} }
// //
// XSSLC ...
bool short14 = bool short14 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -1463,15 +1726,17 @@ struct X121SignalGenerator
conditions.hkConditions.isSMHKBearish && conditions.hkConditions.isSMHKBearish &&
conditions.mrbConditions.isFastUnderSlow && conditions.mrbConditions.isFastUnderSlow &&
conditions.hullConditions.isBearish conditions.hullConditions.isBearish
// //
; ;
if (short14) if (short14)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XSSLC);
} }
// //
// XHULL ...
bool short15 = bool short15 =
// //
// Starting Conditions ... // Starting Conditions ...
@@ -1488,12 +1753,41 @@ struct X121SignalGenerator
conditions.hkConditions.isSMHKBearish && conditions.hkConditions.isSMHKBearish &&
conditions.mrbConditions.isFastUnderSlow && conditions.mrbConditions.isFastUnderSlow &&
conditions.sslcConditions.isBearish conditions.sslcConditions.isBearish
// //
; ;
if (short15) if (short15)
{ {
//
pusher++; pusher++;
provider = ToString(PROVIDER_XHULL);
}
//
// XASCT ...
bool short16 =
//
// Starting Conditions ...
conditions.asctConditions.isShortSignal &&
//
// Verifications ...
conditions.tdConditions.isBearish &&
conditions.matdConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
conditions.cheConditions.isStrongBearish &&
conditions.hkConditions.isHKBearish &&
conditions.hkConditions.isSMHKBearish &&
conditions.mrbConditions.isFastUnderSlow &&
conditions.hullConditions.isBearish &&
conditions.sslcConditions.isBearish
//
;
if (short15)
{
//
pusher++;
provider = ToString(PROVIDER_XASCT);
} }
// //
@@ -1501,7 +1795,6 @@ struct X121SignalGenerator
// //
pusher >= 1 && pusher >= 1 &&
!isOSCLongVerified && !isOSCLongVerified &&
conditions.asctConditions.isShortSignal &&
bearishScore > bullishScore * 2 && bearishScore > bullishScore * 2 &&
( (
// //
@@ -1563,6 +1856,10 @@ struct X121SignalGenerator
// //
short15 short15
// //
||
//
short16
//
) )
// //
; ;
@@ -1577,6 +1874,7 @@ struct X121SignalGenerator
X121SetupConditions &conditions, // Conditions X121SetupConditions &conditions, // Conditions
XSignal &signal, // Signal if Exists XSignal &signal, // Signal if Exists
int &pusher, // Pushers int &pusher, // Pushers
string &provider, // Signal Provider Name
bool _allowLong, // Allow Long Signals bool _allowLong, // Allow Long Signals
bool _allowShort, // Allow Short Signals bool _allowShort, // Allow Short Signals
double _volume = 0.01, // Volume double _volume = 0.01, // Volume
@@ -1603,7 +1901,8 @@ struct X121SignalGenerator
? false ? false
: HasLongConditions( : HasLongConditions(
conditions, conditions,
pusher // pusher,
provider //
); );
// //
@@ -1612,7 +1911,8 @@ struct X121SignalGenerator
? false ? false
: HasShortConditions( : HasShortConditions(
conditions, conditions,
pusher // pusher,
provider //
); );
// //
@@ -1622,6 +1922,12 @@ struct X121SignalGenerator
return result; return result;
} }
//
string mProvider =
IsValid(provider)
? provider
: GetTag();
// //
// Prepare Signals ... // Prepare Signals ...
ENUM_POSITION_TYPE mType = ENUM_POSITION_TYPE mType =
@@ -1658,7 +1964,7 @@ struct X121SignalGenerator
// //
result = signal.Prepare( result = signal.Prepare(
conditions.symbol, conditions.symbol,
GetTag() + ToString(pusher), mProvider,
conditions.period, conditions.period,
mType, mType,
X_ORDER_MODE_MARKET, X_ORDER_MODE_MARKET,
+233 -33
View File
@@ -42,9 +42,12 @@ struct XSignalInfo
datetime time; // Issue Time (Open Position) datetime time; // Issue Time (Open Position)
// //
double profit; // Profit on Close double profit; // Profit on Close
datetime endTime; // End Time double commission; // Commission
string message; // Close Reason double swap; // Swap
double volume; // Volume
datetime endTime; // End Time
string message; // Close Reason
// //
double bullishScore; // Bullish Score On Signal Time double bullishScore; // Bullish Score On Signal Time
@@ -72,8 +75,13 @@ struct XSignalInfo
ticket = 0; ticket = 0;
symbol = NULL; symbol = NULL;
period = NULL; period = NULL;
provider = NULL;
pushers = 0;
time = NULL; time = NULL;
profit = 0; profit = 0;
commission = 0;
swap = 0;
volume = 0;
endTime = NULL; endTime = NULL;
message = NULL; message = NULL;
bullishScore = 0; bullishScore = 0;
@@ -86,6 +94,8 @@ struct XSignalInfo
bool Fill( bool Fill(
int _pushers, int _pushers,
XSignal &_signal, XSignal &_signal,
double _bullishScore,
double _bearishScore,
X121SetupConditions &_conditions // X121SetupConditions &_conditions //
) )
{ {
@@ -117,6 +127,10 @@ struct XSignalInfo
signal = _signal; signal = _signal;
conditions = _conditions; conditions = _conditions;
//
bullishScore = _bullishScore;
bearishScore = _bearishScore;
// //
return result; return result;
} }
@@ -186,6 +200,44 @@ struct XSignalInfo
return result; return result;
} }
//
int GetAge()
{
//
int result = -1;
//
if (!IsValid(symbol) ||
!IsValid(time) ||
!IsValid(endTime) ||
!IsValid(period))
{
return result;
}
//
int startIndex = iBarShift(
symbol,
period,
time,
false //
);
//
int endIndex = iBarShift(
symbol,
period,
endTime,
false //
);
//
result = MathAbs(startIndex - endIndex);
//
return result;
}
// //
string GetFileName() string GetFileName()
{ {
@@ -205,7 +257,7 @@ struct XSignalInfo
provider + "_" + provider + "_" +
ToString(ticket) + "_" + ToString(ticket) + "_" +
ToString(period) + "_" + ToString(period) + "_" +
ToString(time) ToFormatString(time)
// //
; ;
@@ -214,7 +266,7 @@ struct XSignalInfo
} }
// //
string ToModelString() string ToString()
{ {
// //
string result = NULL; string result = NULL;
@@ -225,24 +277,34 @@ struct XSignalInfo
false, // Only Commons ... false, // Only Commons ...
true, // Only Conditions ... true, // Only Conditions ...
false, // Include Score ... false, // Include Score ...
false // Include False Conditions ...ّ false // Include False Conditions ...
); );
//
int age = GetAge();
// //
result = result =
// //
ToString("Ticket", ticket) + ToString("Ticket", ticket) +
ToString("Symbol", symbol) + ToString("Symbol", symbol) +
ToString("Period", period) + ToString("Period", period) +
ToString("Pushers", pushers) +
ToString("Provider", provider) +
ToString("Time", time) + ToString("Time", time) +
ToString("BullishScore", bullishScore) + ToString("BullishScore", bullishScore) +
ToString("BearishScore", bearishScore) + ToString("BearishScore", bearishScore) +
ToString("Volume", volume) +
ToString("Profit", profit) + ToString("Profit", profit) +
ToString("Commission", commission) +
ToString("Swap", swap) +
ToString("End Time", endTime) + ToString("End Time", endTime) +
ToString("Age", age) +
ToString("Message", message) + ToString("Message", message) +
"-------------" + "\n" + "-------------" + "\n" +
ToString("Signal", signal.ToModelString()) + ToString("Signal", "\n" + signal.ToString()) +
ToString("Conditions", conditionsStr) + "-------------" + "\n" +
ToString("Conditions", "\n" + conditionsStr) +
// //
"" ""
// //
@@ -315,7 +377,7 @@ public:
} }
// //
string content = item.ToModelString(); string content = item.ToString();
result = IsValid(content); result = IsValid(content);
if (!result) if (!result)
{ {
@@ -368,7 +430,7 @@ private:
// //
result = result =
// //
mPath + "\\" + fileName mPath + "\\" + fileName + ".x121.log"
// //
; ;
@@ -517,6 +579,63 @@ public:
mAllowShort = value; mAllowShort = value;
} }
//
double Volume()
{
return mVolume;
}
//
void Volume(double value)
{
//
if (value < 0.01)
{
value = 0.01;
}
//
mVolume = value;
}
//
double TPPoint()
{
return mTPPoint;
}
//
void TPPoint(double value)
{
//
if (value < 0)
{
value = 0;
}
//
mTPPoint = value;
}
//
double SLPoint()
{
return mSLPoint;
}
//
void SLPoint(double value)
{
//
if (value < 0)
{
value = 0;
}
//
mSLPoint = value;
}
// //
bool IsEnable() bool IsEnable()
{ {
@@ -584,25 +703,39 @@ public:
string separator = "\n"; string separator = "\n";
// //
X121SetupConditions cConditions; // Current ...
X121SetupConditions sConditions;
X121SetupConditions mConditions;
X121SetupConditions lConditions;
X121SetupConditions hConditions;
//
XSignal cSignal; XSignal cSignal;
XSignal sSignal; int cPusher = 0;
XSignal mSignal; string cProvider = NULL;
XSignal lSignal; X121SetupConditions cConditions;
XSignal hSignal;
// //
int cPusher = 0; // Short ...
XSignal sSignal;
int sPusher = 0; int sPusher = 0;
string sProvider = NULL;
X121SetupConditions sConditions;
//
// Medium ...
XSignal mSignal;
int mPusher = 0; int mPusher = 0;
string mProvider = NULL;
X121SetupConditions mConditions;
//
// Long ...
XSignal lSignal;
int lPusher = 0; int lPusher = 0;
string lProvider = NULL;
X121SetupConditions lConditions;
//
// Hind ...
XSignal hSignal;
int hPusher = 0; int hPusher = 0;
string hProvider = NULL;
X121SetupConditions hConditions;
// //
X121SignalGenerator signalGenerator; X121SignalGenerator signalGenerator;
@@ -661,8 +794,12 @@ public:
cConditions, cConditions,
cSignal, cSignal,
cPusher, cPusher,
cProvider,
mAllowLong, mAllowLong,
mAllowShort // mAllowShort,
mVolume,
mSLPoint,
mTPPoint //
); );
// //
@@ -714,8 +851,12 @@ public:
sConditions, sConditions,
sSignal, sSignal,
sPusher, sPusher,
sProvider,
mAllowLong, mAllowLong,
mAllowShort // mAllowShort,
mVolume,
mSLPoint,
mTPPoint //
); );
// //
@@ -767,8 +908,12 @@ public:
mConditions, mConditions,
mSignal, mSignal,
mPusher, mPusher,
mProvider,
mAllowLong, mAllowLong,
mAllowShort // mAllowShort,
mVolume,
mSLPoint,
mTPPoint //
); );
// //
@@ -820,8 +965,12 @@ public:
lConditions, lConditions,
lSignal, lSignal,
lPusher, lPusher,
lProvider,
mAllowLong, mAllowLong,
mAllowShort // mAllowShort,
mVolume,
mSLPoint,
mTPPoint //
); );
// //
@@ -873,8 +1022,12 @@ public:
hConditions, hConditions,
hSignal, hSignal,
hPusher, hPusher,
hProvider,
mAllowLong, mAllowLong,
mAllowShort // mAllowShort,
mVolume,
mSLPoint,
mTPPoint //
); );
// //
@@ -907,6 +1060,8 @@ public:
AddNewSignal( AddNewSignal(
cPusher, cPusher,
cSignal, cSignal,
mBullishScore,
mBearishScore,
cConditions // cConditions //
); );
} }
@@ -925,6 +1080,8 @@ public:
AddNewSignal( AddNewSignal(
sPusher, sPusher,
sSignal, sSignal,
mBullishScore,
mBearishScore,
sConditions // sConditions //
); );
} }
@@ -943,6 +1100,8 @@ public:
AddNewSignal( AddNewSignal(
mPusher, mPusher,
mSignal, mSignal,
mBullishScore,
mBearishScore,
mConditions // mConditions //
); );
} }
@@ -961,6 +1120,8 @@ public:
AddNewSignal( AddNewSignal(
lPusher, lPusher,
lSignal, lSignal,
mBullishScore,
mBearishScore,
lConditions // lConditions //
); );
} }
@@ -979,6 +1140,8 @@ public:
AddNewSignal( AddNewSignal(
hPusher, hPusher,
hSignal, hSignal,
mBullishScore,
mBearishScore,
hConditions // hConditions //
); );
} }
@@ -1083,6 +1246,7 @@ public:
// Tools For Signal Info Collect ... // Tools For Signal Info Collect ...
// //
// Used for Signal Info States ...
void OnDealsChangedHandler(int count) void OnDealsChangedHandler(int count)
{ {
// //
@@ -1090,6 +1254,8 @@ public:
bool hasDeal = mTrader.GetLastDeal(deal); bool hasDeal = mTrader.GetLastDeal(deal);
if (hasDeal) if (hasDeal)
{ {
//
// Update Signal Info State ...
UpdateSignalState(deal); UpdateSignalState(deal);
} }
} }
@@ -1115,10 +1281,9 @@ private:
// //
bool mAllowLong; // Allow Long bool mAllowLong; // Allow Long
bool mAllowShort; // Allow Short bool mAllowShort; // Allow Short
double mVolume; // Volume
// double mTPPoint; // TP Point
// TODO: double mSLPoint; // SL Point
// Add Volume and TP SL Points as Properties here ...
// //
XSignalInfo mSignalInfos[]; XSignalInfo mSignalInfos[];
@@ -1242,6 +1407,8 @@ private:
void AddNewSignal( void AddNewSignal(
int pusher, int pusher,
XSignal &signal, XSignal &signal,
double bullishScore,
double bearishScore,
X121SetupConditions &conditions // X121SetupConditions &conditions //
) )
{ {
@@ -1250,6 +1417,8 @@ private:
bool isFilled = info.Fill( bool isFilled = info.Fill(
pusher, pusher,
signal, signal,
bullishScore,
bearishScore,
conditions // conditions //
); );
@@ -1286,11 +1455,42 @@ private:
// //
mSignalInfos[infoIDX].time = deal.time; mSignalInfos[infoIDX].time = deal.time;
mSignalInfos[infoIDX].ticket = deal.positionId; mSignalInfos[infoIDX].ticket = deal.positionId;
Print("Open Position: " + ToString(deal.positionId)); mSignalInfos[infoIDX].commission = deal.commission;
mSignalInfos[infoIDX].signal.positionId = deal.positionId;
} }
else if (deal.entry == DEAL_ENTRY_OUT) else if (deal.entry == DEAL_ENTRY_OUT)
{ {
Print("Close Position: " + ToString(deal.positionId)); //
mSignalInfos[infoIDX].swap = deal.swap;
mSignalInfos[infoIDX].endTime = deal.time;
mSignalInfos[infoIDX].profit = deal.profit;
//
string message =
//
deal.reason == DEAL_REASON_TP
? "TP"
: deal.reason == DEAL_REASON_SL
? "SL"
: IsValid(deal.comment)
? deal.comment
: "Force Close ..."
//
;
mSignalInfos[infoIDX].message = message;
//
// Now we can Save Signal Info and Remove it from mSignal Infos ...
bool isSaved = mSignalCollector.Save(mSignalInfos[infoIDX]);
if (isSaved)
{
//
ArrayRemove(
mSignalInfos,
infoIDX,
1 //
);
}
} }
} }
+3
View File
@@ -141,6 +141,9 @@ bool InitialEA()
// Allow Signals ... // Allow Signals ...
mEA.AllowLong(true); mEA.AllowLong(true);
mEA.AllowShort(true); mEA.AllowShort(true);
mEA.Volume(0.01);
mEA.TPPoint(30);
mEA.SLPoint(0);
// //
mEA.SetAlertPrefix(ShortName); mEA.SetAlertPrefix(ShortName);
+115
View File
@@ -3812,6 +3812,42 @@ ENUM_ORDER_TYPE GetOpposit(ENUM_ORDER_TYPE type)
return result; return result;
} }
//
string ToString(ENUM_POSITION_TYPE value)
{
//
string result = NULL;
//
result =
//
IsLong(value)
? "Long"
: "Short"
//
;
//
return result;
}
string ToString(ENUM_ORDER_TYPE value)
{
//
string result = NULL;
//
result =
//
IsLong(value)
? "Long"
: "Short"
//
;
//
return result;
}
// //
// Check Expert Running in Testing Mode or not ... // Check Expert Running in Testing Mode or not ...
bool IsRunningOnTestMode() bool IsRunningOnTestMode()
@@ -5051,6 +5087,85 @@ ulong GetCurrentTimeAsMilliSeconds()
return result; return result;
} }
//
// Converts a Date time to File Format ...
string ToFormatString(
datetime mTime,
string separator = "_" //
)
{
//
string result = NULL;
//
if (!IsValid(mTime))
{
return result;
}
//
MqlDateTime timeStruct;
bool isConverts = TimeToStruct(
mTime,
timeStruct //
);
if (!isConverts)
{
return result;
}
//
string year = ToString(timeStruct.year);
string month = ToString(timeStruct.mon);
string day = ToString(timeStruct.day);
string hour = ToString(timeStruct.hour);
string minute = ToString(timeStruct.min);
string second = ToString(timeStruct.sec);
//
result =
//
// Year ...
year + separator +
//
// Month ...
(StringLen(month) == 1
? "0" + month
: month) +
separator +
//
// Day ...
(StringLen(day) == 1
? "0" + day
: day) +
separator +
//
// Hour ...
(StringLen(hour) == 1
? "0" + hour
: hour) +
separator +
//
// Minute ...
(StringLen(minute) == 1
? "0" + minute
: minute) +
separator +
//
// Seconds ...
(StringLen(second) == 1
? "0" + second
: second) +
separator +
//
""
//
;
//
return result;
}
// //
// Bar Times ... // Bar Times ...
+64 -244
View File
@@ -70,6 +70,40 @@ enum ENUM_X_ORDER_MODES
X_ORDER_MODE_STOP_LIMIT, // Pending Stop Limit Order X_ORDER_MODE_STOP_LIMIT, // Pending Stop Limit Order
}; };
//
string ToString(ENUM_X_ORDER_MODES value)
{
//
string result = NULL;
//
switch (value)
{
//
case X_ORDER_MODE_MARKET:
result = "Market";
break;
//
case X_ORDER_MODE_LIMIT:
result = "Limit";
break;
//
case X_ORDER_MODE_STOP:
result = "Stop";
break;
//
case X_ORDER_MODE_STOP_LIMIT:
result = "StopLimit";
break;
}
//
return result;
}
// //
// Select Positions Type ... // Select Positions Type ...
enum ENUM_X_POSITION_SELECT_METHODS enum ENUM_X_POSITION_SELECT_METHODS
@@ -1282,250 +1316,6 @@ struct XSignal
return result; return result;
} }
//
// Data Collecotr ...
//
// Check this instance is Same os Given instance or not ...
bool IsSameAs(
const XSignal &value // instance for Compare
)
{
//
bool result = false;
//
result =
//
type == value.type &&
mode == value.mode &&
entry == value.entry &&
period == value.period &&
symbol == value.symbol &&
provider == value.provider &&
positionId == value.positionId
//
;
//
return result;
}
//
// Find index in a Collection ...
int FindIndex(
const XSignal &values[] // Collection to Find
)
{
//
return FindIndex(
this,
values
//
);
}
//
// Check Items Passed Specific Filters or not ...
bool IsFiltersPassed(
string mSymbol = NULL, // Trading Symbol
string mProvider = NULL, // Signal Provider
ENUM_TIMEFRAMES mPeriod = NULL, // Trading Timeframe
ENUM_POSITION_TYPE mType = NULL, // Long (Buy), Short (Sell)
ENUM_X_ORDER_MODES mMode = NULL // Execution Mode
)
{
//
bool result = false;
//
result =
//
// Symbol Filter ...
IsSymbolFilterPassed(
mSymbol,
this
//
)
//
&&
//
// Provider Filter ...
IsProviderFilterPassed(
mProvider,
this
//
)
//
&&
//
// Period Filter ...
IsPeriodFilterPassed(
mPeriod,
this
//
)
//
&&
//
// Type Filter ...
IsTypeFilterPassed(
mType,
this
//
)
//
&&
//
// Mode Filter ...
IsModeFilterPassed(
mMode,
this
//
)
//
;
//
return result;
}
//
string GetToken()
{
return GetToken(this);
}
//
bool IsModelValid()
{
return IsValid();
}
//
// To String Representation ...
string ToModelString()
{
//
string result = NULL;
//
if (!IsValid())
{
return result;
}
//
// For Modeling a Signal we Only Used:
// - Period;
// - Provider;
// - Type;
// - Mode;
// - Symbol;
// - PositionID;
// - Entry;
// - Volume;
// - TPS;
// - SLS;
// - Issue Time;
//
int iPeriodInt = (int)period;
//
string tpsStr = Surround(XTPToken, tp);
string slsStr = Surround(XSLToken, sl);
string typeStr = Surround(XTypeToken, type);
string modeStr = Surround(XModeToken, mode);
string timeStr = Surround(XTimeToken, time);
string entryStr = Surround(XEntryToken, entry);
string SymbolStr = Surround(XSymbolToken, symbol);
string volumeStr = Surround(XVolumeToken, volume);
string positionIdStr = Surround(XIDToken, positionId);
string periodStr = Surround(XPeriodToken, iPeriodInt);
string providerStr = Surround(XProviderToken, provider);
//
result =
//
GetToken() +
"[" +
//
periodStr +
providerStr +
typeStr +
modeStr +
SymbolStr +
positionIdStr +
entryStr +
volumeStr +
tpsStr +
slsStr +
timeStr +
//
"]"
//
;
//
return result;
}
//
// Parse String Model and Fill Available
// Items ...
bool ParseModel(string value)
{
//
bool result = false;
//
Clean();
//
if (!IsValid(value))
{
return false;
}
//
// For Modeling a Signal we Only Used:
// - Period;
// - Provider;
// - Type;
// - Mode;
// - Symbol;
// - PositionID;
// - Entry;
// - Volume;
// - TP;
// - SL;
// - Issue Time;
//
tp = ParseDoubleSurrounded(value, XTPToken);
sl = ParseDoubleSurrounded(value, XSLToken);
positionId = ParseLongSurrounded(value, XIDToken);
entry = ParseDoubleSurrounded(value, XEntryToken);
volume = ParseDoubleSurrounded(value, XVolumeToken);
//
time = ParseTimeSurrounded(value, XTimeToken);
symbol = ParseStringSurrounded(value, XSymbolToken);
provider = ParseStringSurrounded(value, XProviderToken);
type = ((ENUM_POSITION_TYPE)ParseIntSurrounded(value, XTypeToken));
mode = ((ENUM_X_ORDER_MODES)ParseIntSurrounded(value, XModeToken));
period = ((ENUM_TIMEFRAMES)ParseIntSurrounded(value, XPeriodToken));
//
// Validate ...
result = IsValid();
;
//
return result;
}
// //
// Draw Signal on Chart ... // Draw Signal on Chart ...
bool Draw( bool Draw(
@@ -1681,6 +1471,36 @@ struct XSignal
// //
return result; return result;
} }
//
// Retrieve String Representation of Signal ...
string ToString()
{
//
string result = NULL;
//
result =
//
ToString("Symbol", symbol) +
ToString("Period", period) +
ToString("Provider", provider) +
ToString("Type", type) +
ToString("Mode", mode) +
ToString("Volume", volume) +
ToString("Entry", entry) +
ToString("TP", tp) +
ToString("SL", sl) +
ToString("Time", time) +
ToString("Comment", comment) +
//
""
//
;
//
return result;
}
}; };
// //