present
Зарегистрируйтесь и получите скидку $50 на первую покупку
Trading product for Doji Engulf Индикатор, image 1
Doji Engulf
Индикатор
3 скачивания
Версия 1.0, Jul 2025
Windows, Mac
3
Бесплатные установки

Описание

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("Размер додзи", DefaultValue = 0.05, MinValue = 0.01, Step = 0.01)]

public double DojiSize { get; set; }


[Parameter("Коэффициент длинной свечи", DefaultValue = 0.7, MaxValue = 1, Step = 0.1)]

public double LongCandleRatio { get; set; }


[Parameter("Использовать фильтр объема?", DefaultValue = false)]

public bool UseVolumeFilter { get; set; }


[Parameter("Период скользящего среднего объема", DefaultValue = 24)]

public int VolumeMA { get; set; }


[Parameter("Период RSI", DefaultValue = 14)]

public int RSIPeriod { get; set; }


[Parameter("Коэффициент фитиля к телу", DefaultValue = 2.5, MinValue = 1.0, Step = 0.1)]

public double WickToBodyRatio { get; set; }


private MovingAverage volumeMA;

private RelativeStrengthIndex rsi;


[Output("Сигнал додзи", 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]; // Отметить додзи на графике

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


// Выделить максимум и минимум свечи додзи сплошными линиями, которые продолжаются на следующие 3 свечи

HighlightDojiHighLow(index, timeFrameNumber, label);

}


// Обнаружение дивергенции SMT теперь применяется ко всем таймфреймам

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


// Нарисовать сплошные горизонтальные линии на максимуме и минимуме свечи додзи, продолжающиеся на следующие 3 свечи

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;


// Добавить номер таймфрейма или текст метки рядом с синей линией

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

}


private void DetectSMTDivergence(int index)

{

// Проверить, образует ли текущий максимум или минимум дивергенцию с 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)

{

// Медвежья дивергенция: цена делает более высокий максимум, RSI делает более низкий максимум

if (currentHigh > prevHigh && currentRSI < prevRSI)

{

// Отметить дивергенцию на графике с уникальным идентификатором для этого таймфрейма

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

}


// Бычья дивергенция: цена делает более низкий минимум, RSI делает более высокий минимум

if (currentLow < prevLow && currentRSI > prevRSI)

{

// Отметить дивергенцию на графике с уникальным идентификатором для этого таймфрейма

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;


// Определить, имеет ли текущая свеча маленькое тело и длинные фитили

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

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


// Определить, имеет ли предыдущая свеча маленькое тело и длинные фитили

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

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


return currentHasLongWicks || prevHasLongWicks;

}

}

}

Сводка

Профиль индикатора

Отзывы покупателей

0.0
Отзывы: 0
Отзывы покупателей
У этого продукта еще нет отзывов. Уже попробовали его? Поделитесь впечатлениями!

Обсуждение

Частые вопросы

Продукты, доступные в cTrader Store, включая торговых ботов, индикаторы и плагины, предоставляются сторонними разработчиками и доступны исключительно в информационных и технических целях. cTrader Store не является брокером и не предоставляет инвестиционные консультации, персональные рекомендации или какие-либо гарантии будущей доходности.

Больше от этого автора

Индикатор
The Session Golden Hours indicator is designed for serious traders looking to visualize high-probability

Вам также может понравиться

Индикатор
Forex
BTCUSD
+5
Auto-plots Open, High, and Low of Day/Week/Month/Year. Session candle counter + Round Numbers. Fully customizable
Индикатор
ATR
Simple professional trend tracker
Индикатор
ATR
RSI
+13
is a trend-following indicator designed to provide a clear view of market direction, momentum, and strength
Логотип продукта "Equity and Balance"
Высокий рейтинг
4.4
(5)
$19
/
$20
Индикатор
Prop
Forex
+4
Displays real-time balance, equity, P&L, margin metrics directly on your charts.
Индикатор
Forex
EURUSD
+3
ATR-normalized MA slope in degrees, comparable across all instruments. Color-coded labels flag strong trend moves.
Индикатор
Forex
Crypto
+1
PinBarCandlestickPattern Indicator
Индикатор
ATR
SMC
+19
Smart Liquidity Sweep detector with auto-drawing True Channels and real market structure mapping.
Логотип продукта "HLC_Levels"
Популярный
4.5
(4)
$20
/
$25
Индикатор
AI
SMC
+7
The ultimate tool for Price Action and ICT. High, Low and Mid levels for days, weeks Inc. NY Midnight and Custom Range.
Индикатор
Forex
BTCUSD
+5
Advanced price levels! Rounded prices with full style settings. Suitable for all currency pairs and timeframes.
Индикатор
EMA
Channel
+5
⚡ Institutional Nasdaq (NQ/US100) Trend Engine: Adaptive M1–D1 EMA alignment, chop slope filters, zero-clutter symbols &
Логотип продукта "Supply&Demand"
Популярный
4.8
(5)
$19
/
$20
Индикатор
RSI
MACD
+1
Precision Supply & Demand zones indicator—automatically plots key buy/sell areas on your chart for smarter entries.
Индикатор
Flag
VWAP
+5
Session VWAP with statistical deviation bands, gradient cloud, and live rejection alerts — see exactly how stretched pri
Индикатор
ATR
Key Levels
+5
CPR indicator that actually predicts the day ahead: width percentile scoring for breakout-day detection
Индикатор
Key Levels
Liquidity Grab
+2
A practical XAUUSD workspace for mapped levels, session context, liquidity events, alerts and risk planning.
Логотип продукта "QX TradeDecision"
Высокий рейтинг
4.5
(4)
$20
/
$22
Индикатор
ATR
Flag
+5
Decision panel with Buy/Sell scores, market bias, setup quality, trading cost and clear trade reasons.
Индикатор
VWAP
Volume
+4
Advanced Order Flow & Volume Profiling for cTrader. Unveil institutional footprints, Delta, and Anchored VWAPs.
Индикатор
Signal
Order Flow Market Depth Pro | Footprint & DOM
Индикатор
AI
ATR
+27
The Professional “All-in-One” Trading Suite (buy and sell indicator)

Цена

3
Бесплатные установки