Initial Commit ...

This commit is contained in:
2024-01-25 04:11:24 +03:30
commit 604b48c5a3
234 changed files with 274318 additions and 0 deletions
View File
+946
View File
@@ -0,0 +1,946 @@
# Market Conditions
we study market and retrieve it's sense in an specific time by Capturing Market Conditions, which it is a Data Model based on Combination of Oscillators and Indicators in our Provider.
## Market Condition Model
```MQ5
//
// Represent Market Conditions ...
struct XEU5MarketConditions
{
//
// XTM ...
bool isXTMPeak;
bool isXTMVale;
bool isXTMBullish;
bool isXTMBearish;
bool isXTMNeutural;
bool isXTMEndBullish;
bool isXTMEndBearish;
bool isXTMStartBullish;
bool isXTMStartBearish;
bool isXTMEndBullishByNeutural;
bool isXTMEndBearishByNeutural;
bool isXTMStartBullishAfterNeutural;
bool isXTMStartBearishAfterNeutural;
//
// XAMA ...
bool isXAMAPeak;
bool isXAMAVale;
bool isXAMABullish;
bool isXAMABearish;
bool isXAMANeutural;
bool isXAMAEndBullish;
bool isXAMAEndBearish;
bool isXAMAStartBullish;
bool isXAMAStartBearish;
bool isXAMAEndBullishByNeutural;
bool isXAMAEndBearishByNeutural;
bool isXAMAStartBullishAfterNeutural;
bool isXAMAStartBearishAfterNeutural;
//
// XLH ...
bool isXLHHHIncreased;
bool isXLHHHDecreased;
bool isXLHLLIncreased;
bool isXLHLLDecreased;
bool isXLHLowAttachedLL;
bool isXLHHighAttachedHH;
bool isXLHHHSameInLength;
bool isXLHLLSameInLength;
bool isXLHPriceOverSignal;
bool isXLHPriceUnderSignal;
bool isXLHPriceInSignalRange;
bool isXLHPriceCrossedOverSignal;
bool isXLHPriceCrossedUnderSignal;
//
// XTD ...
bool isXTDSignalPeak;
bool isXTDSignalVale;
bool isXTDBullishPeak;
bool isXTDBullishVale;
bool isXTDBearishPeak;
bool isXTDBearishVale;
bool isXTDBullOverBear;
bool isXTDBullUnderBear;
bool isXTDSignalOverBear;
bool isXTDSignalUnderBear;
bool isXTDBullCrossedOverBear;
bool isXTDBullCrossedUnderBear;
bool isXTDSignalCrossedOverBear;
bool isXTDSignalCrossedUnderBear;
//
// XFI ...
bool isXFIPeak;
bool isXFIVale;
bool isXFICrossedOverZero;
bool isXFIOverZero;
bool isXFICrossedUnderZero;
bool isXFIUnderZero;
//
// XTS ...
bool isXTSAllSame;
bool isXTSCurrentMin;
bool isXTSCurrentMax;
bool isXTSCurrentOverFarest;
bool isXTSCurrentOverNearest;
bool isXTSCurrentOverMediest;
bool isXTSCurrentUnderFarest;
bool isXTSCurrentUnderNearest;
bool isXTSCurrentUnderMediest;
bool isXTSCurrentCrossedOverFarest;
bool isXTSCurrentCrossedOverNearest;
bool isXTSCurrentCrossedOverMediest;
bool isXTSCurrentCrossedUnderFarest;
bool isXTSCurrentCrossedUnderNearest;
bool isXTSCurrentCrossedUnderMediest;
//
// XRSI ...
bool isXRSIPeak;
bool isXRSIVale;
bool isXRSICrossedOverLongExit;
bool isXRSICrossedOverLongEntry;
bool isXRSICrossedUnderShortExit;
bool isXRSICrossedUnderShortEntry;
//
// XOBD ...
bool isXOBDSwingLow;
bool isXOBDSwingHigh;
//
// XCHLH ...
//
bool isXCHLHSameHHs;
bool isXCHLHSameLLs;
//
bool isXCHLHSCMCHHSame;
bool isXCHLHSCMCLLSame;
//
bool isXCHLHSCLCHHSame;
bool isXCHLHSCLCLLSame;
//
bool isXCHLHMCLCHHSame;
bool isXCHLHMCLCLLSame;
//
bool isXCHLHMCOnTopOfLC;
bool isXCHLHMCInBottomOfLC;
//
// XCHMA ...
//
bool isXCHMASCOverMax;
bool isXCHMASCOverMin;
bool isXCHMASCUnderMax;
bool isXCHMASCUnderMin;
//
bool isXCHMASCCrossedOverMax;
bool isXCHMASCCrossedUnderMax;
bool isXCHMASCCrossedOverMin;
bool isXCHMASCCrossedUnderMin;
//
bool isXCHMASCPeak;
bool isXCHMASCVale;
bool isXCHMASCTrendsUp;
bool isXCHMASCTrendsDown;
bool isXCHMASCFastOverSlow;
bool isXCHMASCFastUnderSlow;
bool isXCHMASCFastCrossedOverSlow;
bool isXCHMASCFastCrossedUnderSlow;
//
bool isXCHMAMCPeak;
bool isXCHMAMCVale;
bool isXCHMAMCTrendsUp;
bool isXCHMAMCTrendsDown;
bool isXCHMAMCFastOverSlow;
bool isXCHMAMCFastUnderSlow;
bool isXCHMAMCFastCrossedOverSlow;
bool isXCHMAMCFastCrossedUnderSlow;
//
bool isXCHMALCPeak;
bool isXCHMALCVale;
bool isXCHMALCTrendsUp;
bool isXCHMALCTrendsDown;
bool isXCHMALCFastOverSlow;
bool isXCHMALCFastUnderSlow;
bool isXCHMALCFastCrossedOverSlow;
bool isXCHMALCFastCrossedUnderSlow;
};
```
## Used Cases
for each Strategy we have some sort of Conditions, which i try to describe it here
```MQ5
//
// Define a Function based on Strategy and Signal Type ...
bool XStrategyHasLongSignal() {
//
// Define a result Variable to determines there is a Signal
// on Specific Time or not ...
bool result = false;
//
// Start Analysing Market based On Conditions ...
result =
//
// Base Condition:
// each Strategy must has a Base Conditions, which they are usually common combinations
// of Market Properties that must be happens to lookup for signals ...
(
//
false
//
)
//
&&
//
// Next Step is combine sorts of Conditions which make our choice
// so Exact in Market ...
(
//
false
//
)
//
&&
//
// Exceptions:
// there some commonly Exceptions which makes our choice incorrect,
// here we are combined knownly Exceptions ...
!(
//
// for Exception we used XLH Conditions as follow ...
//
// Check Conditions if Price In Signal Range ...
(xAU5Conditions.isXLHPriceInSignalRange &&
//
(
//
// Next Step is to Check LL and HH Same Style ...
//
// Check if Both LL and HH Same In Length ...
((xAU5Conditions.isXLHLLSameInLength &&
xAU5Conditions.isXLHHHSameInLength) &&
//
(
false)
//
)
//
||
//
// Check If LL Same In Length ...
((xAU5Conditions.isXLHLLSameInLength &&
!xAU5Conditions.isXLHHHSameInLength) &&
//
(
false)
//
)
//
||
//
// Check If HH is Same In Length ...
((xAU5Conditions.isXLHHHSameInLength &&
!xAU5Conditions.isXLHLLSameInLength) &&
//
(
false)
//
)
//
||
//
// Not Same LL or HH in Lenght ...
((!xAU5Conditions.isXLHHHSameInLength &&
!xAU5Conditions.isXLHLLSameInLength) &&
//
(
false)
//
)
//
)
//
)
//
||
//
// Check Conditions if Price is Under Signal ...
(
//
((xAU5Conditions.isXLHPriceUnderSignal ||
xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
(
//
// Next Step is to Check LL and HH Same Style ...
//
// Check if Both LL and HH Same In Length ...
((xAU5Conditions.isXLHLLSameInLength &&
xAU5Conditions.isXLHHHSameInLength) &&
//
(
false)
//
)
//
||
//
// Check If LL Same In Length ...
((xAU5Conditions.isXLHLLSameInLength &&
!xAU5Conditions.isXLHHHSameInLength) &&
//
(
false)
//
)
//
||
//
// Check If HH is Same In Length ...
((xAU5Conditions.isXLHHHSameInLength &&
!xAU5Conditions.isXLHLLSameInLength) &&
//
(
false)
//
)
//
||
//
// Not Same LL or HH in Lenght ...
((!xAU5Conditions.isXLHHHSameInLength &&
!xAU5Conditions.isXLHLLSameInLength) &&
//
(
false)
//
)
//
)
//
)
//
)
//
||
//
// Check Conditions if Price is Over Signal ...
(
//
((xAU5Conditions.isXLHPriceOverSignal ||
xAU5Conditions.isXLHPriceCrossedOverSignal) &&
(
//
// Next Step is to Check LL and HH Same Style ...
//
// Check if Both LL and HH Same In Length ...
((xAU5Conditions.isXLHLLSameInLength &&
xAU5Conditions.isXLHHHSameInLength) &&
//
(
false)
//
)
//
||
//
// Check If LL Same In Length ...
((xAU5Conditions.isXLHLLSameInLength &&
!xAU5Conditions.isXLHHHSameInLength) &&
//
(
false)
//
)
//
||
//
// Check If HH is Same In Length ...
((xAU5Conditions.isXLHHHSameInLength &&
!xAU5Conditions.isXLHLLSameInLength) &&
//
(
false)
//
)
//
||
//
// Not Same LL or HH in Lenght ...
((!xAU5Conditions.isXLHHHSameInLength &&
!xAU5Conditions.isXLHLLSameInLength) &&
//
(
false)
//
)
//
)
//
)
//
)
//
||
//
// Check Conditions if Price is not has clear state ...
(
//
((!xAU5Conditions.isXLHPriceOverSignal &&
!xAU5Conditions.isXLHPriceUnderSignal &&
!xAU5Conditions.isXLHPriceInSignalRange &&
!xAU5Conditions.isXLHPriceCrossedOverSignal &&
!xAU5Conditions.isXLHPriceCrossedUnderSignal) &&
(
//
// Next Step is to Check LL and HH Same Style ...
//
// Check if Both LL and HH Same In Length ...
((xAU5Conditions.isXLHLLSameInLength &&
xAU5Conditions.isXLHHHSameInLength) &&
//
(
false)
//
)
//
||
//
// Check If LL Same In Length ...
((xAU5Conditions.isXLHLLSameInLength &&
!xAU5Conditions.isXLHHHSameInLength) &&
//
(
false)
//
)
//
||
//
// Check If HH is Same In Length ...
((xAU5Conditions.isXLHHHSameInLength &&
!xAU5Conditions.isXLHLLSameInLength) &&
//
(
false)
//
)
//
||
//
// Not Same LL or HH in Lenght ...
((!xAU5Conditions.isXLHHHSameInLength &&
!xAU5Conditions.isXLHLLSameInLength) &&
//
(
false)
//
)
//
)
//
)
//
)
//
)
//
;
//
// return the result ...
return result;
}
```
## Common Cases
there are many conditions which contains a combination of one or more condition and they are most commonly used.
here i described them and document them for prevent time spending to write them in each used case ...
### Resolve Stop Outs
in this step just focused on Peaks and Vales;
```MQ5
//
// Peaks ...
// Use Trends Down ...
//
(mConditions.isXCHMASCPeak &&
(mConditions.isXCHMASCFastOverSlow ||
mConditions.isXCHMASCFastCrossedOverSlow))
//
//
(mConditions.isXCHMAMCPeak &&
(mConditions.isXCHMAMCFastOverSlow ||
mConditions.isXCHMAMCFastCrossedOverSlow))
//
//
(mConditions.isXCHMALCPeak &&
(mConditions.isXCHMALCFastOverSlow ||
mConditions.isXCHMALCFastCrossedOverSlow))
//
// Vales ...
// Use Trends Up ...
//
(mConditions.isXCHMASCVale &&
(mConditions.isXCHMASCFastUnderSlow ||
mConditions.isXCHMASCFastCrossedUnderSlow))
//
//
(mConditions.isXCHMAMCVale &&
(mConditions.isXCHMAMCFastUnderSlow ||
mConditions.isXCHMAMCFastCrossedUnderSlow))
//
//
(mConditions.isXCHMALCVale &&
(mConditions.isXCHMALCFastUnderSlow ||
mConditions.isXCHMALCFastCrossedUnderSlow))
```
```MQ5
//
// Unders ...
//
((mConditions.isXCHMASCFastUnderSlow ||
mConditions.isXCHMASCFastCrossedUnderSlow) &&
(
//
()
//
)
//
)
//
//
((mConditions.isXCHMAMCFastUnderSlow ||
mConditions.isXCHMAMCFastCrossedUnderSlow) &&
(
//
()
//
)
//
)
//
//
((mConditions.isXCHMALCFastUnderSlow ||
mConditions.isXCHMALCFastCrossedUnderSlow) &&
(
//
()
//
)
//
)
//
//
// Overs ...
//
((mConditions.isXCHMASCFastOverSlow ||
mConditions.isXCHMASCFastCrossedOverSlow) &&
(
//
()
//
)
//
)
//
//
((mConditions.isXCHMAMCFastOverSlow ||
mConditions.isXCHMAMCFastCrossedOverSlow) &&
(
//
()
//
)
//
)
//
//
((mConditions.isXCHMALCFastOverSlow ||
mConditions.isXCHMALCFastCrossedOverSlow) &&
(
//
()
//
)
//
)
//
```
### Resolve Old Guard Attacks
in this step complete conditions;
### Resolve DrawDown Guard Attacks
in this step complete conditions;
### XCHMA Max Min Exceptions
```MQ5
//
// Exception Cases for XCHMA Min or Max ...
(
//
// XCHMA MAX ...
(
//
(mConditions.isXCHMASCOverMax ||
mConditions.isXCHMASCCrossedOverMax) &&
(mConditions.isXCHMASCUnderMax ||
mConditions.isXCHMASCCrossedUnderMax)
//
)
//
||
//
// XCHMA MIN ...
(
//
(mConditions.isXCHMASCOverMin ||
mConditions.isXCHMASCCrossedOverMin) &&
(mConditions.isXCHMASCUnderMin ||
mConditions.isXCHMASCCrossedUnderMin)
//
)
)
```
### XCHMA Cycles State
#### Short Cycle
```MQ5
//
// Check Bullish ...
bool isXCHMASCBullish =
//
(mConditions.isXCHMASCFastOverSlow ||
mConditions.isXCHMASCFastCrossedOverSlow)
//
;
//
// Check Full Bullish ...
bool isXCHMASCFullBullish =
//
(isXCHMASCBullish &&
!isXCHMASCTrendsDown)
//
;
```
```MQ5
//
// Check Bearish ...
bool isXCHMASCBearish =
//
(mConditions.isXCHMASCFastUnderSlow ||
mConditions.isXCHMASCFastCrossedUnderSlow)
//
;
//
// Check Full Bearish ...
bool isXCHMASCFullBearish =
//
(isXCHMASCBearish &&
!isXCHMASCTrendsDown)
//
;
```
```MQ5
//
// Check Not Vale and Peak ...
bool isXCHMASCNormal =
//
(!mConditions.isXCHMASCPeak &&
!mConditions.isXCHMASCVale)
//
;
```
#### Medium Cycle
```MQ5
//
// Check Bullish ...
bool isXCHMAMCBullish =
//
(mConditions.isXCHMAMCFastOverSlow ||
mConditions.isXCHMAMCFastCrossedOverSlow)
//
;
//
// Check Full Bullish ...
bool isXCHMAMCFullBullish =
//
(isXCHMAMCBullish &&
!isXCHMAMCTrendsDown)
//
;
```
```MQ5
//
// Check Bearish ...
bool isXCHMAMCBearish =
//
(mConditions.isXCHMAMCFastUnderSlow ||
mConditions.isXCHMAMCFastCrossedUnderSlow)
//
;
//
// Check Full Bearish ...
bool isXCHMAMCFullBearish =
//
(isXCHMAMCBearish &&
!isXCHMAMCTrendsDown)
//
;
```
```MQ5
//
// Check Not Vale and Peak ...
bool isXCHMAMCNormal =
//
(!mConditions.isXCHMAMCPeak &&
!mConditions.isXCHMAMCVale)
//
;
```
#### Long Cycle
```MQ5
//
// Check Bullish ...
bool isXCHMALCBullish =
//
(mConditions.isXCHMALCFastOverSlow ||
mConditions.isXCHMALCFastCrossedOverSlow)
//
;
//
// Check Full Bullish ...
bool isXCHMALCFullBullish =
//
(isXCHMALCBullish &&
!isXCHMALCTrendsDown)
//
;
```
```MQ5
//
// Check Bearish ...
bool isXCHMALCBearish =
//
(mConditions.isXCHMALCFastUnderSlow ||
mConditions.isXCHMALCFastCrossedUnderSlow)
//
;
//
// Check Full Bearish ...
bool isXCHMALCFullBearish =
//
(isXCHMALCBearish &&
!isXCHMALCTrendsDown)
//
;
```
```MQ5
//
// Check Not Vale and Peak ...
bool isXCHMALCNormal =
//
(!mConditions.isXCHMALCPeak &&
!mConditions.isXCHMALCVale)
//
;
```
### XCHMA Bullish Trend
```MQ5
//
// XCHMA Bullish Trend ...
bool isXCHMABullish =
//
(
//
// All of Cycles Bullish ...
(isXCHMASCBullish &&
isXCHMAMCBullish &&
isXCHMALCBullish)
//
||
//
// Two of Cycles Bullish ...
(
//
(isXCHMASCBullish &&
isXCHMAMCBullish)
//
||
//
(isXCHMASCBullish &&
isXCHMALCBullish)
//
||
//
(isXCHMAMCBullish &&
isXCHMALCBullish)
//
)
)
//
;
//
// XCHMA Full Bullish Trend ...
bool isXCHMAFullBullish =
//
(
//
// All of Cycles Fully Bullish ...
(isXCHMASCFullBullish &&
isXCHMAMCFullBullish &&
isXCHMALCFullBullish)
//
||
//
// Two Of Cycles Fully Bullish ...
(
//
(isXCHMASCFullBullish &&
isXCHMAMCFullBullish)
//
||
//
(isXCHMASCFullBullish &&
isXCHMALCFullBullish)
//
||
//
(isXCHMAMCFullBullish &&
isXCHMALCFullBullish)
//
)
//
)
//
;
```
### XCHMA Bearish Trend
```MQ5
//
// XCHMA Bearish Trend ...
bool isXCHMABearish =
//
(
//
// All of Cycles Bearish ...
(isXCHMASCBearish &&
isXCHMAMCBearish &&
isXCHMALCBearish)
//
||
//
// Two of Cycles Bearish ...
(
//
(isXCHMASCBearish &&
isXCHMAMCBearish)
//
||
//
(isXCHMASCBearish &&
isXCHMALCBearish)
//
||
//
(isXCHMAMCBearish &&
isXCHMALCBearish)
//
)
)
//
;
//
// XCHMA Full Bearish Trend ...
bool isXCHMAFullBearish =
//
(
//
// All of Cycles Fully Bearish ...
(isXCHMASCFullBearish &&
isXCHMAMCFullBearish &&
isXCHMALCFullBearish)
//
||
//
// Two Of Cycles Fully Bearish ...
(
//
(isXCHMASCFullBearish &&
isXCHMAMCFullBearish)
//
||
//
(isXCHMASCFullBearish &&
isXCHMALCFullBearish)
//
||
//
(isXCHMAMCFullBearish &&
isXCHMALCFullBearish)
//
)
//
)
//
;
```
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,171 @@
//
// Enable Signaller ...
bool EnableSXSIGNALLERNAMEignaller() {
//
bool result = false;
//
// Validate Args ...
if (mXSIGNALLERNAMEEnableSignaller) {
return result;
}
//
result = true;
mXSIGNALLERNAMEEnableSignaller = true;
//
return result;
}
//
// Disable Signaller ...
bool DisbaleXSIGNALLERNAMESignaller() {
//
bool result = false;
//
// Validate Args ...
if (!mXSIGNALLERNAMEEnableSignaller) {
return result;
}
//
result = true;
mXSIGNALLERNAMEEnableSignaller = false;
//
return result;
}
//
// Allow Sginaller to Issue Long Signals ...
bool EnableXSIGNALLERNAMELongs() {
//
bool result = false;
//
// Validate Args ...
if (
!mXSIGNALLERNAMEEnableSignaller ||
mXSIGNALLERNAMEAllowLongSignals
) {
return result;
}
//
result = true;
mXSIGNALLERNAMEAllowLongSignals = true;
//
return result;
}
//
// Disallow Signaller to Issue Long Signals ...
bool DisbaleXSIGNALLERNAMELongs() {
//
bool result = false;
//
// Validate Args ...
if (
!mXSIGNALLERNAMEEnableSignaller ||
!mXSIGNALLERNAMEAllowLongSignals
) {
return result;
}
//
result = true;
mXSIGNALLERNAMEAllowLongSignals = false;
//
return result;
}
//
// Allow Signaller to Issue Short Sginals ...
bool EnableXSIGNALLERNAMEShorts() {
//
bool result = false;
//
// Validate Args ...
if (
!mXSIGNALLERNAMEEnableSignaller ||
mXSIGNALLERNAMEAllowShortSignals
) {
return result;
}
//
result = true;
mXSIGNALLERNAMEAllowShortSignals = true;
//
return result;
}
//
// Disallow Signaller to Issue Short Signals ...
bool DisableXSIGNALLERNAMEShorts() {
//
bool result = false;
//
// Validate Args ...
if (
!mXSIGNALLERNAMEEnableSignaller ||
!mXSIGNALLERNAMEAllowShortSignals
) {
return result;
}
//
result = true;
mXSIGNALLERNAMEAllowShortSignals = false;
//
return result;
}
//
// Check Market Base Conditions for Long Signals ...
bool XSIGNALLERNAMEHasLongConditions() {
//
bool result = false;
//
// Validate Args ...
if (
!mXSIGNALLERNAMEEnableSignaller ||
!mXSIGNALLERNAMEAllowLongSignals
) {
return result;
}
//
return result;
}
//
// Check Market Base Conditions for Short Signals ...
bool XSIGNALLERNAMEHasShortConditions() {
//
bool result = false;
//
// Validate Args ...
if (
!mXSIGNALLERNAMEEnableSignaller ||
!mXSIGNALLERNAMEAllowShortSignals
) {
return result;
}
//
return result;
}