Files
xMQL5/MQLTestWorkspace/BKPS/Templates/xpv.find.supres.old.mq5
T

311 lines
6.4 KiB
Plaintext

//
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;
}