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
ADX
ATR
+5
Lass System: Non-repainting M5 cTrader indicator with winrate dashboard & multi-asset alerts (Gold, BTC, EURUSD).
Indicador
SMC
Prop
+9
PDL/PDH/PWL/PWH and Session higs/lows (customizable)
Indicador
Prop
Forex
+13
Unlock trading precision with QQE! Dual QQE indicators with a Bollinger Bands zero line provide clear buy/sell signals.
Indicador
RSI
Breakout
+1
📊 Liquidation Map: Potential areas where highly leveraged investors might face liquidations.
Indicador
AI
Grid
+17
Clean 3D, Sleek Candles for Trend Patterns.
Indicador
Market Structure
Support & Resistance
Auto-centers price when it moves beyond threshold. Adjustable zoom. Works on any chart type. Never lose price again.
Indicador
AI
ATR
+27
Market Cipher B
Indicador
RSI
MACD
+1
Smooths price action with 6 MAs (3 SMA, 3 EMA). Reduces noise, clarifies trends 📈📉
Indicador
Inside Bar
Save time by lighting a candle to look within yourself in another temporality
Indicador
Forex
BTCUSD
+5
Daily/Weekly/Monthly - Highs & Lows Indicator (Customizable Settings)
Indicador
Forex
Crypto
+6
The cTrader Chaos Reversals indicator brings high-quality reversal signals to traders.
Indicador
ATR
RSI
+16
Multi-timeframe trend indicator using EMA, MACD & ADX to confirm high-probability buy and sell bias.
Indicador
Prop
VWAP
+15
VWAP: Follow the smart money. Trade with real volume and the fair price on your side!
Indicador
Forex
BTCUSD
+5
Buy-Side & Sell-Side Liquidity (BSL/SSL) Indicator
Indicador
SMC
Prop
+14
FVG Multi Time Frame Indicator
Indicador
SMC
Prop
+6
Automatically draws the Opening Range (High & Low) for Tokyo, London, and New York sessions. Configurable start times,
Indicador
BOS
Fibonacci
+4
Automatically draws major trading sessions, killzones, and SMC daily liquidity targets directly on your cTrader charts.
Indicador
Forex
Crypto
+4
Auto Trend Line Indicator for cTrader
3
Instalações gratuitas