```
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
namespace NinjaTrader.NinjaScript.Strategies
{
public class BollingerBandsStrategy : Strategy
{
private int bollingerPeriod = 20;
private double bollingerDeviation = 2;
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
// Set strategy defaults
// ... (Your existing default settings)
// Allow the strategy to work with any timeframe
Calculate = Calculate.OnEachTick;
}
else if (State == State.Configure)
{
// Add additional configuration here
AddDataSeries(Data.BarsPeriodType.Minute, 1);
}
}
protected override void OnBarUpdate()
{
if (BarsInProgress == 1) // Check if the primary data series (index 0) is processing
{
// Calculate Bollinger Bands
var bollinger = Bollinger(bollingerPeriod, (int)bollingerDeviation);
// Print relevant information for debugging
Print("Current Bar: " + CurrentBar);
Print("Close[0]: " + Close[0]);
Print("Upper[0]: " + bollinger.Upper[0]);
Print("Lower[0]: " + bollinger.Lower[0]);
// Check for short trade entry
if (Close[0] > bollinger.Upper[0])
{
Print("Short Trade Entry Condition Met");
EnterShort("Short Entry"); // Open a short trade
}
// Check for long trade entry
if (Close[0] < bollinger.Lower[0])
{
Print("Long Trade Entry Condition Met");
EnterLong("Long Entry"); // Open a long trade
}
}
}
}
}
```

Comment