Description
The ATR Stop and Reverse, is a very simple trading system used for scalping. The indicators used in this trading system basically focus on the stop and reverse concept, as in the parabolic SAR indicator .
In this version you can definate to use ATR or Fix for defination reverse Pips Zone.
using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
namespace cAlgo
{
[Indicator(IsOverlay = true, TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
public class mATRLevelStopReverse : Indicator
{
[Parameter("UseATRMode (yes)", DefaultValue = true)]
public bool inpUseATRMode { get; set; }
[Parameter("NonATRStopPips (40)",DefaultValue = 40)]
public int inpNonATRStopPips { get; set; }
[Parameter("ATRPeriod (9)", DefaultValue = 9)]
public int inpATRPeriod { get; set; }
[Parameter("ATRMultiplier (3.0)", DefaultValue = 3.0)]
public int inpATRMultiplier { get; set; }
[Parameter("ATRType (sma)", DefaultValue = MovingAverageType.Simple)]
public MovingAverageType inpATRType { get; set; }
[Parameter("ATRSmoothPeriod (1)", DefaultValue = 1)]
public int inpATRSmoothPeriod { get; set; }
[Parameter("ATRSmoothType (sma)", DefaultValue = MovingAverageType.WilderSmoothing)]
public MovingAverageType inpATRSmoothType { get; set; }
[Output("ATR Level Stop-Reverse", LineColor = "Magenta", PlotType = PlotType.DiscontinuousLine, LineStyle = LineStyle.Lines, Thickness = 1)]
public IndicatorDataSeries outLSR { get; set; }
[Output("OpenLong trigger", LineColor = "Green", PlotType = PlotType.Points, LineStyle = LineStyle.Dots, Thickness = 5)]
public IndicatorDataSeries outLongOpen { get; set; }
[Output("OpenShort trigger", LineColor = "Red", PlotType = PlotType.Points, LineStyle = LineStyle.Solid, Thickness = 5)]
public IndicatorDataSeries outShortOpen { get; set; }
private AverageTrueRange _atr;
private MovingAverage _atrma;
private IndicatorDataSeries _deltastop, _stoplevel, _arrowup, _arrowdown;
protected override void Initialize()
{
_atr = Indicators.AverageTrueRange(inpATRPeriod, inpATRType);
_atrma = Indicators.MovingAverage(_atr.Result, inpATRSmoothPeriod, inpATRSmoothType);
_deltastop = CreateDataSeries();
_stoplevel = CreateDataSeries();
_arrowup = CreateDataSeries();
_arrowdown = CreateDataSeries();
}
public override void Calculate(int i)
{
_deltastop[i] = inpUseATRMode == true
? Math.Round(_atrma.Result[i] * inpATRMultiplier, Symbol.Digits)
: Math.Round(inpNonATRStopPips * Symbol.PipSize, Symbol.Digits);
_stoplevel[i] = Bars.ClosePrices[i];
_arrowup[i] = double.NaN;
_arrowdown[i] = double.NaN;
if(i>1 && Bars.ClosePrices[i] == _stoplevel[i-1])
_stoplevel[i] = _stoplevel[i-1];
else
{
if(i>1 && Bars.ClosePrices[i-1] <= _stoplevel[i-1] && Bars.ClosePrices[i] < _stoplevel[i-1])
_stoplevel[i] = Math.Min(_stoplevel[i-1], (Bars.ClosePrices[i] + _deltastop[i]));
else
{
if(i>1 && Bars.ClosePrices[i-1] >= _stoplevel[i-1] && Bars.ClosePrices[i] > _stoplevel[i-1])
_stoplevel[i] = Math.Max(_stoplevel[i-1], (Bars.ClosePrices[i] - _deltastop[i]));
else
{
if(i>1 && Bars.ClosePrices[i] > _stoplevel[i-1])
{
_stoplevel[i] = Bars.ClosePrices[i] - _deltastop[i];
_arrowup[i] = Bars.LowPrices[i] - (5 * Symbol.PipSize);
}
else
{
_stoplevel[i] = Bars.ClosePrices[i] + _deltastop[i];
_arrowdown[i] = Bars.HighPrices[i] + (5 * Symbol.PipSize);
}
}
}
}
outLSR[i] = _stoplevel[i];
outLongOpen[i] = _arrowup[i];
outShortOpen[i] = _arrowdown[i];
}
}
}
mfejza
Joined 25.01.2022
- Type: Free
- Language: C#
- Trading Platform: cTrader Automate
- Filename: mATRLevelStopReverse.algo
- Rating: 5
- Downloads: 1129
Comments
If you enjoy the version of you can play the full version here.
codefinger Five Nights at Freddy's,@ - February 20, 2023 @ 20:43
Thanks for this indi but how you was able to compile it?
This line:
_atrma = Indicators.CommodityChannelIndex(_atr.Result, inpATRSmoothPeriod, inpATRSmoothType);
Returns an error:
mATRLevelStopReverse.cs(42, 33): [CS1501] No overload for method 'CommodityChannelIndex' takes 3 arguments
What happen?
please anybody block this account (nguyenphongotjtiqatabto43): https://ctrader.com/users/profile/82116
Looks like your line 40-42 is wrong.
yeap, sorry for this mess. Probably by mistake, I've overridden it in my IDE and haven't noticed.
@codefinger
mate, you are trying to replace smoothing ATR result, from MovingAverrage to CCI, and you can not, because CCI is calculated from 4 array components (bars data: open, high, low, close); ATR indicator return only a array of data
Thanks for this indi but how you was able to compile it?
This line:
_atrma = Indicators.CommodityChannelIndex(_atr.Result, inpATRSmoothPeriod, inpATRSmoothType);
Returns an error:
mATRLevelStopReverse.cs(42, 33): [CS1501] No overload for method 'CommodityChannelIndex' takes 3 arguments
Nice indicator. I should get you to fix my codes ha ha ha . keep up the great work.
Very Much appreciated.
That would be great if there is a Cbot version available for testing.
That's fantastic! I'm glad you found the information helpful. To add a pop-up notification for buy or sell signals on both the cAlgo platform and the cTrader app, you will need to modify the code to incorporate the notification feature