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
SMC
Signal
IVT: A multi-symbol BOS scanner. Visual BULLISH/BEARISH chart labels with optional volume-filtered Telegram alerts.
Indicador
MSS
Key Levels
+4
Maps session ranges, previous highs/lows, equilibrium and premium/discount zones on your cTrader chart.
Indicador
Forex
EURUSD
+4
TREND FALLOWING: Advanced technical indicator signal.
Indicador
AI
Grid
+20
Trend Cycle – measure the life of your trends. See how long the current move has been running and how long similar trend
Indicador
Key Levels
Market Structure
+1
HTF Candle Projector displays the current Higher Timeframe candle (4H or 1H) as a real projected candle LIVE..
Indicador
ATR
BOS
+5
Full ICT/SMC 4-step setup checker that alerts a long or short setup.
Indicador
SMC
Forex
+7
Simple Smart Money Concepts (SMC)
Indicador
Breakout
Break Out Probability Experimental indicator. Credits for this indicator goes to Zeiierman !!!
Indicador
Market Structure
Stop guessing which trading session you in, with Sessions indicator sessions are in your finger tips like a pro
Indicador
AI
MACD
+8
A precision-engineered indicator designed for traders who demand signal integrity across volatile markets.
Indicador
SMC
Prop
+7
institutional-level market analysis
Indicador
VWAP
Volume
+3
Don't trust static support and resistance levels, this indicator combines Fibonacci and VWAP in one powerful tool.
Indicador
SMC
Forex
+5
The only cTrader FVG indicator with Breakaway Gap detection, mitigation tracking, and full multi-asset compatibility.
Logótipo de "VA Footprint"
Bem avaliado
4.5
(4)
$35
/
$40
Indicador
SMC
Prop
+5
VA Footprint replaces your chart with a order flow one, the most precise way to read the market.
Indicador
ATR
Forex
+3
LevelMaster S/R: Pinpoint key support & resistance zones with precision. Perfect for traders of all levels Trade smarter
Indicador
VWAP
Forex
+2
Custom VWAP Indicator for cTrader
Indicador
News Filter
External Data
+3
Real-time financial news and economic calendar overlay for cTrader with smart alerts
Indicador
AI
ATR
+26
The Triple Momentum indicator for cTrader is a versatile trend-following tool.

Preço

3
Instalações gratuitas