This commit is contained in:
2025-04-04 17:34:41 +03:30
parent 9e8d830707
commit 9f260dba9e
+151 -115
View File
@@ -37,7 +37,7 @@ class XCX121SMCXINDSignalDetector : public XCBase
bool useGuards; bool useGuards;
double rfRewar; double rfRewar;
XBoxZone mWaitingBoxes[]; XBoxZone mWaitingBoxes[];
XBoxZone mInsideBoxes[]; XBoxZone mActivatedBoxes[];
XBoxZone mBreakedBoxes[]; XBoxZone mBreakedBoxes[];
XBoxZone mUnAvailableBoxes[]; XBoxZone mUnAvailableBoxes[];
X121SMCStrategyXINDSignalConditions mConditions; X121SMCStrategyXINDSignalConditions mConditions;
@@ -1077,7 +1077,7 @@ class XCX121SMCXINDSignalDetector : public XCBase
) )
{ {
// //
int result = ArraySize(mWaitingBoxes) + ArraySize(mInsideBoxes); int result = ArraySize(mWaitingBoxes) + ArraySize(mActivatedBoxes);
// //
int count = 0; int count = 0;
@@ -1216,6 +1216,11 @@ class XCX121SMCXINDSignalDetector : public XCBase
// //
// Update Times ... // Update Times ...
datetime requireTime = GetBarTime(
cState.symbol,
cState.period,
1 //
);
// //
count = ArraySize(mWaitingBoxes); count = ArraySize(mWaitingBoxes);
@@ -1225,19 +1230,19 @@ class XCX121SMCXINDSignalDetector : public XCBase
// //
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
mWaitingBoxes[i].to = TimeCurrent(); mWaitingBoxes[i].to = requireTime;
} }
} }
// //
count = ArraySize(mInsideBoxes); count = ArraySize(mActivatedBoxes);
has = IsValidSize(count); has = IsValidSize(count);
if (has) if (has)
{ {
// //
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
mInsideBoxes[i].to = TimeCurrent(); mActivatedBoxes[i].to = requireTime;
} }
} }
@@ -1246,113 +1251,144 @@ class XCX121SMCXINDSignalDetector : public XCBase
// //
// Waiting Boxes ... // Waiting Boxes ...
// count = ArraySize(mWaitingBoxes); count = ArraySize(mWaitingBoxes);
// has = IsValidSize(count); has = IsValidSize(count);
// if (has) if (has)
// { {
// // //
// int mustRemove[]; int mustRemove[];
// for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
// { {
// // //
// mWaitingBoxes[i].to = TimeCurrent(); XBoxZone iBox = mWaitingBoxes[i];
// XBoxZone iBox = mWaitingBoxes[i];
// //
// bool isValid = IsBoxValid(
// iBox,
// 0,
// iBox.period //
// );
// bool isBreaked = IsBoxBreaked(
// iBox,
// 0,
// iBox.period //
// );
// //
// bool isInside = !isValid && !isBreaked;
// if (isInside)
// {
// //
// Add(
// i,
// mustRemove //
// );
// //
// AddRef(
// iBox,
// mInsideBoxes //
// );
// }
// //
// if (!isInside && isBreaked)
// {
// //
// Add(
// i,
// mustRemove //
// );
// //
// AddRef(
// iBox,
// mBreakedBoxes //
// );
// }
// }
// //
// CleanupArray(
// mustRemove,
// mWaitingBoxes //
// );
// }
// //
// Inside Boxes ... // Check Box Validation ...
// count = ArraySize(mInsideBoxes); bool isValid = IsBoxValid(
// has = IsValidSize(count); iBox,
// if (has) 0,
// { iBox.period //
// // );
// int mustRemove[];
// for (int i = 0; i < count; i++)
// {
// //
// mInsideBoxes[i].to = TimeCurrent();
// XBoxZone iBox = mInsideBoxes[i];
// // //
// bool isBreaked = IsBoxBreaked( // Check Box Breaked ...
// iBox, bool isBreaked = IsBoxBreaked(
// 0, iBox,
// iBox.period // 0,
// ); iBox.period //
// if (isBreaked) );
// {
// //
// Add(
// i,
// mustRemove //
// );
// // //
// AddRef( // Box Waiting ...
// iBox, if (isValid)
// mBreakedBoxes // {
// ); //
// } iBox.Clean();
// } continue;
}
// // //
// CleanupArray( // Box Breaked ...
// mustRemove, if (isBreaked)
// mInsideBoxes // {
// ); //
// } Add(
i,
mustRemove //
);
//
AddRef(
iBox,
mBreakedBoxes //
);
//
iBox.Clean();
continue;
}
//
// Box Activated ...
if (!isValid)
{
//
Add(
i,
mustRemove //
);
//
AddRef(
iBox,
mActivatedBoxes //
);
//
iBox.Clean();
continue;
}
//
iBox.Clean();
}
//
CleanupArray(
mustRemove,
mWaitingBoxes //
);
}
//
// Activated Boxes ...
count = ArraySize(mActivatedBoxes);
has = IsValidSize(count);
if (has)
{
//
int mustRemove[];
for (int i = 0; i < count; i++)
{
//
XBoxZone iBox = mActivatedBoxes[i];
//
// Check Breaked ...
bool isBreaked = IsBoxBreaked(
iBox,
0,
iBox.period //
);
if (isBreaked)
{
//
Add(
i,
mustRemove //
);
//
AddRef(
iBox,
mBreakedBoxes //
);
//
iBox.Clean();
continue;
}
//
iBox.Clean();
}
//
CleanupArray(
mustRemove,
mActivatedBoxes //
);
}
// //
// Cleanup Resources ... // Cleanup Resources ...
@@ -1365,7 +1401,7 @@ class XCX121SMCXINDSignalDetector : public XCBase
cStateEvents.Clean(); cStateEvents.Clean();
// //
result = ArraySize(mWaitingBoxes) + ArraySize(mInsideBoxes); result = ArraySize(mWaitingBoxes) + ArraySize(mActivatedBoxes);
// //
return result; return result;
@@ -1402,8 +1438,8 @@ class XCX121SMCXINDSignalDetector : public XCBase
} }
// //
// Inside Boxes ... // Activated Boxes ...
count = ArraySize(mInsideBoxes); count = ArraySize(mActivatedBoxes);
has = IsValidSize(count); has = IsValidSize(count);
if (has) if (has)
{ {
@@ -1411,7 +1447,7 @@ class XCX121SMCXINDSignalDetector : public XCBase
has = FindBoxIndex( has = FindBoxIndex(
idx, idx,
box, box,
mInsideBoxes // mActivatedBoxes //
); );
result = has; result = has;
if (result) if (result)
@@ -1643,8 +1679,8 @@ class XCX121SMCXINDSignalDetector : public XCBase
} }
// //
// Inside Boxes ... // Activated Boxes ...
count = ArraySize(mInsideBoxes); count = ArraySize(mActivatedBoxes);
has = IsValidSize(count); has = IsValidSize(count);
if (has) if (has)
{ {
@@ -1654,13 +1690,13 @@ class XCX121SMCXINDSignalDetector : public XCBase
// //
XCBoxObject *iObj; XCBoxObject *iObj;
has = drawer.DrawBox( has = drawer.DrawBox(
mInsideBoxes[i], mActivatedBoxes[i],
iObj // iObj //
); );
if (has) if (has)
{ {
// //
if (mInsideBoxes[i].IsBullish()) if (mActivatedBoxes[i].IsBullish())
{ {
iObj.BoxColor(clrYellow); iObj.BoxColor(clrYellow);
} }