Logo „Doji Engulf”
Wskaźnik
3 pobrania
Wersja 1.0, Jul 2025
Windows, Mac
3
Bezpłatne instalacje

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

public double DojiSize { get; set; }


[Parameter("Współczynnik długiej świecy", DefaultValue = 0.7, MaxValue = 1, Step = 0.1)]

public double LongCandleRatio { get; set; }


[Parameter("Używać filtru wolumenu?", DefaultValue = false)]

public bool UseVolumeFilter { get; set; }


[Parameter("Okres średniej kroczącej wolumenu", DefaultValue = 24)]

public int VolumeMA { get; set; }


[Parameter("Okres RSI", DefaultValue = 14)]

public int RSIPeriod { get; set; }


[Parameter("Współczynnik knota do korpusu", DefaultValue = 2.5, MinValue = 1.0, Step = 0.1)]

public double WickToBodyRatio { get; set; }


private MovingAverage volumeMA;

private RelativeStrengthIndex rsi;


[Output("Sygnał 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]; // Oznacz Doji na wykresie

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


// Podświetl maksimum i minimum świecy Doji za pomocą linii ciągłych rozciągających się na kolejne 3 świece

HighlightDojiHighLow(index, timeFrameNumber, label);

}


// Wykrywanie dywergencji SMT jest teraz stosowane do wszystkich ram czasowych

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


// Narysuj ciągłe linie poziome na maksimum i minimum świecy Doji rozciągające się na kolejne 3 świece

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;


// Dodaj numer ramy czasowej lub tekst etykiety obok niebieskiej linii

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

}


private void DetectSMTDivergence(int index)

{

// Sprawdź, czy obecne maksimum lub minimum tworzy dywergencję z 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)

{

// Dywergencja niedźwiedzia: Cena tworzy wyższe maksimum, RSI tworzy niższe maksimum

if (currentHigh > prevHigh && currentRSI < prevRSI)

{

// Oznacz dywergencję na wykresie unikalnym identyfikatorem dla tej ramy czasowej

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

}


// Dywergencja byka: Cena tworzy niższe minimum, RSI tworzy wyższe minimum

if (currentLow < prevLow && currentRSI > prevRSI)

{

// Oznacz dywergencję na wykresie unikalnym identyfikatorem dla tej ramy czasowej

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;


// Określ, czy obecna świeca ma mały korpus i długie knoty

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

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


// Określ, czy poprzednia świeca ma mały korpus i długie knoty

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

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


return currentHasLongWicks || prevHasLongWicks;

}

}

}

Profil wskaźnika
0.0
Opinie: 0
Opinie klientów
Ten produkt nie ma jeszcze opinii. Wypróbowałeś(-aś) go już? Bądź pierwszy(-a) i powiedz o tym innym!
Produkty dostępne za pośrednictwem cTrader Store, w tym boty handlowe, wskaźniki i wtyczki, dostarczane są przez deweloperów zewnętrznych i udostępniane wyłącznie w celach informacyjnych oraz w celu zapewnienia dostępu technicznego. cTrader Store nie jest brokerem i nie zapewnia doradztwa inwestycyjnego, nie udziela spersonalizowanych rekomendacji ani nie gwarantuje przyszłych wyników.

Więcej od tego autora

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

Możesz także polubić

Wskaźnik
BTCUSD
Crypto
+3
Traders Dynamic Index (TDI) — Divergence Edition
Wskaźnik
Forex
Crypto
+3
Enhance Pitchfork & Price Channels in cTrader with customizable Equidistant and Fibonacci levels.
Wskaźnik
ATR
Market Structure
+3
Support Resistance Toolkit
Wskaźnik
AI
Grid
+17
Clean 3D, Sleek Candles for Trend Patterns.
Wskaźnik
Spread Filter
SpreadSync Entry Timer is a compact cTrader indicator that shows live spread and candle-close.
Wskaźnik
Shows BUY & SELL signals for 3 & 4 BAR PATTERN (Morning star/ Evening star). It is adjustable and it will SHOW ARROWS.
Wskaźnik
Key Levels
Supply & Demand
+2
Institutional Levels Pro is an essential tool for traders who rely on price action and institutional market structure.
Wskaźnik
EMA
Supertrend
+4
Dynamic dual MA cloud indicator. Identifies trends, crossovers, and pullback entries in real time for any asset.
Wskaźnik
ATR
Channel
+1
Bollinger Bands Advanced Squeeze & Breakout System, Real-Time On-Chart Dashboard, Auto-Squeeze Detector, Dual-Band Cloud
Wskaźnik
Prop
Forex
+13
Identifies market compression zones and explosive Breakout moments using mathematical modeling.
Wskaźnik
Indices
Breakout
+1
You can use the cTrader Pivot Points Pro indicator to find a good pullback entry in a trend
Logo „ZigZag”
Najwyżej oceniane
4.3
(6)
Za darmo
Wskaźnik
ATR
RSI
+7
ZigZag filters noise, spots trends, patterns, pivots, aiding analysis, trade management, and confirmations. 📉📈
Wskaźnik
Prop
Forex
+5
Tracks NY, London, Tokyo, Sydney sessions with custom visuals, and a real-time expanding range box and breakout High/Low
Wskaźnik
ZLSMA: Zero-lag trend indicator! Catch trends fast with customizable settings. Boost your trading precision.
Wskaźnik
RSI
Breakout
+1
"Identify key market zones and visualize support/resistance from multiple timeframes on a single chart.
Wskaźnik
ATR
RSI
+15
Identifies high-probability breakout and retest zones using smart pivot structure and volatility filtering.
Wskaźnik
Forex
Crypto
+6
The cTrader Chaos Reversals indicator brings high-quality reversal signals to traders.
3
Bezpłatne instalacje