Secondly when running this the 1 week 9 period ATR comes out to 184.25? Seems a bit high. I'm converting from Thinkorswim and seeing 103.5
Lastly I noted the bar array values at the AddDataSeries, just want to verify that's the correct way to call them out? I thought they started at Array[0] being the primary data series.
Edit: changed the value of the regression channel width to Math.SQRT(std_deviation) and the strategy won't run citing Error on calling 'OnStateChange' method: Object reference not set to an instance of an object. But I'm not seeing where something's not set?
Commenting out the RegressionChannel1 variable then results in
#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.Gui.Tools;
using NinjaTrader.Data;
using NinjaTrader.NinjaScript;
using NinjaTrader.Core.FloatingPoint;
using NinjaTrader.NinjaScript.Indicators;
using NinjaTrader.NinjaScript.DrawingTools;
#endregion
//This namespace holds Strategies in this folder and is required. Do not change it.
namespace NinjaTrader.NinjaScript.Strategies
{
public class SupportingFuzzy : Strategy
{
private Indicators.RegressionChannel RegressionChannel1;
private ATR ATR1;
private ATR ATR2;
private ATR ATR3;
private ATR ATR4;
private ATR ATR5;
private Indicators.VWAP8 VWAP;
private Indicators.StdDev std_deviation;
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = @"SupportingFuzzy";
Name = "SupportingFuzzy";
Calculate = Calculate.OnBarClose;
EntriesPerDirection = 1;
EntryHandling = EntryHandling.AllEntries;
IsExitOnSessionCloseStrategy = true;
ExitOnSessionCloseSeconds = 30;
IsFillLimitOnTouch = false;
MaximumBarsLookBack = MaximumBarsLookBack.Infinite;
OrderFillResolution = OrderFillResolution.Standard;
Slippage = 0.25;
StartBehavior = StartBehavior.WaitUntilFlat;
TimeInForce = TimeInForce.Gtc;
TraceOrders = false;
RealtimeErrorHandling = RealtimeErrorHandling.StopCancelClose;
StopTargetHandling = StopTargetHandling.PerEntryExecution;
BarsRequiredToTrade = 75000;
// Disable this property for performance gains in Strategy Analyzer optimizations
// See the Help Guide for additional information
IsInstantiatedOnEachOptimizationIteration = true;
}
else if (State == State.Configure)
{
AddDataSeries(Data.BarsPeriodType.Minute, 1); // Array[1]
AddDataSeries("ES 09-21", Data.BarsPeriodType.Minute, 15, Data.MarketDataType.Last); // Array[2]
AddDataSeries("ES 09-21", Data.BarsPeriodType.Minute, 60, Data.MarketDataType.Last); // Array[3]
AddDataSeries("ES 09-21", Data.BarsPeriodType.Minute, 240, Data.MarketDataType.Last); // Array[4]
AddDataSeries("ES 09-21", Data.BarsPeriodType.Week, 1, Data.MarketDataType.Last); // Array[5]
}
else if (State == State.DataLoaded)
{
int std_period = 6900;
ATR1 = ATR(Closes[1], 9);
ATR2 = ATR(Closes[2], 9);
ATR3 = ATR(Closes[3], 9);
ATR4 = ATR(Closes[4], 9);
ATR5 = ATR(Closes[5], 9);
VWAP =VWAP8(Closes[0]);
std_deviation =StdDev(BarsArray[0],std_period);
RegressionChannel1 = RegressionChannel(Closes[1], std_period, Math.Sqrt(std_deviation[0]));
}
}
int i = 0;
protected override void OnBarUpdate()
{
if (CurrentBars[0] < BarsRequiredToTrade)
return;
if (CurrentBars[0] < 1
|| CurrentBars[1] < 0
|| CurrentBars[2] < 0
|| CurrentBars[3] < 0
|| CurrentBars[4] < 0
|| CurrentBars[5] < 0)
return;
// Set 1
i = i++;
Print(Time[0]);
Print("iteration: " +i);
Print("1 min ATR: " + ATR1[0]);
Print("15 min ATR: " + ATR2[0]);
Print("60 min ATR: " + ATR3[0]);
Print("4 hr ATR: " + ATR4[0]);
Print("1 week ATR: " + ATR5[0]);
Print("Close 1 bar ago - min: " + Close[1]);
Print("Close 1 bar ago - 15m: " + Closes[1][1]);
Print("Close 1 bar ago - hour: " + Closes[2][1]);
Print("Close 1 bar ago - 4 hr: " + Closes[3][1]);
Print("Close 1 bar ago - week: " + Closes[4][1]);
Print("VWAP: " + VWAP[0]);
Print("STD Dev: " +std_deviation[0]);
Print("Regression Channel Upper: " + RegressionChannel1.Upper[0]);
Print("Regression Channel Lower: " + RegressionChannel1.Lower[0]);
// if ((RegressionChannel1.Lower[0] == Low[0])
// && (ATR1[0] != Low[0])
// && (ATR2[0] == Highs[2][0])
// && (ATR3[0] == Closes[4][0])
// && (ATR4[0] == Lows[3][0])
// && (ATR5[0] == Lows[5][0]))
// {
// EnterLongLimit(Convert.ToInt32(DefaultQuantity), RegressionChannel1.Lower[0], "");
// }
}
}
}
}

Comment