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

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

Индикатор
Support & Resistance
Detects Gartley, Bat, Butterfly, Crab, Shark & Cypher patterns and backtests each one's real win rate.
Индикатор
Key Levels
Spots key hourly ranges and signals breakouts using arrows & colored background zones. Ideal for Gold.
Индикатор
Forex
Enhance your trading strategy with automated detection and alerts for key chart patterns.
Индикатор
Ichimoku Kinkō Hyō with fixed shift to 25 as Ctrader calculate it from 0 and values was wrong for Chikou Span and Kumo.
Логотип продукта "Zero Lag LSMA"
Популярный
4.7
(4)
$19
Индикатор
ZLSMA: Zero-lag trend indicator! Catch trends fast with customizable settings. Boost your trading precision.
Индикатор
SMC
Prop
+11
Sessions PRO is a professional session visualization indicator - 4 Fully Customizable Sessions
Логотип продукта "KANDIKA HEAT MAP"
Высокий рейтинг
4.6
(5)
$19
Индикатор
Color-Based Market Pressure & Volatility Visualizer The Kandika Heatmap Indicator
Индикатор
ATR
Forex
+1
Trade fearlessly: auto-adjusts order blocks, manages risks, and ensures precision. Free for early users.
Индикатор
ATR
Prop
+5
Anchor volume profiles to pivots with POC, VAH, VAL and real-time insights for clearer trade decisions.
Логотип продукта "VegaXLR - Fibonacci Alerts"
Популярный
4.5
(4)
$20
Индикатор
Forex
Alerts you when price touches Fibonacci levels. Stay organized and trade efficiently!
Индикатор
ATR
Key Levels
+1
Builds active 4H range as a zone, watches for a sweep beyond its High or Low, and signals when price closes back inside.
Индикатор
ATR
EMA
+4
SCALPING M1 CTRADER v1.0 — Institutional-Grade M1 Gold & Forex Scalping System
Индикатор
ATR
Volume
+5
Order blocks with measured hold-rate stats and confidence scoring — not just zones on a chart.
Индикатор
SMC
Prop
+5
Automatically draws the Opening Range (High & Low) for Tokyo, London, and New York sessions. Configurable start times,
Индикатор
Overview of the Fade Breakout Visualizer Indicator
Индикатор
ATR
Signal
One of the best indicators we have ever developed, with a very high profit ratio.
Индикатор
SMC
Signal
+2
Gold Market Maker Zones; Non-repainting Supply & Demand detector for XAUUSD. Precise institutional zones for cTrader.
Индикатор
ATR
Channel
Reversal Trap Probability Bands plots a dynamic volatility envelope around price & automatically detects "trap" reversal

Цена

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