16 KiB
16 KiB
OSC Signalling Conditions
there are some Verifications For signals. here i described them.
Long
- OSC
- When Market Middleage Cross Over MC Fast
- When MCFast Under MC Slow
- When MakretMiddleage
// //
// // XMA Based Signals ...
// hasLongSignal =
// //
// // XMA ...
// //
// // SC Fast Cross Over Market Middleage ...
// xmaState.scFast > xmaState.marketMiddleage
// && !(xmaState.scFastPrev > xmaState.marketMiddleage)
// //
// // when Short Cycle is Trending Up ...
// && xmaState.scFast > xmaState.scSlow
// && xmaState.scFastPrev > xmaState.scSlowPrev
// //
// // When Medium Cycle is Trending Up ...
// && xmaState.mcFast > xmaState.mcSlow
// && xmaState.mcFastPrev > xmaState.mcSlowPrev
// //
// // and Medium Cycle TrendPower is Going Up ...
// && MathAbs(xmaState.mcFast - xmaState.mcSlow) >
// MathAbs(xmaState.mcFastPrev - xmaState.mcSlowPrev)
// //
// // When Long Cycle is Trending Up ...
// && xmaState.lcFast > xmaState.lcSlow
// && xmaState.lcFastPrev > xmaState.lcSlowPrev
// //
// // and Long Cycle TrendPower is Going Up ...
// && MathAbs(xmaState.lcFast - xmaState.lcSlow) >
// MathAbs(xmaState.lcFastPrev - xmaState.lcSlowPrev)
// //
// // Short Cycle Slow bigger thhan Medium Cycle Fast ...
// && xmaState.scSlow > xmaState.mcFast
// //
// // OSC ...
// // Check OSC Fast and Slow is Less than 0.5 ...
// && oscState.fastOSC < 0.5
// && oscState.slowOSC < 0.5
// && oscState.fastOSCPrev < 0.5
// && oscState.slowOSCPrev < 0.5
// && oscState.fastOSC > oscState.fastOSCPrev
// //
// // Check OSC Minimum Signal Power ...
// // this Helps for Detect Market exits from Ranging ...
// && minPowOSC > 0
// ?
// //
// // Check Conditions only if value provided ...
// oscState.powerOSCPrev < 0
// && MathAbs(oscState.powerOSCPrev) > minPowOSC
// :
// //
// // ... other wise, ignore ...
// true
// //
// // Check Previous Candle Signal Power must be Lower than
// // Current Signal Power and the Direction Must be Up Trend ...
// && oscState.powerOSCPrev < oscState.powerOSC
// //
// // Also we Have to Check Market not ranging ...
// && !IsOSCMarketRanging(
// bar_index + 1,
// marketLen,
// minPowOSC,
// fastOSCLen,
// fastOSCMul,
// slowOSCLen,
// slowOSCMul
// )
// //
// // ZIGZAG ...
// && zigZagState.isWaitForTrendDown
// && !zigZagState.isWaitForTrendUp
// //
// // XADX ...
// // TODO: add XADX Base Conditions for Long Trades ...
// // When ADX Trend Power bigger than 20 and less than 50 ...
// && !adxState.trendPower < 23
// && !adxState.trendPowerPrev < 23
// //
// // Check Trend Direction for Signals ...
// && adxState.upDirection > adxState.downDirection
// && adxState.upDirectionPrev > adxState.downDirectionPrev
// // && adxState.trendPower < 50
// // && adxState.trendPower > adxState.trendPowerPrev
// //
// // PRICE Checking ...
// // price must be less than Candle High at openning time ...
// && longEntryPrice <= candleHigh
// //
// // also Candle High and Low must be above than lc Fast & lc Slow ...
// && longEntryPrice > xmaState.lcFast
// && longEntryPrice > xmaState.lcSlow
// && (
// !IsSharpBullishHappens(
// bar_index,
// marketLen * 2
// )
// || IsSharpBearishHappens(
// bar_index,
// marketLen * 2
// )
// )
// ;
//
// Check for Long Trades if some Sharp Bullish Happens,
// Decrease sl size for fixing tps ...
// if (isSharpBullishHappens) {
// sl = sl / 1.5;
// }
//
// TODO: Remove this ...
// if (xmaStates[0].marketMiddleage > xmaStates[1].marketMiddleage) {
// r2rRatio = r2rRatio * 2;
// }
//
hasLongSignal =
//
// Global ...
true
//
&& (
//
// XMA ...
(
//
true
//
// Check Medium Cycle is in TrendDown ...
&& xmaStates[0].mcSlow > xmaStates[0].mcFast
&& xmaStates[1].mcSlow > xmaStates[1].mcFast
&& xmaStates[2].mcSlow > xmaStates[2].mcFast
//
// Check Market Middleage Cross Over MC Slow ...
// && isMarketMiddleCrossOverMCSlow
// && xmaStates[0].marketMiddleage >= (5 * _Point);
&& xmaStates[0].marketMiddleage > xmaStates[0].mcSlow
&& !(xmaStates[1].marketMiddleage >= xmaStates[1].mcSlow)
//
// IMPORTANT: by passing this condition i can Increase r2r ration ...
// && xmaStates[0].marketMiddleage > xmaStates[1].marketMiddleage
&& MathAbs(xmaStates[0].marketMiddleage - xmaStates[1].marketMiddleage) > _Point
)
// ||
//
// OSC ...
// (
// //
// true
// //
// // Check osc fast cross over slow ...
// && oscStates[1].fastOSC > oscStates[1].slowOSC
// && !(oscStates[2].fastOSC >= oscStates[2].slowOSC)
// //
// // Check OSC Fast bigger than 0.5 ...
// && oscStates[1].fastOSC > 0.5
// && (
// xmaStates[1].mcFast > xmaStates[1].mcSlow
// ?
// //
// xmaStates[1].marketMiddleage > xmaStates[1].mcSlow
// //
// && xmaStates[1].marketMiddleage > xmaStates[2].marketMiddleage
// && xmaStates[1].marketMiddleage > xmaStates[3].marketMiddleage
// && xmaStates[2].marketMiddleage > xmaStates[3].marketMiddleage
// :
// true
// )
// )
)
;
//
// TODO: Determines Where and How close Long Trades on Trend Reversal Points ...
closeLongTrades =
false
//
// This is One Conditions ...
// (
// //
// xmaStates[0].marketMiddleage < xmaStates[0].mcFast
// && (
// xmaStates[0].marketMiddleage < xmaStates[0].mcSlow
// || xmaStates[1].marketMiddleage < xmaStates[1].mcSlow
// || xmaStates[2].marketMiddleage < xmaStates[2].mcSlow
// )
// //
// && xmaStates[0].mcFast > xmaStates[0].mcSlow
// //
// && xmaStates[0].marketMiddleage < xmaStates[1].marketMiddleage
// && xmaStates[1].marketMiddleage < xmaStates[2].marketMiddleage
// )
;
//
waitForLongSignals =
true;
// waitForLongSignals
// ?
// //
// true
// //
// // Closing Options ...
// //
// // Trades Doesnt Closed ...
// && !closeLongTrades
// //
// // PRICE ...
// //
// // Bullish Sharp doesnt occured ...
// && !isSharpBullishHappens
// //
// // XMA ...
// //
// && xmaStates[0].marketMiddleage < xmaStates[0].mcFast
// && !(
// //
// // On MC Trend Up ...
// xmaStates[0].mcFast > xmaStates[0].mcSlow
// ?
// //
// // Market Middleage doesnt Trending Down ...
// xmaStates[0].marketMiddleage - xmaStates[0].mcFast > xmaStates[1].marketMiddleage - xmaStates[1].mcFast
// && xmaStates[0].marketMiddleage - xmaStates[0].mcFast > xmaStates[2].marketMiddleage - xmaStates[2].mcFast
// && xmaStates[0].marketMiddleage - xmaStates[0].mcFast > xmaStates[3].marketMiddleage - xmaStates[3].mcFast
// && xmaStates[1].marketMiddleage - xmaStates[1].mcFast > xmaStates[3].marketMiddleage - xmaStates[3].mcFast
// :
// true
// )
// :
// //
// true
// && (
// //
// // PRICE ...
// // isSharpBearishHappens
// //
// // XMA ...
// isMCFastCrossUnderSlow
// || isMarketMiddleCrossUnderMCSlow
// )
;
//
bool xmaHasLongSignal =
//
// Global ...
true
//
// XMA ...
//
// Check Medium Cycle is in TrendDown ...
// && xmaStates[0].mcSlow > xmaStates[0].mcFast
// && xmaStates[1].mcSlow > xmaStates[1].mcFast
// && xmaStates[2].mcSlow > xmaStates[2].mcFast
//
// Check Market Middleage Cross Over MC Slow ...
&& isMarketMiddleageTrendUp
//
// Check distance between Medium Cycle Market
&& isMarketMiddleCrossOverMCSlow
// && xmaStates[0].marketMiddleage > xmaStates[0].mcSlow
// && MathAbs(xmaStates[1].marketMiddleage - xmaStates[2].mcSlow) > _Point
//
// IMPORTANT: by passing this condition i can Increase r2r ration ...
// && xmaStates[0].marketMiddleage > xmaStates[1].marketMiddleage
&& MathAbs(xmaStates[1].marketMiddleage - xmaStates[2].marketMiddleage) > _Point
//
// OSC ...
&& oscStates[1].fastOSC > 0.5
&& !isOSCPowerTrendDown
&& oscStates[1].powerOSC > 0
//
// PRICE ...
&& !isSharpBullishHappens
&& longEntryPrice < marketHigh[0]
&& marketHigh[0] > marketHigh[1]
&& marketHigh[0] > marketHigh[2]
;
//
bool oscHasLongSignal =
//
false
//
// OSC ...
//
// Check osc is Trending Up ...
// isOSCTrendUp
//
// Check osc fast cross over slow ...
// isOSCFastCrossOverSlow
//
// Check OSC Market not Ranging ...
// && !isOSCMarketRanging
//
// Check OSC Fast bigger than 0.5 ...
// && oscStates[1].fastOSC > 0.5
// && oscStates[1].slowOSC > 0.5
//
// PRICE ...
// && !isSharpBullishHappens
// && longEntryPrice < marketHigh[0]
// && marketHigh[0] > marketHigh[1]
// && marketHigh[0] > marketHigh[2]
;
//
bool hasLongSignal =
xmaHasLongSignal
||
oscHasLongSignal
;
//
bool hasLongSignal =
//
// Global ...
true
//
&&
// XMA ...
//
// Check Parabolic Sar Cross Under Market Middleage
// Or Trending Down ...
isParabolicCrossUnderMarketMiddle
&&
//
// Check PSar Value is Bigger Than Market Middleage ...
xmaStates[1].parabolicSAR < xmaStates[1].marketMiddleage
&&
//
// Check Parabolic Revrse Change bigger than Prev Cancle Close ...
xmaStates[1].parabolicSAR < MathMin(marketOpen[1], marketClose[1])
&&
//
// Now We Have Separate our Conditions based on
// Market Trends ...
//
// Medium Cycle Market Trends Up ...
isMCTrendUp
?
(
//
// Market Middle must be in Trending Up ...
isMarketMiddleageTrendUp
&&
//
// Market Middle Must be less than Maximum in Cycle ...
xmaStates[1].marketMiddleage < marketMiddlesMinMax.max
&&
//
// Market Middleage must be above of MC Fast ...
xmaStates[1].marketMiddleage > xmaStates[1].mcFast
&&
//
// Check Distance between SC Fast and Market Middle ...
MathAbs(xmaStates[1].scFast - xmaStates[1].scSlow) > (3 * _Point)
//
// Minimum Signal Power of OSC ...
// MathAbs(oscStates[1].powerOSC > minPowOSC)
)
:
//
// Medium Cycle Market Trends Down ...
false
// ()
;
//
// Based On MC Market Trend Up ...
//
// Based On MC Market Down Trend ...
// isMCTrendDown
// || isMCFastCrossUnderSlow
// ?
// (
//
// Find SC Fast Cross Over SC Slow, which happens betweentwo of SC Fast Under SC Slow ...
// isSCFastCrossOverSlow
// //
// // Find the Moment which Market Middleage Cross Over MC Fast ...
// isMarketMiddleCrossOverMCFast
// //
// // Check Parabolix SAR for Long Trades ...
// && xmaStates[0].parabolicSAR < xmaStates[0].marketMiddleage
// && xmaStates[1].parabolicSAR < xmaStates[1].marketMiddleage
// //
// // Check Market Middle and Parabolic SAR Distance ...
// && MathAbs(xmaStates[1].marketMiddleage - xmaStates[1].parabolicSAR) >= 1
// //
// // Check Distance between MCSlow and MCFast bigger than MarketMiddle and Parabolic SAR ...
// && MathAbs(xmaStates[1].mcFast - xmaStates[1].mcSlow) > MathAbs(xmaStates[1].marketMiddleage - xmaStates[1].parabolicSAR)
// )
// :
// //
// // Based On MC Market Up Trend ...
// false
//
oscHasLongSignal =
//
oscStates[0].fastOSC > oscStates[0].slowOSC
&& (
(
oscStates[0].fastOSC > 0.5
&& oscStates[0].fastOSC < 0.75
)
|| oscStates[0].fastOSC <= 0.5
)
&& (
oscStates[0].powerOSC > 0
|| oscStates[1].powerOSC > 0
)
//
&& xmaStates[0].scFast > xmaStates[0].marketMiddleage
&& MathAbs(xmaStates[0].scFast - xmaStates[0].marketMiddleage) > (20 * _Point)
//
&& xmaStates[1].scFast > xmaStates[1].marketMiddleage
&& MathAbs(xmaStates[1].scFast - xmaStates[1].marketMiddleage) > (20 * _Point)
//
&& xmaStates[2].scFast > xmaStates[2].marketMiddleage
//
&& xmaStates[0].mcFast > xmaStates[0].mcSlow
&& MathAbs(xmaStates[0].mcFast - xmaStates[0].mcSlow) > (50 * _Point)
//
&& xmaStates[0].mcFast < xmaStates[0].scFast
&& xmaStates[0].mcFast < xmaStates[0].parabolicSAR
//
&& xmaStates[0].parabolicSAR < xmaStates[0].marketMiddleage
&& xmaStates[1].parabolicSAR < xmaStates[1].marketMiddleage
//
&& !isSharpBullishHappens
//
&& longEntryPrice > xmktStates[0].highestLow
&& longEntryPrice > xmaStates[0].marketMiddleage
//
&& xmktStates[0].highestLow > xmaStates[0].scFast
&& xmktStates[0].lowestHigh < xmaStates[0].scFast
&& xmktStates[0].lowestHigh < xmaStates[0].marketMiddleage
;