Files
MQL4Data/Bkp/Used/14020510/read-conditions.tpw.long.mq4
2024-01-25 04:05:58 +03:30

1075 lines
25 KiB
Plaintext

//
// Get Price Verification for Long ...
isPriceVerified =
//
// Starter ...
true
//
&& isHHVerified
&& signal.entry < hh
&& !isBigSharpOccured
&& signal.entry < candle0.high
&& MathAbs(signal.entry - hh) > 50 * _Point
;
//
isTPowVerified =
//
// Starter ...
true
//
&& tPow.signal < MathMax(tPow.powerUp, tPow.powerDown)
;
//
isPSarVerified =
//
// Starter ...
true
//
&& state0.psar < signal.entry
;
//
// bool isLastFastCrossSlowVerified =
// lastFastCrossOverSlowTime > 0
// && lastFastCrossUnderSlowTime > 0
// ?
// MathAbs(GetLastFastCrossOverSlowBarIndex() - GetLastFastCrossUnderSlowBarIndex()) > (xTPWSwingLength * 2)
// :
// false
// ;
//
isStateVerified =
//
// Start ...
true
//
// && state0.fast > state1.fast
// && state1.fast > state2.fast
//
// && state0.rangeFast > state0.rangeSlow
// && state1.rangeFast > state1.rangeSlow
// //
// && state0.rangeWeight > state0.verifier
// && state1.rangeWeight > state1.verifier
// //
// && state0.verifier < state0.rangeSlow
// && state1.verifier < state1.rangeSlow
//
&& MathAbs(state0.range - state0.rangeWeight) > 50 * _Point
//
&& MathAbs(state0.verifier - state0.rangeWeight) > 50 * _Point
//
// && (
// lastRangeCrossOverRangeWeightTime > 0
// && lastRangeCrossUnderRangeWeightTime > 0
// ?
// //
// MathMin(
// GetLastRangeCrossOverRangeWeightBarIndex(),
// GetLastRangeCrossUnderRangeWeightBarIndex()
// ) - signalBarIndex > xTPWSwingLength
// :
// //
// false
// )
//
// && (
// state0.range < state0.verifier
// ?
// //
// false
// :
// //
// (
// state0.rangeWeight > state0.range
// ?
// //
// MathAbs(state0.rangeWeight - state0.range) <= MathAbs(state0.range - state0.verifier)
// :
// //
// MathAbs(state0.rangeWeight - state0.range) <= MathAbs(state0.range - state0.verifier)
// )
// )
//
// // && isLastFastCrossSlowVerified
// && !(
// ll < llState.verifier
// && hh > state0.verifier
// )
;
// //
// datetime lastPriceOverVerifierTime;
// datetime lastFastCrossOverSlowTime;
// datetime lastPriceUnderVerifierTime;
// datetime lastPriceTouchVerifierTime;
// datetime lastFastCrossUnderSlowTime;
// datetime lastRangeCrossOverVerifierTime;
// datetime lastRangeCrossUnderVerifierTime;
// datetime lastRangeCrossOverRangeWeightTime;
// datetime lastRangeCrossUnderRangeWeightTime;
// datetime lastRangeWeightCrossOverVerifierTime;
// datetime lastRangeWeightCrossUnderVerifierTime;
// //
// datetime lastTPowAboveMaxVerifierTime;
// //
// // Find Crosses between fast and slow ...
// //
// bool isFastCrossOverSlow =
// state1.fast > state1.slow
// && !(state2.fast > state2.slow)
// ;
// if (isFastCrossOverSlow) {
// lastFastCrossOverSlowTime = barTime;
// }
// //
// bool isFastCrossUnderSlow =
// state1.fast < state1.slow
// && !(state2.fast < state2.slow)
// ;
// if (isFastCrossUnderSlow) {
// lastFastCrossUnderSlowTime = barTime;
// }
// //
// // Find Range and Verifier Cross ...
// //
// bool isRangeCrossOverVerifier =
// state1.range > state1.verifier
// && !(state2.range > state2.verifier)
// ;
// if (isRangeCrossOverVerifier) {
// lastRangeCrossOverVerifierTime = barTime;
// }
// //
// bool isRangeCrossUnderVerifier =
// state1.range < state1.verifier
// && !(state2.range < state2.verifier)
// ;
// if (isRangeCrossUnderVerifier) {
// lastRangeCrossUnderVerifierTime = barTime;
// }
// //
// // Find Crosses between range and rangeWeight ...
// //
// bool isRangeCrossOverRangeWeight =
// state1.range > state1.rangeWeight
// && !(state2.range > state2.rangeWeight)
// ;
// if (isRangeCrossOverRangeWeight) {
// lastRangeCrossOverRangeWeightTime = barTime;
// }
// //
// bool isRangeCrossUnderRangeWeight =
// state1.range < state1.rangeWeight
// && !(state2.range < state2.rangeWeight)
// ;
// if (isRangeCrossUnderRangeWeight) {
// lastRangeCrossUnderRangeWeightTime = barTime;
// }
// //
// // Find RangeWeight and Verifier Cross ...
// //
// bool isRangeWehigthCrossOverVerifier =
// state1.rangeWeight > state1.verifier
// && !(state2.rangeWeight > state2.verifier)
// ;
// if (isRangeWehigthCrossOverVerifier) {
// lastRangeWeightCrossOverVerifierTime = barTime;
// }
// //
// bool isRangeWeightCrossUnderVerifier =
// state1.rangeWeight < state1.verifier
// && !(state2.rangeWeight < state2.verifier)
// ;
// if (isRangeWeightCrossUnderVerifier) {
// lastRangeWeightCrossUnderVerifierTime = barTime;
// }
// //
// // Find Price Crosses by Verifier ...
// //
// bool isPriceOverVerifier =
// candle1.low > state1.verifier
// && !(candle2.low > state1.verifier)
// ;
// if (isPriceOverVerifier) {
// lastPriceOverVerifierTime = barTime;
// }
// //
// bool isPriceUnderVerifier =
// candle1.high < state1.verifier
// && !(candle2.high < state1.verifier)
// ;
// if (isPriceUnderVerifier) {
// lastPriceUnderVerifierTime = barTime;
// }
// //
// bool isPriceTouchVerifier =
// isPriceOverVerifier
// || isPriceUnderVerifier
// ;
// //
// if (isPriceTouchVerifier) {
// lastPriceTouchVerifierTime = barTime;
// }
// //
// bool isTPowUpperBelowMaxVerifier = MathMax(tPow1.powerUp, tPow1.powerDown) < tPowerMaxVerifier;
// bool isTPowUpperAboveMaxVerifier = MathMax(tPow1.powerUp, tPow1.powerDown) > tPowerMaxVerifier;
// if (isTPowUpperAboveMaxVerifier) {
// lastTPowAboveMaxVerifierTime = barTime;
// }
// //
// int GetLastFastCrossOverSlowBarIndex() {
// //
// int result = -1;
// //
// if (lastFastCrossOverSlowTime > 0) {
// //
// result = iBarShift(
// _Symbol,
// _Period,
// lastFastCrossOverSlowTime
// );
// }
// //
// return result;
// }
// //
// int GetLastFastCrossUnderSlowBarIndex() {
// //
// int result = -1;
// //
// if (lastFastCrossUnderSlowTime > 0) {
// //
// result = iBarShift(
// _Symbol,
// _Period,
// lastFastCrossUnderSlowTime
// );
// }
// //
// return result;
// }
// //
// int GetLastRangeCrossOverVerifierBarIndex() {
// //
// int result = -1;
// //
// if (lastRangeCrossOverVerifierTime > 0) {
// //
// result = iBarShift(
// _Symbol,
// _Period,
// lastRangeCrossOverVerifierTime
// );
// }
// //
// return result;
// }
// //
// int GetLastRangeCrossUnderVerifierBarIndex() {
// //
// int result = -1;
// //
// if (lastRangeCrossUnderVerifierTime > 0) {
// //
// result = iBarShift(
// _Symbol,
// _Period,
// lastRangeCrossUnderVerifierTime
// );
// }
// //
// return result;
// }
// //
// int GetLastRangeCrossOverRangeWeightBarIndex() {
// //
// int result = -1;
// //
// if (lastRangeCrossOverRangeWeightTime > 0) {
// //
// result = iBarShift(
// _Symbol,
// _Period,
// lastRangeCrossOverRangeWeightTime
// );
// }
// //
// return result;
// }
// //
// int GetLastRangeCrossUnderRangeWeightBarIndex() {
// //
// int result = -1;
// //
// if (lastRangeCrossUnderRangeWeightTime > 0) {
// //
// result = iBarShift(
// _Symbol,
// _Period,
// lastRangeCrossUnderRangeWeightTime
// );
// }
// //
// return result;
// }
// //
// int GetLastRangeWeightCrossOverVerifierBarIndex() {
// //
// int result = -1;
// //
// if (lastRangeWeightCrossOverVerifierTime > 0) {
// //
// result = iBarShift(
// _Symbol,
// _Period,
// lastRangeWeightCrossOverVerifierTime
// );
// }
// //
// return result;
// }
// //
// int GetLastRangeWeightCrossUnderVerifierBarIndex() {
// //
// int result = -1;
// //
// if (lastRangeWeightCrossUnderVerifierTime > 0) {
// //
// result = iBarShift(
// _Symbol,
// _Period,
// lastRangeWeightCrossUnderVerifierTime
// );
// }
// //
// return result;
// }
// //
// // Detect Sharp Changes ...
// double ll = GetMarketLowestLow(
// bar_index,
// xTPWSwingLength
// );
// double sharpDetectionValue =
// xTPWSharpDetectionFactor * _Point;
// double isSharpDetectionOccured =
// MathAbs(candle0.low - ll) > sharpDetectionValue
// ;
// //
// // Retrieve State Min and Max ...
// double stateMin0 = GetXTPWStateMin(state0);
// double stateMax0 = GetXTPWStateMax(state0);
// bool isStateDistanceValid =
// MathAbs(stateMax0 - stateMin0) < sharpDetectionValue;
// //
// // Fast Slow Verification ...
// //
// double topBound = MathMax(state1.range, state1.rangeWeight);
// topBound = MathMax(topBound, state1.verifier);
// //
// double bottomBound = MathMin(state1.range, state1.rangeWeight);
// bottomBound = MathMin(bottomBound, state1.verifier);
//
// bool isFastSlowValid =
// (
// state1.fast > topBound
// || state1.fast < bottomBound
// ) && (
// state1.slow > topBound
// || state1.slow < bottomBound
// );
//
bool longCondition1 =
//
// Condition 1 ...
true
//
&& tPow0.powerDown > tPow0.powerUp
&& state0.range > state0.verifier
&& state1.range > state1.verifier
&& state1.range > state1.rangeWeight
&& tPow0.powerDown > tPow1.powerDown
&& tPow1.powerDown > tPowerMaxVerifier
&& tPow2.powerDown < tPowerMaxVerifier
&& state1.rangeWeight > state1.verifier
&& !(
(
candle1.high > state1.verifier
&& candle1.low < state1.verifier
) || (
candle1.low > state1.verifier
)
)
;
//
bool longCondition2 =
//
// Condition 2 ...
true
//
&& tPow0.powerUp > tPow0.powerDown
&& tPow1.powerUp > tPow1.powerDown
&& tPow2.powerUp > tPow2.powerDown
&& tPow1.powerUp < tPowerVerifier
//
&& state1.fast > state1.slow
&& state1.range > state1.verifier
&& state0.fast < state0.rangeWeight
&& state1.fast < state1.rangeWeight
&& state1.rangeWeight > state1.range
&& MathAbs(state1.rangeWeight - state1.range) >
(MathAbs(state1.range - state1.verifier) / 2)
//
&& candle0.low > state0.verifier
&& candle1.low > state1.verifier
;
//
bool longCondition3 =
//
// Condition 3 ...
true
//
&& isCrossOver
&& state0.fast >= state2.fast
&& state1.psar < candle1.low
&& state1.verifier < state1.fast
//
&& MathMax(tPow1.powerUp, tPow1.powerDown) < tPowerMaxVerifier
;
//
// Get Minimum value of State ...
double GetXTPWStateMin(
const XTPWMarketState &state
) {
//
double result = 0;
//
result = state.psar;
result = MathMin(result, state.fast);
result = MathMin(result, state.slow);
result = MathMin(result, state.range);
result = MathMin(result, state.verifier);
result = MathMin(result, state.rangeWeight);
//
return result;
}
//
// Get Maximum value of State ...
double GetXTPWStateMax(
const XTPWMarketState &state
) {
//
double result = 0;
//
result = state.psar;
result = MathMax(result, state.fast);
result = MathMax(result, state.slow);
result = MathMax(result, state.range);
result = MathMax(result, state.verifier);
result = MathMax(result, state.rangeWeight);
//
return result;
}
//
//
//
// Count range weight Crosses ...
if (
//
// Range Weight Cross Over Verifier ...
(
iState1.rangeWeight > iState1.verifier
&& !(iState2.rangeWeight > iState2.verifier)
)
||
//
// Range Weight Cross Under Verifier ...
(
iState1.rangeWeight < iState1.verifier
&& !(iState2.rangeWeight < iState2.verifier)
)
||
//
// Range Weight Cross Over Range ...
(
iState1.rangeWeight > iState1.range
&& !(iState2.rangeWeight > iState2.range)
)
||
//
// Range Weight Cross Under Range ...
(
iState1.rangeWeight < iState1.range
&& !(iState2.rangeWeight < iState2.range)
)
) {
rangeWeightCrosses++;
}
//
// Count Price above range ...
if (
iCandle.low > iState1.range
|| (
iCandle.low < iState1.range
&& iCandle.high > iState1.range
)
) {
//
priceAboveRange++;
}
//
// Count Price above verifier ...
if (
iCandle.low > iState1.verifier
|| (
iCandle.low < iState1.verifier
&& iCandle.high > iState1.verifier
)
) {
//
priceAboveVerifier++;
}
//
// Count between Range and Verifier ...
double vUpper = MathMax(iState0.range, iState0.verifier);
double vDowner = MathMin(iState0.range, iState0.verifier);
if (
!(
iState0.fast > vUpper
&& iState0.slow > vUpper
)
&&
!(
iState0.fast < vDowner
&& iState0.slow < vDowner
)
) {
fastAndSlowBetweenRangeAndVerifier++;
}
//
// Short ...
//
if (
!enableXTPWSignalling
|| !xTPWWaitForShortSignals
) {
return;
}
//
datetime barTime = iTime(
_Symbol,
_Period,
bar_index
);
//
// Retrieve TPower State ...
XTPOWStatee tPow0 = GetXTPowState(
bar_index,
xTPWSwingLength
);
XTPOWStatee tPow1 = GetXTPowState(
bar_index + 1,
xTPWSwingLength
);
XTPOWStatee tPow2 = GetXTPowState(
bar_index + 2,
xTPWSwingLength
);
//
// Retrieve TPWMarket State ...
XTPWMarketState state0 = GetXTPWMarketState(
bar_index
);
XTPWMarketState state1 = GetXTPWMarketState(
bar_index + 1
);
XTPWMarketState state2 = GetXTPWMarketState(
bar_index + 2
);
//
// Retrieve Candles ...
XOHCL candle0 = GetCandleModel(bar_index);
XOHCL candle1 = GetCandleModel(bar_index + 1);
XOHCL candle2 = GetCandleModel(bar_index + 2);
//
bool isTPowUp = tPow2.powerUp > tPow2.powerDown;
//
double tPowUpper = MathMax(tPow2.powerUp, tPow2.powerDown);
//
bool startCondition = false;
bool signalCondition = false;
//
startCondition =
//
true
//
&& tPow2.powerDown > tPowerVerifier
;
//
signalCondition =
//
true
//
&& tPow1.powerDown > tPow2.powerDown
&& tPow1.powerDown > tPowerMaxVerifier
;
// //
// bool isCrossOver =
// state1.fast > state1.slow
// && !(state2.fast > state2.slow)
// ;
// //
// bool isCrossUnder =
// state0.fast < state0.slow
// && state1.fast < state1.slow
// && !(state2.fast < state2.slow)
// ;
//
double tPowerMedian = tPowerMaxVerifier - tPowerVerifier / 2;
//
bool signalCondition1 =
isCrossUnder
;
//
bool signalCondition2 =
//
tPow0.powerDown > tPow0.powerUp
//
&& tPow1.powerDown > tPow1.powerUp
&& tPow2.powerDown > tPow2.powerUp
//
&& tPow0.powerDown > tPowerMedian
&& tPow1.powerDown > tPowerMedian
&& tPow2.powerDown > tPowerMedian
//
&& tPow0.signal > tPow0.powerDown
;
//
if (
(
(
startCondition
&& signalCondition
) || (
signalCondition1
|| signalCondition2
)
)
&& xTPWShortConds.startTime == 0
&& xTPWShortConds.signalTime == 0
) {
//
xTPWShortConds.startTime = barTime;
xTPWShortConds.signalTime = barTime;
xTPWShortConds.entryTime = barTime;
//
return;
}
//
// Short ...
//
isPSarVerified =
//
// Starter ...
true
//
&& state0.psar > candle0.high
&& state0.psar > signal.entry
;
//
// Get Price Verification for Short ...
isPriceVerified =
//
// Starter ...
true
//
&& priceAboveRange < 1
&& priceAboveVerifier == 0
;
//
// Find Minimum Value of HH BarIndex Market State rangeWeight and verifier ...
double hhValidationValue = MathMin(
hhState.rangeWeight,
hhState.verifier
);
bool isHHValidForShortSignal =
hh < hhValidationValue
;
//
isTPowVerified =
//
// Starter ...
true
//
&& isHHValidForShortSignal
//
&& aboveTPowerMaxVerifier < 4
;
//
isStateVerified =
//
// Start ...
true
//
&& rangeWeightCrosses == 0
//
&& state0.slow > state0.fast
//
&& state0.range < state0.verifier
//
&& state0.rangeWeight > state0.range
&& state0.rangeWeight < state0.verifier
;
//
result =
//
// Starter Condition ...
true
//
&& isPSarVerified
//
&& isTPowVerified
//
&& isStateVerified
//
&& isPriceVerified
;
// //
// int aboveTPowerVerifier = 0;
// int abovePowerUpTPowerVerifier = 0;
// int abovePowerDownTPowerVerifier = 0;
// //
// int aboveTPowerMaxVerifier = 0;
// int abovePowerUpTPowerMaxVerifier = 0;
// int abovePowerDownTPowerMaxVerifier = 0;
// //
// int belowTPowerVerifier = 0;
// int belowPowerUpTPowerVerifier = 0;
// int belowPowerDownTPowerVerifier = 0;
// //
// int belowTPowerMaxVerifier = 0;
// int belowPowerUpTPowerMaxVerifier = 0;
// int belowPowerDownTPowerMaxVerifier = 0;
// //
// double powerUpSum = 0;
// double powerDownSum = 0;
// //
// int priceAboveRange = 0;
// int priceAboveVerifier = 0;
// int fastAndSlowBetweenRangeAndVerifier = 0;
// //
// int rangeWeightCrosses = 0;
// //
// for (int i = signalBarIndex; i < signalBarIndex + xTPWSwingLength; i++) {
// //
// XOHCL iCandle = GetCandleModel(i);
// //
// XTPOWStatee iTPow = GetXTPowState(
// i,
// xTPWSwingLength
// );
// //
// double isTPowUp = iTPow.powerUp > iTPow.powerDown;
// //
// double tPowUpper = MathMax(iTPow.powerUp, iTPow.powerDown);
// //
// // Summarise ...
// powerUpSum += iTPow.powerUp;
// powerDownSum += iTPow.powerDown;
// //
// XTPWMarketState iState0 = GetXTPWMarketState(
// i
// );
// XTPWMarketState iState1 = GetXTPWMarketState(
// i + 1
// );
// XTPWMarketState iState2 = GetXTPWMarketState(
// i + 2
// );
// //
// // Count Above TPow Verifier ...
// if (tPowUpper > tPowerVerifier) {
// //
// aboveTPowerVerifier++;
// //
// if (isTPowUp) {
// abovePowerUpTPowerVerifier++;
// } else {
// abovePowerDownTPowerVerifier++;
// }
// } else if (tPowUpper < tPowerVerifier) {
// //
// belowTPowerVerifier++;
// //
// if (isTPowUp) {
// belowPowerUpTPowerVerifier++;
// } else {
// belowPowerDownTPowerVerifier++;
// }
// }
// //
// // Count Above TPow Max Verifier ...
// if (tPowUpper > tPowerMaxVerifier) {
// //
// aboveTPowerMaxVerifier++;
// //
// if (isTPowUp) {
// abovePowerUpTPowerMaxVerifier++;
// } else {
// abovePowerDownTPowerMaxVerifier++;
// }
// } else if (tPowUpper < tPowerMaxVerifier) {
// //
// belowTPowerMaxVerifier++;
// //
// if (isTPowUp) {
// belowPowerUpTPowerMaxVerifier++;
// } else {
// belowPowerDownTPowerMaxVerifier++;
// }
// }
// }
// //
// int doubleMarketLength = (xTPWSwingLength * 2);
// int verifierLength = GetDailyCandleCount();
// int rangeLength = verifierLength / 2;
// //
// // Find Highest High ...
// //
// double rangeHH = GetMarketHighestHigh(
// signalBarIndex,
// rangeLength
// );
// //
// double verifierHH = GetMarketHighestHigh(
// signalBarIndex,
// verifierLength
// );
// //
// // Find HH Bar Index ...
// int hhBarIndex = iHighest(
// _Symbol,
// _Period,
// MODE_HIGH,
// xTPWSwingLength,
// signalBarIndex
// );
// //
// // Find HH ...
// double hh = iHigh(
// _Symbol,
// _Period,
// hhBarIndex
// );
// //
// // Retrieve Market State on HH Bar Index ...
// XTPWMarketState hhState = GetXTPWMarketState(
// hhBarIndex
// );
// //
// // Retrieve TPow State on HH Bar Index ...
// XTPOWStatee hhTPow = GetXTPowState(
// hhBarIndex,
// xTPWSwingLength
// );
// //
// // Find Lowest Low ...
// //
// double rangeLL = GetMarketLowestLow(
// signalBarIndex,
// rangeLength
// );
// //
// double verifierLL = GetMarketLowestLow(
// signalBarIndex,
// verifierLength
// );
// //
// // Find LL Bar Index ...
// int llBarIndex = iLowest(
// _Symbol,
// _Period,
// MODE_LOW,
// xTPWSwingLength,
// signalBarIndex
// );
// //
// // Find LL ...
// double ll = iLow(
// _Symbol,
// _Period,
// llBarIndex
// );
// //
// // Retrieve Market State on LL Bar Index ...
// XTPWMarketState llState = GetXTPWMarketState(llBarIndex);
// //
// // Retrieve TPow State on LL Bar Index ...
// XTPOWStatee llTPow = GetXTPowState(
// llBarIndex,
// xTPWSwingLength
// );
// //
// // Find Sharp Changes ...
// double diffChange = (hh - ll);
// double sharpDetectionValue =
// (xTPWSharpDetectionFactor * _Point);
// bool isBigSharpOccured =
// diffChange > sharpDetectionValue;
// ;
// //
// bool isHHVerified =
// !(
// hh == rangeHH
// && rangeHH == verifierHH
// )
// ||
// (
// hh > rangeHH
// || hh > verifierHH
// );
// //
// bool isLLVerified =
// !(
// ll == rangeLL
// && rangeLL == verifierLL
// )
// ||
// (
// ll < rangeLL
// || ll < verifierLL
// );