Logo de "Doji Engulf"
Indicateur
3 téléchargements
Version 1.0, Jul 2025
Windows, Mac
3
Installations gratuites

using cAlgo.API;

using cAlgo.API.Indicators;

using cAlgo.API.Internals;

using System;


namespace cAlgo.Indicators

{

[Indicator(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]

public class DojiStrategyIndicator : Indicator

{

[Parameter("Doji size", DefaultValue = 0.05, MinValue = 0.01, Step = 0.01)]

public double DojiSize { get; set; }


[Parameter("Long Candle Ratio", DefaultValue = 0.7, MaxValue = 1, Step = 0.1)]

public double LongCandleRatio { get; set; }


[Parameter("Use Volume Filter?", DefaultValue = false)]

public bool UseVolumeFilter { get; set; }


[Parameter("Volume Moving Average Period", DefaultValue = 24)]

public int VolumeMA { get; set; }


[Parameter("RSI Period", DefaultValue = 14)]

public int RSIPeriod { get; set; }


[Parameter("Wick-to-Body Ratio", DefaultValue = 2.5, MinValue = 1.0, Step = 0.1)]

public double WickToBodyRatio { get; set; }


private MovingAverage volumeMA;

private RelativeStrengthIndex rsi;


[Output("Doji Signal", Color = Colors.Orange, PlotType = PlotType.Points, Thickness = 2)]

public IndicatorDataSeries DojiSignal { get; set; }


protected override void Initialize()

{

if (UseVolumeFilter)

volumeMA = Indicators.MovingAverage(MarketSeries.TickVolume, VolumeMA, MovingAverageType.Simple);


rsi = Indicators.RelativeStrengthIndex(MarketSeries.Close, RSIPeriod);

}


public override void Calculate(int index)

{

double body = MarketSeries.Close[index] - MarketSeries.Open[index];

double range = MarketSeries.High[index] - MarketSeries.Low[index];

double abody = Math.Abs(body);

double ratio = abody / range;


bool isDoji = abody <= range * DojiSize;

bool goStar = isDoji && (!UseVolumeFilter || MarketSeries.TickVolume[index] > volumeMA.Result[index]);


if (goStar && IsHigherTimeFrame(out int timeFrameNumber, out string label))

{

DojiSignal[index] = MarketSeries.Close[index]; // Mark the Doji on the chart

Chart.DrawIcon("Doji" + TimeFrame.ToString() + index, ChartIconType.Diamond, index, MarketSeries.Close[index], Color.Orange);


// Highlight the high and low of the Doji candle with solid lines that extend over the next 3 candles

HighlightDojiHighLow(index, timeFrameNumber, label);

}


// SMT Divergence detection is now applied to all time frames

DetectSMTDivergence(index);

}


private bool IsHigherTimeFrame(out int timeFrameNumber, out string label)

{

timeFrameNumber = 0;

label = string.Empty;


if (TimeFrame == TimeFrame.Minute15)

{

timeFrameNumber = 15;

label = "0.25";

return true;

}

else if (TimeFrame == TimeFrame.Minute30)

{

timeFrameNumber = 30;

label = "0.5";

return true;

}

else if (TimeFrame == TimeFrame.Minute45)

{

timeFrameNumber = 45;

label = "0.75";

return true;

}

else if (TimeFrame == TimeFrame.Hour)

{

timeFrameNumber = 1;

label = "1";

return true;

}

else if (TimeFrame == TimeFrame.Hour2)

{

timeFrameNumber = 2;

label = "48";

return true;

}

else if (TimeFrame == TimeFrame.Hour4)

{

timeFrameNumber = 4;

label = "4";

return true;

}

else if (TimeFrame == TimeFrame.Daily)

{

timeFrameNumber = 24;

label = "24";

return true;

}

else if (TimeFrame == TimeFrame.Weekly)

{

timeFrameNumber = 168;

label = "W";

return true;

}

else if (TimeFrame == TimeFrame.Monthly)

{

timeFrameNumber = 720;

label = "M";

return true;

}


return false;

}


private void HighlightDojiHighLow(int dojiIndex, int timeFrameNumber, string label)

{

double dojiHigh = MarketSeries.High[dojiIndex];

double dojiLow = MarketSeries.Low[dojiIndex];


// Draw solid horizontal lines at the high and low of the Doji candle extending over the next 3 candles

Chart.DrawTrendLine("DojiHighLine" + TimeFrame.ToString() + dojiIndex, dojiIndex, dojiHigh, dojiIndex + 3, dojiHigh, Color.Blue, 2, LineStyle.Solid).IsInteractive = true;

Chart.DrawTrendLine("DojiLowLine" + TimeFrame.ToString() + dojiIndex, dojiIndex, dojiLow, dojiIndex + 3, dojiLow, Color.Red, 2, LineStyle.Solid).IsInteractive = true;


// Add time frame number or label text next to the blue line

Chart.DrawText("TimeFrameHigh" + TimeFrame.ToString() + dojiIndex, label, dojiIndex + 3, dojiHigh, Color.Green).IsInteractive = true;

}


private void DetectSMTDivergence(int index)

{

// Check if the current high or low forms a divergence with the RSI

double currentHigh = MarketSeries.High[index];

double currentLow = MarketSeries.Low[index];


double prevHigh = MarketSeries.High[index - 1];

double prevLow = MarketSeries.Low[index - 1];


double currentRSI = rsi.Result[index];

double prevRSI = rsi.Result[index - 1];


bool isWickDivergence = IsWickDivergence(index, currentHigh, currentLow, prevHigh, prevLow);


if (isWickDivergence)

{

// Bearish Divergence: Price makes a higher high, RSI makes a lower high

if (currentHigh > prevHigh && currentRSI < prevRSI)

{

// Mark the divergence on the chart with a unique identifier for this time frame

Chart.DrawIcon("BearishDivergence" + TimeFrame.ToString() + index, ChartIconType.DownArrow, index, currentHigh, Color.Red);

}


// Bullish Divergence: Price makes a lower low, RSI makes a higher low

if (currentLow < prevLow && currentRSI > prevRSI)

{

// Mark the divergence on the chart with a unique identifier for this time frame

Chart.DrawIcon("BullishDivergence" + TimeFrame.ToString() + index, ChartIconType.UpArrow, index, currentLow, Color.Green);

}

}

}


private bool IsWickDivergence(int index, double currentHigh, double currentLow, double prevHigh, double prevLow)

{

double currentBody = Math.Abs(MarketSeries.Close[index] - MarketSeries.Open[index]);

double currentRange = currentHigh - currentLow;


double prevBody = Math.Abs(MarketSeries.Close[index - 1] - MarketSeries.Open[index - 1]);

double prevRange = prevHigh - prevLow;


// Determine if the current candle has a small body and long wicks

bool currentHasLongWicks = (currentHigh - MarketSeries.Close[index]) > currentBody * WickToBodyRatio &&

(MarketSeries.Open[index] - currentLow) > currentBody * WickToBodyRatio;


// Determine if the previous candle has a small body and long wicks

bool prevHasLongWicks = (prevHigh - MarketSeries.Close[index - 1]) > prevBody * WickToBodyRatio &&

(MarketSeries.Open[index - 1] - prevLow) > prevBody * WickToBodyRatio;


return currentHasLongWicks || prevHasLongWicks;

}

}

}

Profil de l'indicateur
0.0
Avis : 0
Avis clients
Il n'y a pas encore d'avis sur ce produit. Vous l'avez déjà essayé ? Soyez le premier à en parler aux autres !
Les produits disponibles sur cTrader Store, notamment les bots de trading, les indicateurs et les plug-ins, sont fournis par des développeurs tiers et mis à disposition à titre informatif et à des fins d'accès technique uniquement. cTrader Store n'est pas un courtier et ne fournit aucun conseil en investissement, aucune recommandation personnelle ni aucune garantie quant aux performances futures.

Plus de cet auteur

Indicateur
The Session Golden Hours indicator is designed for serious traders looking to visualize high-probability

Vous pourriez aussi aimer

Indicateur
Forex
BTCUSD
+9
This indicator implements an Opening Range Breakout (ORB) trading strategy, designed to capture momentum during the most
Indicateur
Forex
cTrader ZigZag Alerts: Precision Swing Detection, Alerts, and Fibonacci.
Indicateur
SMC
Prop
+14
BoS ChoCH Pro,Strict Mode,False Breakout Filter,Average hit rate: 72-78%
Indicateur
Drawdown Monitor
[ANALYTICAL/INFORMATIONAL] Track NET positions, Break-Even & Drawdown. No order execution.
Indicateur
Prop
ZigZag
+5
All-in-One ICT/SMC Institutional Framework — Ranges, Structure, Liquidity, Fibonacci & Time Engine.
Indicateur
Channel
Moving Average
+2
This is a high-quality implementation of the TTM Squeeze logic applied directly to candle coloring.
Indicateur
AI
SMC
+19
Fixed Range Volume Profile - TradingView Style (POC, VAH, VAL)
Indicateur
RSI
Forex
+12
Indicator pattern signal moment
Indicateur
ADX
ATR
+5
10 Factors. One Signal. Zero Guesswork.
Indicateur
ATR
Prop
+13
Enhance trading with ATR Bands! Visualize market volatility using dynamic upper and lower ATR bands for precise decision
Indicateur
ATR
Channel
+5
This fifth indicator is highly visual and focused on Supply and Demand zones
Indicateur
ATR
RSI
+19
Multi-timeframe heatmap scoring Direction, Strength & Volatility at a glance!
Indicateur
SmartFibonacci — automatic Fibonacci retracements & extensions with swing detection, alerts and clean labels for cTrader
Indicateur
Forex
NAS100
+3
volumen perfile
Indicateur
EMA
MACD
+5
Multi-timeframe MACD with color-changing line, 4-color histogram & triangle signals.
Indicateur
Aggressive
Supertrend
+5
Stop trading with tunnel vision! 🚫 The Heat Map Dashboard is an institutional-grade visual trading assistant
Logo de "FairValueGap"
Les mieux notés
4.5
(2)
Gratuit
Indicateur
This Fair Value Gap (FVG) indicator is a technical analysis tool used to identify potential price imbalances.
Indicateur
RSI‑powered robot for high‑volatility scalping, no fuss.
3
Installations gratuites