Warning! This section will be deprecated on February 1st 2025. Please move all your Indicators to the cTrader Store catalogue.
An update for this algorithm is currently pending moderation. Please revisit this page shortly to access the algorithm's latest version.
Description
Inspired by: https://www.tradingview.com/script/ECuloL0o-Larry-Williams-Large-Trade-Index-LWTI-Loxx/
Thanks to @YesOrNot for heavly contributing to the indicator.
The source code is integrated in the .algo file.
AI
aintDatCap
Joined on 12.09.2023
- Distribution: Free
- Language: C#
- Trading platform: cTrader Automate
- File name: Larry Williams Large Trading Index.algo
- Rating: 5
- Installs: 912
- Modified: 14/09/2023 07:29
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.
AI
@YesOrNot sadly the source code still needs to be reviewed.
Here's the code:
using cAlgo.API;
using cAlgo.API.Indicators;
namespace cAlgo
{
[Indicator(AccessRights = AccessRights.None)]
public class LarryWilliamsLargeTradingIndex : Indicator
{
[Parameter(DefaultValue = 8)]
public int Period { get; set; }
[Output("BullishValue", LineColor = "Green", IsHistogram = true, Thickness = 2)]
public IndicatorDataSeries BullishValue { get; set; }
[Output("BearishValue", LineColor = "D4FE0000", IsHistogram = true, Thickness = 2)]
public IndicatorDataSeries BearishValue { get; set; }
[Output("Middle", LineColor = "FF737373", Thickness=1, LineStyle = LineStyle.Dots)]
public IndicatorDataSeries Middle { get; set; }
private MovingAverage movingAverage;
private AverageTrueRange averageTrueRange;
protected override void Initialize()
{
//System.Diagnostics.Debugger.Launch();
IndicatorDataSeries ma = CreateDataSeries();
for(int i = 0; i < Bars.ClosePrices.Count; i++)
{
if (i < Period)
ma[i] = Bars.ClosePrices[i];
else
ma[i] = Bars.ClosePrices[i] - Bars.ClosePrices[i - Period];
}
movingAverage = Indicators.SimpleMovingAverage(ma, Period);
averageTrueRange = Indicators.AverageTrueRange(Period, MovingAverageType.Exponential);
}
public override void Calculate(int index)
{
// Calculate value at specified index
//var ma = (Bars.ClosePrices.LastValue - Bars.ClosePrices[index - Period]);
var atr = averageTrueRange.Result[index];
double result = movingAverage.Result[index] / atr * 50;
if (result < 0)
{
BearishValue[index] = result;
BullishValue[index] = double.NaN;
}
else
{
BullishValue[index] = result;
BearishValue[index] = double.NaN;
}
Middle[index] = 0;
}
}
}
YE
Source code ?
Have A Nice day.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
namespace cAlgo
{
[Indicator(AccessRights = AccessRights.None)]
public class LarryWilliamsLargeTradingIndex : Indicator
{
[Parameter(DefaultValue = 8)]
public int Period { get; set; }
[Parameter(DefaultValue = 8)]
public MovingAverageType MaType { get; set; }
[Output("NoValue", LineColor = "Gray", IsHistogram = false, PlotType = PlotType.DiscontinuousLine, Thickness = 2)]
public IndicatorDataSeries NoValue { get; set; }
[Output("BullishValue", LineColor = "Green", IsHistogram = false, PlotType = PlotType.DiscontinuousLine, Thickness = 2)]
public IndicatorDataSeries BullishValue { get; set; }
[Output("BearishValue", LineColor = "Red", IsHistogram = false, PlotType = PlotType.DiscontinuousLine, Thickness = 2)]
public IndicatorDataSeries BearishValue { get; set; }
[Output("Middle", LineColor = "FF737373", Thickness = 1, LineStyle = LineStyle.Dots)]
public IndicatorDataSeries Middle { get; set; }
private MovingAverage ma1;
private MovingAverage ma2;
private AverageTrueRange averageTrueRange;
private IndicatorDataSeries resMa;
private IndicatorDataSeries atr;
private IndicatorDataSeries sourceMa;
protected override void Initialize()
{
sourceMa = CreateDataSeries();
atr = CreateDataSeries();
resMa = CreateDataSeries();
ma1 = Indicators.MovingAverage(sourceMa, Period, MaType);
averageTrueRange = Indicators.AverageTrueRange(Period, MaType);
}
public override void Calculate(int index)
{
// Level
Middle[index] = 50;
// Source of calculation ma
sourceMa[index] = Bars.ClosePrices.Last(0) - Bars.ClosePrices.Last(Period);
// calculation ATR
atr[index] = averageTrueRange.Result[index];
//LarryWilliams Calculation
resMa[index] = ma1.Result[index] / atr[index] * 50 + 50;
//Output
NoValue[index] = resMa[index];
BearishValue[index] = resMa[index] < 50 ? resMa[index] : double.NaN;
BullishValue[index] = resMa[index] > 50 ? resMa[index] : double.NaN;
// Repaint Calculation UNCOMMENT FOR SEE (The color is make in function of < or > 50, It's juste a coloration of previous)
if (resMa[index] > 50)
{
BullishValue[index] = resMa[index];
if (resMa[index - 1] < 50)
BullishValue[index - 1] = resMa[index - 1];
BearishValue[index] = double.NaN;
}
if (resMa[index] < 50)
{
BearishValue[index] = resMa[index];
if (resMa[index - 1] > 50)
BearishValue[index - 1] = resMa[index - 1];
BullishValue[index] = double.NaN;
}
}
}
}