present
Registe-se e receba 50 $ de desconto na sua primeira compra
Trading product for Doji Engulf Indicador, image 1
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
Laser entries with pivot confirmation. No repaint, all timeframes. Professional results.
Indicador
ATR
RSI
+16
Highlight market consolidation zones instantly with this Inside Candle indicator — precise, clean, and powerful.
Indicador
BOS
CHOCH
+5
MarketStructurePro – Smart BOS/CHoCH
Indicador
Smart Liquidity Zones PRO auto-detects liquidity grabs, wicks, traps & manipulations — trade like the smart money.
Indicador
ATR
Prop
+7
Smart momentum tool uses advanced filtering and colour cues for clearer market direction and trading signals.
Indicador
ATR
Fibonacci
+1
Trading Clock Pro: An all-in-one market timing dashboard designed to help traders understand the market at one Spot.
Indicador
RSI
EURUSD
+2
It identifies areas of market imbalance (Fair Value Gaps or FVGs) and projects them on the chart in a smart way
Indicador
Volume
Fibonacci
+3
Draw and manage multiple fixed-range volume profiles with persistent levels, developing POC/VA and smart alerts.
Indicador
EMA
RSI
+5
Keep your focus with smart on-chart notes. Features Markdown, 6 themes, and auto-save per symbol for manual trading.When
Indicador
CandleCounterAlex – Candle Cycle Counter with Colors and Adjustable Position.
Logótipo de "IVB 2.0"
Bem avaliado
4.6
(5)
$19
Indicador
IVB 2.0 is an indicator that works on the strategy of imbalance of the maximum volatility box of indices
Indicador
Forex
Customizable Dynamic Fibonacci Channels and Smart Alerts
Indicador
Prop
Forex
+12
Identify and trade breakouts with Consolidation Zones! Visualize price consolidation areas for trading opportunities.
Indicador
ADX
ATR
+5
Designed exclusively for trading the Gold market (XAUUSD), GoldMasterIndicator provides institutional-grade technical!
Indicador
CandleColourFlow MultiFx - optimized to work on Fx Majors, Fx MInors, Fx Crosses
Indicador
ATR
RSI
+16
Multi-timeframe trend indicator using EMA, MACD & ADX to confirm high-probability buy and sell bias.
Indicador
ATR
Prop
+13
Pro VSA tool with 3 modes: Fixed Ratios, Standard Deviation & Contextual VSA.
Indicador
BOS
CHOCH
+5
MyZTrade High TF candle is a multi-timeframe visualisation tool that overlays completed higher-timeframe candles.

Preço

3
Instalações gratuitas