Test Param: Does nothing, 100 values to optimize
Instrument: MES, Last 5 minutes
Time frame: 2023-01-01 to 2023-05-01
Optimizer: Genetic
GO Generation size: 5 (CANNOT reproduce when size*generations > optimization value count, same with default optimizer)
IsInstantiatedOnEachOptimizationIteration=false seems to be important (EDIT: Maybe not)
Strategy code:
namespace NinjaTrader.NinjaScript.Strategies
{
public class MyCustomStrategy : Strategy
{
protected override void OnStateChange()
{
if (State == State.SetDefaults)
{
Description = @"Enter the description for your new custom Strategy here.";
Name = "MyCustomStrategy";
Calculate = Calculate.OnBarClose;
EntriesPerDirection = 1;
EntryHandling = EntryHandling.AllEntries;
IsExitOnSessionCloseStrategy = true;
ExitOnSessionCloseSeconds = 30;
IsFillLimitOnTouch = false;
MaximumBarsLookBack = MaximumBarsLookBack.TwoHundredFiftySix;
OrderFillResolution = OrderFillResolution.Standard;
Slippage = 0;
StartBehavior = StartBehavior.WaitUntilFlat;
TimeInForce = TimeInForce.Gtc;
TraceOrders = true;
RealtimeErrorHandling = RealtimeErrorHandling.StopCancelClose;
StopTargetHandling = StopTargetHandling.PerEntryExecution;
BarsRequiredToTrade = 20;
IsInstantiatedOnEachOptimizationIteration = false;
}
else if (State == State.Configure)
{
}
}
protected override void OnBarUpdate()
{
if (CurrentBars[0] < BarsRequiredToTrade)
return;
PrintTo = PrintTo.OutputTab2;
Print(Bars.BarsSinceNewTradingDay);
PrintTo = PrintTo.OutputTab1;
if (MACD(12, 26, 9).Diff[0] > 0.0)
{
EnterLong(1);
}
else
{
ExitLong(1);
}
}
#region Properties
[NinjaScriptProperty]
[Display(Name="Test", Order=1, GroupName="Parameters")]
public int Test
{ get; set; }
#endregion
}
}
... 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 -22975 -22974 -22973 -22972 -22971 -22970 -22969 -22968 -22967 -22966 -22965 -22964 -22963 -22962 -22961 -22960 -22959 ...
private int GetBarsSinceTradingDay(int barsInProgress)
{
Bar lastDay = BarsArray[barsInProgress].GetDayBar(1);
if (lastDay != null)
{
return CurrentBars[barsInProgress] - BarsArray[barsInProgress].GetBar(lastDay.Time) - 1;
}
else
{
return CurrentBars[barsInProgress];
}
}

Comment