add MQL5Test Workspace Content as BKP Solution ...
This commit is contained in:
@@ -0,0 +1,310 @@
|
||||
|
||||
//
|
||||
XOHCLSupRes XPVHLPFindCandleSupprtAndResistance(
|
||||
int bar_index, // Bar Index ...
|
||||
int verifications = 4 // Number of Verifications ...
|
||||
)
|
||||
{
|
||||
//
|
||||
XOHCLSupRes result = {};
|
||||
result.res = 0;
|
||||
result.highRes = 0;
|
||||
result.sup = 0;
|
||||
result.lowSup = 0;
|
||||
|
||||
//
|
||||
XOHCL cBar = GetCandle(
|
||||
_Symbol,
|
||||
_Period,
|
||||
bar_index);
|
||||
|
||||
//
|
||||
int tries = 0;
|
||||
int lastBar = bar_index;
|
||||
while (
|
||||
result.res == 0 ||
|
||||
result.highRes == 0 ||
|
||||
result.sup == 0 ||
|
||||
result.lowSup == 0)
|
||||
{
|
||||
//
|
||||
int bar = XPVHLPFindSupportBar(lastBar);
|
||||
double val = XPVHLPFindSupportValue(lastBar);
|
||||
|
||||
//
|
||||
int bar1 = XPVHLPFindResistanceBar(lastBar);
|
||||
double val1 = XPVHLPFindResistanceValue(lastBar);
|
||||
|
||||
//
|
||||
if (result.res == 0 && result.highRes == 0 && val > cBar.high && val1 > cBar.high)
|
||||
{
|
||||
//
|
||||
result.res = MathMin(val, val1);
|
||||
result.highRes = MathMax(val, val1);
|
||||
}
|
||||
else if (result.sup == 0 && result.lowSup == 0 && val < cBar.low && val1 < cBar.low)
|
||||
{
|
||||
//
|
||||
result.sup = MathMax(val, val1);
|
||||
result.lowSup = MathMin(val, val1);
|
||||
}
|
||||
else if (val > cBar.high)
|
||||
{
|
||||
//
|
||||
if (result.res == 0 || result.highRes == 0)
|
||||
{
|
||||
//
|
||||
if (result.res == 0)
|
||||
{
|
||||
result.res = val;
|
||||
}
|
||||
else if (val > result.res)
|
||||
{
|
||||
result.highRes = val;
|
||||
}
|
||||
else if (val < result.res)
|
||||
{
|
||||
//
|
||||
result.highRes = result.res;
|
||||
result.res = val;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (val < cBar.low)
|
||||
{
|
||||
//
|
||||
if (result.sup == 0 || result.lowSup == 0)
|
||||
{
|
||||
//
|
||||
if (result.sup == 0)
|
||||
{
|
||||
result.sup = val;
|
||||
}
|
||||
else if (val < result.sup)
|
||||
{
|
||||
result.lowSup = val;
|
||||
}
|
||||
else if (val > result.sup)
|
||||
{
|
||||
//
|
||||
result.lowSup = result.sup;
|
||||
result.sup = val;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (val1 > cBar.high)
|
||||
{
|
||||
//
|
||||
if (result.res == 0 || result.highRes == 0)
|
||||
{
|
||||
//
|
||||
if (result.res == 0)
|
||||
{
|
||||
result.res = val1;
|
||||
}
|
||||
else if (val1 > result.res)
|
||||
{
|
||||
result.highRes = val1;
|
||||
}
|
||||
else if (val1 < result.res)
|
||||
{
|
||||
//
|
||||
result.highRes = result.res;
|
||||
result.res = val1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (val1 < cBar.low)
|
||||
{
|
||||
//
|
||||
if (result.sup == 0 || result.lowSup == 0)
|
||||
{
|
||||
//
|
||||
if (result.sup == 0)
|
||||
{
|
||||
result.sup = val1;
|
||||
}
|
||||
else if (val1 < result.sup)
|
||||
{
|
||||
result.lowSup = val1;
|
||||
}
|
||||
else if (val1 > result.sup)
|
||||
{
|
||||
//
|
||||
result.lowSup = result.sup;
|
||||
result.sup = val1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
if (tries >= verifications)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
lastBar = MathMin(bar, bar1);
|
||||
tries++;
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//
|
||||
int XPVHLPFindSupportBar(
|
||||
int bar_index, // Bar Index ...
|
||||
int verifications = 4 // Number of Verifications ...
|
||||
)
|
||||
{
|
||||
//
|
||||
int result = -1;
|
||||
|
||||
//
|
||||
int mVerified = 0;
|
||||
int idx = bar_index;
|
||||
bool founded = false;
|
||||
double lastValue = 0;
|
||||
while (!founded)
|
||||
{
|
||||
//
|
||||
XPVHLPReadBuffers(idx);
|
||||
bool isSupport = XPVHLPIsStrongSupport(idx);
|
||||
if (isSupport)
|
||||
{
|
||||
//
|
||||
if (lastValue != pvLLLBuffer[idx])
|
||||
{
|
||||
//
|
||||
lastValue = pvLLLBuffer[idx];
|
||||
mVerified = 0;
|
||||
}
|
||||
else if (lastValue == pvLLLBuffer[idx])
|
||||
{
|
||||
mVerified++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mVerified = 0;
|
||||
}
|
||||
|
||||
//
|
||||
idx++;
|
||||
|
||||
//
|
||||
founded = mVerified >= verifications;
|
||||
if (founded)
|
||||
{
|
||||
result = idx;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
double XPVHLPFindSupportValue(
|
||||
int bar_index, // Bar Index ...
|
||||
int verifications = 4 // Number of Verifications ...
|
||||
)
|
||||
{
|
||||
//
|
||||
double result = 0;
|
||||
|
||||
//
|
||||
int supportBar = XPVHLPFindSupportBar(bar_index, verifications);
|
||||
if (supportBar < -1)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
return pvSLLBuffer[bar_index];
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
int XPVHLPFindResistanceBar(
|
||||
int bar_index, // Bar Index ...
|
||||
int verifications = 4 // Number of Verifications ...
|
||||
)
|
||||
{
|
||||
//
|
||||
int result = -1;
|
||||
|
||||
//
|
||||
int mVerified = 0;
|
||||
int idx = bar_index;
|
||||
bool founded = false;
|
||||
double lastValue = 0;
|
||||
while (!founded)
|
||||
{
|
||||
//
|
||||
XPVHLPReadBuffers(idx);
|
||||
bool isSupport = XPVHLPIsStrongResistance(idx);
|
||||
if (isSupport)
|
||||
{
|
||||
//
|
||||
if (lastValue != pvLHHBuffer[idx])
|
||||
{
|
||||
//
|
||||
lastValue = pvLHHBuffer[idx];
|
||||
mVerified = 0;
|
||||
}
|
||||
else if (lastValue == pvLHHBuffer[idx])
|
||||
{
|
||||
mVerified++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mVerified = 0;
|
||||
}
|
||||
|
||||
//
|
||||
idx++;
|
||||
|
||||
//
|
||||
founded = mVerified >= verifications;
|
||||
if (founded)
|
||||
{
|
||||
result = idx;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
double XPVHLPFindResistanceValue(
|
||||
int bar_index, // Bar Index ...
|
||||
int verifications = 4 // Number of Verifications ...
|
||||
)
|
||||
{
|
||||
//
|
||||
double result = 0;
|
||||
|
||||
//
|
||||
int supportBar = XPVHLPFindResistanceBar(bar_index, verifications);
|
||||
if (supportBar < -1)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
return pvSHHBuffer[bar_index];
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
Reference in New Issue
Block a user