protected override void OnBar() { CalculatePivot(); MainTrend(); Candle candle = new Candle(MarketSeries, 1, ADXPeriods, Adx); Candle prevCandle = new Candle(MarketSeries, 2, ADXPeriods, Adx); Candle prevPrevCandle = new Candle(MarketSeries, 3, ADXPeriods, Adx); if (IsTradingTime(Server.Time)) { double stopLoss = StopLoss; double takeProfit = TakeProfit; double open = MarketSeries.Open.LastValue; // Bullish trend if (IsBuying) { takeProfit = GetDistance(open, Resistance2) - 4; double distanceToWResistance = GetDistance(open, WResistance1); if (takeProfit >= distanceToWResistance) takeProfit = distanceToWResistance - 4; stopLoss = GetDistance(((Pivot + Support1) * 0.5), open) + 4; if (EnableMoneyManagement && !MoneyManagement.GetRiskRewardRatio(stopLoss, takeProfit)) return; if (!MoneyManagement.CanOpenPosition(Positions, MaxOpenPositions)) return; if (StarTrading && CandlestickPattern.BullishMorningStar(candle, prevCandle, prevPrevCandle) && candle.Close > Pivot && candle.Close < Resistance1 && candle.Close < WResistance1) if (DistanceFromLevel(Pivot, candle.Close)) ExecuteOrder(TradeType.Buy, "BullishMorningStar", stopLoss, takeProfit); if (EngulfingTrading && CandlestickPattern.BullishEngulfing(candle, prevCandle) && candle.Close > Pivot && candle.Close < Resistance1 && candle.Close < WResistance1) if (DistanceFromLevel(Pivot, candle.Close)) ExecuteOrder(TradeType.Buy, "BullishEngulfing", stopLoss, takeProfit); if (PiercingCoverTrading && CandlestickPattern.BullishPiercing(candle, prevCandle) && candle.Close > Pivot && candle.Close < Resistance1 && candle.Close < WResistance1) if (DistanceFromLevel(Pivot, candle.Close)) ExecuteOrder(TradeType.Buy, "BullishPiercing", stopLoss, takeProfit); if (HaramiTrading && CandlestickPattern.BullishHarami(candle, prevCandle) && candle.Close > Pivot && candle.Close < Resistance1 && candle.Close < WResistance1) if (DistanceFromLevel(Pivot, candle.Close)) ExecuteOrder(TradeType.Buy, "BullishHarami", stopLoss, takeProfit); if (HammerTrading && CandlestickPattern.BullishHammer(candle) && candle.Close > Pivot && candle.Close < Resistance1 && candle.Close < WResistance1) if (DistanceFromLevel(Pivot, candle.Close)) ExecuteOrder(TradeType.Buy, "BullishHammer", stopLoss, takeProfit); } // Bearish trend if (IsSelling) { takeProfit = GetDistance(open, Support2) - 4; double distanceToWSupport = GetDistance(open, WSupport1); if (takeProfit >= distanceToWSupport) takeProfit = distanceToWSupport - 4; stopLoss = GetDistance(((Pivot + Resistance1) * 0.5), open) + 4; if (EnableMoneyManagement && !MoneyManagement.GetRiskRewardRatio(stopLoss, takeProfit)) return; if (!MoneyManagement.CanOpenPosition(Positions, MaxOpenPositions)) return; if (StarTrading && CandlestickPattern.BearishEveningStar(candle, prevCandle, prevPrevCandle) && candle.Close < Pivot && candle.Close > Support1 && candle.Close > WSupport1) if (DistanceFromLevel(Pivot, candle.Close)) ExecuteOrder(TradeType.Sell, "BearishEveningStar", stopLoss, takeProfit); if (EngulfingTrading && CandlestickPattern.BearishEngulfing(candle, prevCandle) && candle.Close < Pivot && candle.Close > Support1 && candle.Close > WSupport1) if (DistanceFromLevel(Pivot, candle.Close)) ExecuteOrder(TradeType.Sell, "BearishEngulfing", stopLoss, takeProfit); if (PiercingCoverTrading && CandlestickPattern.BearishDarkCloudCover(candle, prevCandle) && candle.Close < Pivot && candle.Close > Support1 && candle.Close > WSupport1) if (DistanceFromLevel(Pivot, candle.Close)) ExecuteOrder(TradeType.Sell, "BearishDarkCloudCover", stopLoss, takeProfit); if (HaramiTrading && CandlestickPattern.BearishHarami(candle, prevCandle) && candle.Close < Pivot && candle.Close > Support1 && candle.Close > WSupport1) if (DistanceFromLevel(Pivot, candle.Close)) ExecuteOrder(TradeType.Sell, "BearishHarami", stopLoss, takeProfit); if (HammerTrading && CandlestickPattern.BearishHammer(candle) && candle.Close < Pivot && candle.Close > Support1 && candle.Close > WSupport1) if (DistanceFromLevel(Pivot, candle.Close)) ExecuteOrder(TradeType.Sell, "BearishHammer", stopLoss, takeProfit); } } }
public static bool BullishPiercing(Candle candle, Candle prevCandle) { bool cond1 = (candle.Open < prevCandle.Close) ? true : false; bool cond2 = (candle.Low < prevCandle.Low) ? true : false; double midPoint = (prevCandle.Close + prevCandle.Open) / 2; bool cond3 = (candle.Close > midPoint) ? true : false; bool cond4 = (candle.High < prevCandle.High) ? true : false; if (candle.Bull && !prevCandle.Bull && cond1 && cond2 && cond3 && cond4) if (!IsDojiCandles(candle, prevCandle)) return true; return false; }
private static bool IsDojiCandles(Candle candle1, Candle candle2) { if (candle1.Type == TypeCandlestick.CandDoji || candle2.Type == TypeCandlestick.CandDoji) return true; return false; }
public static bool BullishHarami(Candle candle, Candle prevCandle) { bool cond1 = (candle.High < prevCandle.High) ? true : false; bool cond2 = (candle.Low > prevCandle.Low) ? true : false; bool cond3 = (candle.Open < prevCandle.Close) ? true : false; bool cond4 = (candle.Close > prevCandle.Open) ? true : false; bool cond5 = (candle.Close < prevCandle.Close) ? true : false; bool cond6 = (candle.Open > prevCandle.Open) ? true : false; double midPoint = (prevCandle.Open + prevCandle.Close) * 0.5; bool cond7 = (candle.Close >= midPoint) ? true : false; bool cond8 = (candle.Close <= midPoint) ? true : false; if (candle.IsSell() && prevCandle.IsBuy() && cond1 && cond2 && cond3 && cond4 && cond7) return true; if (candle.IsBuy() && prevCandle.IsBuy() && cond1 && cond2 && cond5 && cond6 && cond8) return true; return false; }
public static bool BullishMorningStar(Candle candle, Candle prevCandle, Candle prevPrevCandle) { bool cond1 = (candle.High > prevCandle.High && candle.Close > prevCandle.High) ? true : false; bool cond2 = (candle.Open > prevCandle.Close) ? true : false; bool cond3 = (prevPrevCandle.High > prevCandle.High && prevPrevCandle.Open > prevCandle.High) ? true : false; bool cond4 = (prevPrevCandle.Close > prevCandle.Close) ? true : false; double midPoint = (prevPrevCandle.Close + prevPrevCandle.Open) / 2; bool cond5 = (candle.Close > midPoint) ? true : false; if (candle.IsBuy() && (prevCandle.IsBuy() || prevCandle.IsSell()) && prevPrevCandle.IsSell() && cond1 && cond2 && cond3 && cond4 && cond5) return true; return false; }
public static bool BullishHammer(Candle candle) { double point = candle.High - (candle.High - candle.Low) * 0.3; if ((candle.IsBuy() || candle.IsSell()) && candle.Close > point && candle.Open > point) return true; return false; }
// Bullish reversal patterns public static bool BullishEngulfing(Candle candle, Candle prevCandle) { bool cond1 = (candle.High > prevCandle.High) ? true : false; bool cond2 = (candle.High > prevCandle.Open) ? true : false; bool cond3 = (candle.Close > prevCandle.High) ? true : false; bool cond4 = (candle.Close >= prevCandle.Open) ? true : false; bool cond5 = (candle.Low < prevCandle.Close) ? true : false; bool cond6 = (candle.Low < prevCandle.Low) ? true : false; bool cond7 = (candle.Open <= prevCandle.Close) ? true : false; bool cond8 = (candle.Open < prevCandle.Low) ? true : false; double midPoint = (candle.Close + candle.Open) * 0.5; bool cond9 = (prevCandle.High >= midPoint) ? true : false; bool cond10 = (prevCandle.Low <= midPoint) ? true : false; // Ideally situation if (candle.IsBuy() && prevCandle.IsSell() && cond1 && cond2 && cond3 && cond4 && cond5 && cond6 && cond7 && cond7 && cond9 && cond10) if (!IsDojiCandles(candle, prevCandle)) return true; // Normal situation if (candle.IsBuy() && prevCandle.IsSell() && cond1 && cond4 && cond6 && cond7 && cond9 && cond10) if (!IsDojiCandles(candle, prevCandle)) return true; return false; }
public static bool BearishHammer(Candle candle) { double point = candle.Low + (candle.High - candle.Low) * 0.3; if (candle.Close <= point && candle.Open <= point) return true; return false; }
public static bool BearishEveningStar(Candle candle, Candle prevCandle, Candle prevPrevCandle) { bool cond1 = (candle.Low < prevCandle.Low && candle.Close < prevCandle.Low) ? true : false; bool cond2 = (candle.Open < prevCandle.Close) ? true : false; bool cond3 = (prevPrevCandle.Low < prevCandle.Low && prevPrevCandle.Open < prevCandle.Low) ? true : false; bool cond4 = (prevPrevCandle.Close < prevCandle.Close) ? true : false; double midPoint = (prevPrevCandle.Close + prevPrevCandle.Open) / 2; bool cond5 = (candle.Close < midPoint) ? true : false; if (candle.IsSell() && (prevCandle.IsBuy() || prevCandle.IsSell()) && prevPrevCandle.IsBuy() && cond1 && cond2 && cond3 && cond4 && cond5) return true; return false; }
public static bool BearishDarkCloudCover(Candle candle, Candle prevCandle) { bool cond1 = (candle.Open > prevCandle.Close) ? true : false; bool cond2 = (candle.High > prevCandle.High) ? true : false; double midPoint = (prevCandle.Close + prevCandle.Open) / 2; bool cond3 = (candle.Close < midPoint) ? true : false; bool cond4 = (candle.Low > prevCandle.Low) ? true : false; if (!candle.Bull && prevCandle.Bull && cond1 && cond2 && cond3 && cond4) if (!IsDojiCandles(candle, prevCandle)) return true; return false; }