region Using declarations
using System;
using NinjaTrader.Cbi;
using NinjaTrader.Gui.Tools;
using NinjaTrader.NinjaScript;
using NinjaTrader.NinjaScript.Strategies;
#endregion
namespace NinjaTrader.NinjaScript.Strategies
{
public class MES355BullishEntry : Strategy
{
private bool enteredToday = false;
private double bullishTicks = 0;
private int lastTradeDate = -1;
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Name = "MES355BullishEntry";
Calculate = Calculate.OnBarClose;
IsExitOnSessionCloseStrategy = false;
EntriesPerDirection = 1;
EntryHandling = EntryHandling.AllEntries;
IsInstantiatedOnEachOptimizationIteration = false;
AddDataSeries(Data.BarsPeriodType.Day, 1); // Add daily series
}
}
protected override void OnBarUpdate()
{
if (BarsInProgress != 0) return; // Only process on the primary (intraday) series
if (CurrentBar < 2 || BarsArray[1].Count < 3) return; // Ensure enough data
// Reset at new day
if (ToDay(Time[0]) != lastTradeDate)
{
enteredToday = false;
lastTradeDate = ToDay(Time[0]);
}
// Check entry conditions
if (!enteredToday &&
ToTime(Time[0]) == 155500 && // 3:55:00 PM ET
GetBullishTicks() > 40)
{
EnterLong();
enteredToday = true;
}
// Exit next day at 9:30 AM
if (Position.MarketPosition == MarketPosition.Long &&
ToTime(Time[0]) == 93000)
{
ExitLong();
}
}
private double GetBullishTicks()
{
// Use daily series to compute bullish ticks from last 2 days
double day1Change = Closes[1][1] - Opens[1][1]; // Yesterday
double day2Change = Closes[1][2] - Opens[1][2]; // Day before yesterday
// Convert to ticks (MES tick size is 0.25)
bullishTicks = (day1Change + day2Change) / TickSize;
return bullishTicks;
}
}
}

Comment