„Doji Engulf“-Logo
Indikator
3 downloads
Version 1.0, Jul 2025
Windows, Mac
3
Kostenlose Installationen

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("Doji-Größe", DefaultValue = 0.05, MinValue = 0.01, Step = 0.01)]

public double DojiSize { get; set; }


[Parameter("Verhältnis langer Kerzen", DefaultValue = 0.7, MaxValue = 1, Step = 0.1)]

public double LongCandleRatio { get; set; }


[Parameter("Volumenfilter verwenden?", DefaultValue = false)]

public bool UseVolumeFilter { get; set; }


[Parameter("Periode des gleitenden Volumendurchschnitts", DefaultValue = 24)]

public int VolumeMA { get; set; }


[Parameter("RSI-Periode", DefaultValue = 14)]

public int RSIPeriod { get; set; }


[Parameter("Docht-zu-Körper-Verhältnis", DefaultValue = 2.5, MinValue = 1.0, Step = 0.1)]

public double WickToBodyRatio { get; set; }


private MovingAverage volumeMA;

private RelativeStrengthIndex rsi;


[Output("Doji-Signal", 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]; // Markiere den Doji im Chart

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


// Hebe das Hoch und Tief der Doji-Kerze mit durchgehenden Linien hervor, die sich über die nächsten 3 Kerzen erstrecken

HighlightDojiHighLow(index, timeFrameNumber, label);

}


// SMT-Divergenz-Erkennung wird jetzt auf alle Zeitrahmen angewendet

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

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


// Zeichne durchgehende horizontale Linien am Hoch und Tief der Doji-Kerze, die sich über die nächsten 3 Kerzen erstrecken

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;


// Füge neben der blauen Linie die Zeitrahmennummer oder den Label-Text hinzu

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

}


private void DetectSMTDivergence(int index)

{

// Prüfe, ob das aktuelle Hoch oder Tief eine Divergenz mit dem RSI bildet

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)

{

// Bärische Divergenz: Preis macht ein höheres Hoch, RSI macht ein niedrigeres Hoch

if (currentHigh > prevHigh && currentRSI < prevRSI)

{

// Markiere die Divergenz im Chart mit einer eindeutigen Kennung für diesen Zeitrahmen

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

}


// Bullische Divergenz: Preis macht ein niedrigeres Tief, RSI macht ein höheres Tief

if (currentLow < prevLow && currentRSI > prevRSI)

{

// Markiere die Divergenz im Chart mit einer eindeutigen Kennung für diesen Zeitrahmen

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;


// Bestimme, ob die aktuelle Kerze einen kleinen Körper und lange Dochte hat

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

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


// Bestimme, ob die vorherige Kerze einen kleinen Körper und lange Dochte hat

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

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


return currentHasLongWicks || prevHasLongWicks;

}

}

}

Indikatorprofil
0.0
Bewertungen: 0
Kundenbewertungen
Bisher gibt es keine Bewertungen für dieses Produkt. Haben Sie es schon ausprobiert? Dann können Sie die erste Person sein, die andere darüber informiert!
Über den cTrader Store verfügbare Produkte, einschließlich Handelsbots, Indikatoren und Plugins, werden von externen Entwicklern bereitgestellt und nur zu Informations- und technischen Zugriffszwecken verfügbar gemacht. cTrader Store ist kein Broker und erbringt keine Anlageberatung, persönlichen Empfehlungen oder eine Garantie für zukünftige Performance.

Mehr von diesem Autor

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

Das könnte Sie auch noch interessieren

Indikator
ATR
SMC
+17
Adaptive Swing-Anchored VWAP that tracks market structure shifts with precision and clarity.
Indikator
ATR
Forex
+5
A powerful ATR-based indicator generating clear BUY/SELL signals. Features real-time alerts and customizable sensitivity
Indikator
RSI
Breakout
+1
🚀 TrendHeikinMultiMA: Advanced trend detection using Heikin-Ashi smoothing & MAs! Eliminates noise, confirms real trend
Indikator
ATR
Support & Resistance
Price information (D/W/M range) + ATR + swap calculator with triple swap detection. Price GPS.
Indikator
Support & Resistance
Multi-Timeframe exhaustion indicator. Detects trend loss with Doji filter & dynamic volatility.
Indikator
AI-assisted
Predictive Monte Carlo Engine Forecast future price paths using institutional-grade statistical models and probability
Indikator
AI
ATR
+26
SR Commander — Multi Timeframe Edition. See where the big money draws the line. Trade on your timeframe. Think on theirs
Indikator
Forex
Crypto
+5
🚀 Automated Elliott Wave & Fibonacci tool for cTrader. Spot trends, corrections & retracements fast.
Indikator
MACD
Prop
+8
NTNPICLL is a tool to check the best trading hours for the assets and also includes the highest and lowest point
Indikator
show spread on chart
Indikator
AI
SMC
+13
Dynamic Liquidity Depth exposes hidden volume
Indikator
Prop
Forex
+12
Identify and trade breakouts with Consolidation Zones! Visualize price consolidation areas for trading opportunities.
Indikator
AI
Prop
+7
EMA Clouds, Multi-Timeframe (MTF) Overlay, Swing High/Low detection, and a smart Dashboard with neutral zone filtering.
Indikator
Breakout
Institutional Flow Radar scans the chart for abnormal volume events and classifies them into two groups: Capital &Public
Indikator
ADX
ATR
+5
Signal Quality Score - 0-100 filter combining RSI, Volume, ATR, Trend Strength & Alignment. Works on ANY chart type.
Indikator
📊 Smart Floating Risk Pro – Advanced Risk Management for cTrader
Indikator
[Stellar Strategies] BOS Trend: Premium multi-timeframe BOS indicator for precision trend analysis.📈📉
Indikator
ATR
RSI
+2
This indicator works best as a trend-confirmation tool—wait for multiple signals!
3
Kostenlose Installationen