Skip to content

Commit

Permalink
Added supercharged macd
Browse files Browse the repository at this point in the history
  • Loading branch information
DominikBritz committed Jun 17, 2024
1 parent b80a1d3 commit 2929db0
Show file tree
Hide file tree
Showing 12 changed files with 1,600 additions and 0 deletions.
162 changes: 162 additions & 0 deletions Indicators/SuperchargedMACD/Indicators/@Bollinger.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,162 @@
//
// Copyright (C) 2024, NinjaTrader LLC <www.ninjatrader.com>.
// NinjaTrader reserves the right to modify or overwrite this NinjaScript component with each release.
//
#region Using declarations
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Xml.Serialization;
using NinjaTrader.Cbi;
using NinjaTrader.Gui;
using NinjaTrader.Gui.Chart;
using NinjaTrader.Gui.SuperDom;
using NinjaTrader.Data;
using NinjaTrader.NinjaScript;
using NinjaTrader.Core.FloatingPoint;
using NinjaTrader.NinjaScript.DrawingTools;
#endregion

// This namespace holds indicators in this folder and is required. Do not change it.
namespace NinjaTrader.NinjaScript.Indicators
{
/// <summary>
/// Bollinger Bands are plotted at standard deviation levels above and below a moving average.
/// Since standard deviation is a measure of volatility, the bands are self-adjusting:
/// widening during volatile markets and contracting during calmer periods.
/// </summary>
public class Bollinger : Indicator
{
private SMA sma;
private StdDev stdDev;

protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = NinjaTrader.Custom.Resource.NinjaScriptIndicatorDescriptionBollinger;
Name = NinjaTrader.Custom.Resource.NinjaScriptIndicatorNameBollinger;
IsOverlay = true;
IsSuspendedWhileInactive = true;
NumStdDev = 2;
Period = 14;

AddPlot(Brushes.Goldenrod, NinjaTrader.Custom.Resource.BollingerUpperBand);
AddPlot(Brushes.Goldenrod, NinjaTrader.Custom.Resource.BollingerMiddleBand);
AddPlot(Brushes.Goldenrod, NinjaTrader.Custom.Resource.BollingerLowerBand);
}
else if (State == State.DataLoaded)
{
sma = SMA(Period);
stdDev = StdDev(Period);
}
}

protected override void OnBarUpdate()
{
double sma0 = sma[0];
double stdDev0 = stdDev[0];

Upper[0] = sma0 + NumStdDev * stdDev0;
Middle[0] = sma0;
Lower[0] = sma0 - NumStdDev * stdDev0;
}

#region Properties
[Browsable(false)]
[XmlIgnore()]
public Series<double> Lower
{
get { return Values[2]; }
}

[Browsable(false)]
[XmlIgnore()]
public Series<double> Middle
{
get { return Values[1]; }
}

[Range(0, int.MaxValue), NinjaScriptProperty]
[Display(ResourceType = typeof(Custom.Resource), Name = "NumStdDev", GroupName = "NinjaScriptParameters", Order = 0)]
public double NumStdDev
{ get; set; }

[Range(1, int.MaxValue), NinjaScriptProperty]
[Display(ResourceType = typeof(Custom.Resource), Name = "Period", GroupName = "NinjaScriptParameters", Order = 1)]
public int Period
{ get; set; }

[Browsable(false)]
[XmlIgnore()]
public Series<double> Upper
{
get { return Values[0]; }
}
#endregion
}
}

#region NinjaScript generated code. Neither change nor remove.

namespace NinjaTrader.NinjaScript.Indicators
{
public partial class Indicator : NinjaTrader.Gui.NinjaScript.IndicatorRenderBase
{
private Bollinger[] cacheBollinger;
public Bollinger Bollinger(double numStdDev, int period)
{
return Bollinger(Input, numStdDev, period);
}

public Bollinger Bollinger(ISeries<double> input, double numStdDev, int period)
{
if (cacheBollinger != null)
for (int idx = 0; idx < cacheBollinger.Length; idx++)
if (cacheBollinger[idx] != null && cacheBollinger[idx].NumStdDev == numStdDev && cacheBollinger[idx].Period == period && cacheBollinger[idx].EqualsInput(input))
return cacheBollinger[idx];
return CacheIndicator<Bollinger>(new Bollinger(){ NumStdDev = numStdDev, Period = period }, input, ref cacheBollinger);
}
}
}

namespace NinjaTrader.NinjaScript.MarketAnalyzerColumns
{
public partial class MarketAnalyzerColumn : MarketAnalyzerColumnBase
{
public Indicators.Bollinger Bollinger(double numStdDev, int period)
{
return indicator.Bollinger(Input, numStdDev, period);
}

public Indicators.Bollinger Bollinger(ISeries<double> input , double numStdDev, int period)
{
return indicator.Bollinger(input, numStdDev, period);
}
}
}

namespace NinjaTrader.NinjaScript.Strategies
{
public partial class Strategy : NinjaTrader.Gui.NinjaScript.StrategyRenderBase
{
public Indicators.Bollinger Bollinger(double numStdDev, int period)
{
return indicator.Bollinger(Input, numStdDev, period);
}

public Indicators.Bollinger Bollinger(ISeries<double> input , double numStdDev, int period)
{
return indicator.Bollinger(input, numStdDev, period);
}
}
}

#endregion
128 changes: 128 additions & 0 deletions Indicators/SuperchargedMACD/Indicators/@EMA.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
//
// Copyright (C) 2024, NinjaTrader LLC <www.ninjatrader.com>.
// NinjaTrader reserves the right to modify or overwrite this NinjaScript component with each release.
//
#region Using declarations
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
using System.Xml.Serialization;
using NinjaTrader.Cbi;
using NinjaTrader.Gui;
using NinjaTrader.Gui.Chart;
using NinjaTrader.Gui.SuperDom;
using NinjaTrader.Data;
using NinjaTrader.NinjaScript;
using NinjaTrader.Core.FloatingPoint;
using NinjaTrader.NinjaScript.DrawingTools;
#endregion

// This namespace holds indicators in this folder and is required. Do not change it.
namespace NinjaTrader.NinjaScript.Indicators
{
/// <summary>
/// Exponential Moving Average. The Exponential Moving Average is an indicator that
/// shows the average value of a security's price over a period of time. When calculating
/// a moving average. The EMA applies more weight to recent prices than the SMA.
/// </summary>
public class EMA : Indicator
{
private double constant1;
private double constant2;

protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = NinjaTrader.Custom.Resource.NinjaScriptIndicatorDescriptionEMA;
Name = NinjaTrader.Custom.Resource.NinjaScriptIndicatorNameEMA;
IsOverlay = true;
IsSuspendedWhileInactive = true;
Period = 14;

AddPlot(Brushes.Goldenrod, NinjaTrader.Custom.Resource.NinjaScriptIndicatorNameEMA);
}
else if (State == State.Configure)
{
constant1 = 2.0 / (1 + Period);
constant2 = 1 - (2.0 / (1 + Period));
}
}

protected override void OnBarUpdate()
{
Value[0] = (CurrentBar == 0 ? Input[0] : Input[0] * constant1 + constant2 * Value[1]);
}

#region Properties
[Range(1, int.MaxValue), NinjaScriptProperty]
[Display(ResourceType = typeof(Custom.Resource), Name = "Period", GroupName = "NinjaScriptParameters", Order = 0)]
public int Period
{ get; set; }
#endregion
}
}

#region NinjaScript generated code. Neither change nor remove.

namespace NinjaTrader.NinjaScript.Indicators
{
public partial class Indicator : NinjaTrader.Gui.NinjaScript.IndicatorRenderBase
{
private EMA[] cacheEMA;
public EMA EMA(int period)
{
return EMA(Input, period);
}

public EMA EMA(ISeries<double> input, int period)
{
if (cacheEMA != null)
for (int idx = 0; idx < cacheEMA.Length; idx++)
if (cacheEMA[idx] != null && cacheEMA[idx].Period == period && cacheEMA[idx].EqualsInput(input))
return cacheEMA[idx];
return CacheIndicator<EMA>(new EMA(){ Period = period }, input, ref cacheEMA);
}
}
}

namespace NinjaTrader.NinjaScript.MarketAnalyzerColumns
{
public partial class MarketAnalyzerColumn : MarketAnalyzerColumnBase
{
public Indicators.EMA EMA(int period)
{
return indicator.EMA(Input, period);
}

public Indicators.EMA EMA(ISeries<double> input , int period)
{
return indicator.EMA(input, period);
}
}
}

namespace NinjaTrader.NinjaScript.Strategies
{
public partial class Strategy : NinjaTrader.Gui.NinjaScript.StrategyRenderBase
{
public Indicators.EMA EMA(int period)
{
return indicator.EMA(Input, period);
}

public Indicators.EMA EMA(ISeries<double> input , int period)
{
return indicator.EMA(input, period);
}
}
}

#endregion
Loading

0 comments on commit 2929db0

Please sign in to comment.