Logótipo de "Doji Engulf"
Indicador
3 transferências
Versão 1.0, Jul 2025
Windows, Mac
3
Instalações gratuitas

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("Tamanho do Doji", DefaultValue = 0.05, MinValue = 0.01, Step = 0.01)]

public double DojiSize { get; set; }


[Parameter("Razão da Vela Longa", DefaultValue = 0.7, MaxValue = 1, Step = 0.1)]

public double LongCandleRatio { get; set; }


[Parameter("Usar Filtro de Volume?", DefaultValue = false)]

public bool UseVolumeFilter { get; set; }


[Parameter("Período da Média Móvel de Volume", DefaultValue = 24)]

public int VolumeMA { get; set; }


[Parameter("Período do RSI", DefaultValue = 14)]

public int RSIPeriod { get; set; }


[Parameter("Razão Pavio-Corpo", DefaultValue = 2.5, MinValue = 1.0, Step = 0.1)]

public double WickToBodyRatio { get; set; }


private MovingAverage volumeMA;

private RelativeStrengthIndex rsi;


[Output("Sinal Doji", 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]; // Marcar o Doji no gráfico

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


// Destacar a máxima e mínima da vela Doji com linhas sólidas que se estendem pelas próximas 3 velas

HighlightDojiHighLow(index, timeFrameNumber, label);

}


// A detecção de divergência SMT agora é aplicada a todos os períodos de tempo

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 = "S";

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];


// Desenhar linhas horizontais sólidas na máxima e mínima da vela Doji estendendo-se pelas próximas 3 velas

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;


// Adicionar número do período ou texto do rótulo ao lado da linha azul

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

}


private void DetectSMTDivergence(int index)

{

// Verificar se a máxima ou mínima atual forma uma divergência com o 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)

{

// Divergência de baixa: o preço faz uma máxima mais alta, o RSI faz uma máxima mais baixa

if (currentHigh > prevHigh && currentRSI < prevRSI)

{

// Marcar a divergência no gráfico com um identificador único para este período

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

}


// Divergência de alta: o preço faz uma mínima mais baixa, o RSI faz uma mínima mais alta

if (currentLow < prevLow && currentRSI > prevRSI)

{

// Marcar a divergência no gráfico com um identificador único para este período

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;


// Determinar se a vela atual tem um corpo pequeno e pavios longos

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

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


// Determinar se a vela anterior tem um corpo pequeno e pavios longos

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

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


return currentHasLongWicks || prevHasLongWicks;

}

}

}

Perfil do indicador
0.0
Avaliações: 0
Avaliações de clientes
Ainda não há avaliações para este produto. Já o experimentou? Seja o primeiro a contar a outras pessoas!
Os produtos disponíveis através da cTrader Store, incluindo bots de negociação, indicadores e plugins, são fornecidos por programadores terceiros e são disponibilizados apenas para fins informativos e de acesso técnico. A cTrader Store não é um corretor e não fornece aconselhamento em matéria de investimento, recomendações pessoais ou qualquer garantia de desempenho no futuro.

Mais deste autor

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

Também poderá gostar de

Indicador
Auto Fibonacci Retracement Indicator for cTrader
Indicador
Prop
Forex
+11
🌊 See when the market is truly in play. Tsunami measures Relative Volume by time-of-day 🌊
Indicador
Forex
Alerts you when price touches Fibonacci levels. Stay organized and trade efficiently!
Indicador
Forex
Stocks
+1
Adaptive moving average that adjusts to market speed for smoother, more responsive trend signals.
Indicador
MACD
Forex
+1
😎Read the description before purchasing💩
Indicador
BOS
CHOCH
+3
Smart Money Concepts Pro v5.1 for cTrader is a structural market analysis indicator that identifies swings, BOS, CHoC
Indicador
ATR
Market Structure
+3
Support Resistance Toolkit
Indicador
RSI
Prop
+12
🧠Visually marks momentum zones when the RSI crosses the overbought/oversold thresholds (default 70/30). ✅
Indicador
ATR
EMA
+3
The UTBot you know from TradingView — now on cTrader with confirmed signals, VWAP, EMA and session overlays.
Indicador
AI
Grid
+10
Crossover Buy and Sell Alerts and signals
Indicador
RSI
SMA
+1
TradingView RSI replica for cTrader with dynamic gradients, automatic divergence detection, and alerts.
Indicador
USDJPY
MarketStructurePro – Smart BOS/CHoCH
Indicador
Prop
Forex
NEW - PNLs as % - daily, weekly, monthly, or yearly & Spread, Time To Close, PNL Alerts, custom Bid / Ask lines
Indicador
Key Levels
Supply & Demand
+2
Institutional Levels Pro is an essential tool for traders who rely on price action and institutional market structure.
Indicador
Forex
EURUSD
+4
Check the correlations between dozens of assets in one elegant display.
Indicador
Fisher Transform with smoothing. Spot reversals and cycles with precision. Great for any market, any timeframe.
Indicador
Forex
Identify 34 candlestick patterns, track trends across timeframes, and get instant alerts with this powerful trading tool
Indicador
Prop
Forex
+6
Stochastic Confluence Pro (RSI + Divergence)
3
Instalações gratuitas