Description
The SZO (Sentiment Zone Oscillator) indicator shows the market sentiment (activity and direction) and zones of excessive activity (overbought/oversold zones). It can display a dynamic channel, beyond which deals are seen as undesirable because of the high probability of a change in sentiment and of reversal.
If the indicator line moves beyond the channel and at the same time enters the overbought/oversold zone, this may mean that the market trend can change soon. The indicator often warns of such a possible change in advance, so it is advisable to use it in combination with another confirmation indicator.
using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
namespace cAlgo
{
[Levels(0, -7, +7)]
[Indicator(IsOverlay = false, AccessRights = AccessRights.None)]
public class mSZO : Indicator
{
[Parameter("Period SZO (14)", DefaultValue = 14)]
public int inpPeriodSZO { get; set; }
[Parameter("Show Levels (yes)", DefaultValue = true)]
public bool inpShowDLev { get; set; }
[Parameter("Show Mid Level (yes)", DefaultValue = true)]
public bool inpShowMidLev { get; set; }
[Parameter("Period Levels (30)", DefaultValue = 30)]
public int inpPeriodLevels { get; set; }
[Parameter("Percent Level (95.0)", DefaultValue = 95.0)]
public double inpPercentLevel { get; set; }
[Output("SZO", IsHistogram = false, LineColor = "Black", PlotType = PlotType.Line, LineStyle = LineStyle.Solid, Thickness = 1)]
public IndicatorDataSeries outSZO { get; set; }
[Output("Top", IsHistogram = false, LineColor = "Red", PlotType = PlotType.Line, LineStyle = LineStyle.Solid, Thickness = 1)]
public IndicatorDataSeries outTop { get; set; }
[Output("Bottom", IsHistogram = false, LineColor = "Red", PlotType = PlotType.Line, LineStyle = LineStyle.Solid, Thickness = 1)]
public IndicatorDataSeries outBottom { get; set; }
[Output("Middle", IsHistogram = false, LineColor = "Gray", PlotType = PlotType.Line, LineStyle = LineStyle.Solid, Thickness = 1)]
public IndicatorDataSeries outMiddle { get; set; }
private IndicatorDataSeries _score, _szo, _hhlvl, _lllvl, _range, _rangeproc;
private ExponentialMovingAverage _smooth1, _smooth2, _smooth3;
protected override void Initialize()
{
_score = CreateDataSeries();
_szo = CreateDataSeries();
_hhlvl = CreateDataSeries();
_lllvl = CreateDataSeries();
_range = CreateDataSeries();
_rangeproc = CreateDataSeries();
_smooth1 = Indicators.ExponentialMovingAverage(_score, inpPeriodSZO);
_smooth2 = Indicators.ExponentialMovingAverage(_smooth1.Result, inpPeriodSZO);
_smooth3 = Indicators.ExponentialMovingAverage(_smooth2.Result, inpPeriodSZO);
}
public override void Calculate(int i)
{
_score[i] = (i>1 && Bars.ClosePrices[i] > Bars.ClosePrices[i-1] ? +1 : -1);
_szo[i] = 100.0 * ((3 * _smooth1.Result[i] - 3 * _smooth2.Result[i] + _smooth3.Result[i]) / inpPeriodSZO);
_hhlvl[i] = _szo.Maximum(inpPeriodLevels);
_lllvl[i] = _szo.Minimum(inpPeriodLevels);
_range[i] = _hhlvl[i] - _lllvl[i];
_rangeproc[i] = _range[i] * (inpPercentLevel / 100.0);
outSZO[i] = _szo[i];
outTop[i] = inpShowDLev ? _lllvl[i] + _rangeproc[i] : double.NaN;
outBottom[i] = inpShowDLev ? _hhlvl[i] - _rangeproc[i] : double.NaN;
outMiddle[i] = inpShowDLev && inpShowMidLev ? (_lllvl[i] + _rangeproc[i] + _hhlvl[i] - _rangeproc[i]) / 2 : double.NaN;
}
}
}
mfejza
Joined on 25.01.2022
- Distribution: Free
- Language: C#
- Trading platform: cTrader Automate
- File name: mSZO.algo
- Rating: 0
- Installs: 348
- Modified: 21/11/2023 08:21
Note that publishing copyrighted material is strictly prohibited. If you believe there is copyrighted material in this section, please use the Copyright Infringement Notification form to submit a claim.
Comments
Log in to add a comment.
No comments found.