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:
@@ -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,
|
||||||
|
|||||||
@@ -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 //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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 ...
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
Reference in New Issue
Block a user