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

Descrição

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;

}

}

}

Resumo

Perfil do indicador

Avaliações de clientes

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!

Conversa

Perguntas frequentes

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
Forex
GBPUSD
+5
Visual warning zones for high-impact news so you can manage risk before volatility hits.
Indicador
VWAP
Volume
+3
Don't trust static support and resistance levels, this indicator combines Fibonacci and VWAP in one powerful tool.
Indicador
MACD
Forecast future prices using historical MACD trends. Features a probability fan for smart entries and dynamic targets.
Indicador
RSI
MACD
+2
A straightforward yet effective tool signals entry points for both buying and selling. Include 3 Moving Average
Indicador
AI
ATR
+20
Buy and Sell Signals
Indicador
Prop
Forex
+13
Volume Meter
Indicador
ATR
RSI
+1
AI Supertrend MTF uses K-NN Machine Learning to eliminate lag. Features multi-timeframe projection & dynamic glowing clo
Indicador
Forex
Crypto
+2
HTF Candle
Indicador
Imbalance
Inside Bar
+3
A clean and powerful Smart Money Concepts tool combining Fair Value Gaps, Previous Daily High/Low, Inside/Outside bar
Indicador
AI
SMC
+18
ICT First Presented FVG
Indicador
AI
SMC
+14
Refined cleaner version of Key Levels indicator with broker UTC offset, styles & label alignment.
Indicador
Grid
BTCUSD
+7
A powerful overlay tool designed to automatically plot Fibonacci retracement levels based on a custom window.
Indicador
EMA
MACD
+2
Combines MACD's Fast/Slow EMAs with a dynamic Volume Profile, coloring volume by direction and highlighting the POC.
Indicador
RSI
Forex
+4
New version of one of my favorites includes Fibonacci and moving average convergence divergence lines
Indicador
ATR
Prop
+12
🟢 Real swing-based support & resistance with ATR-powered half-bands 🔴
Indicador
Key Levels
Liquidity Grab
+3
Visual market context dashboard showing bias states, CE positioning, session status and sweep context.
Indicador
Signal
Trades Opening Range Breakouts Indicator with dynamic stops/targets adapting to market volatility.
Indicador
XAUUSD
Professional Volume Profile Indicator - Shows volume distribution, POC, Value Areas & Buy/Sell pressure.

Preço

3
Instalações gratuitas