void GenerateStrategySlots()
{
// Determines the number of slots
int openFilters = random.Next(lockedEntryFilters, maxOpeningLogicSlots + 1);
int closeFilters = 0;
if (lockedExitSlot == null || exitIndicatorsWithFilters.Contains(Data.Strategy.Slot[Data.Strategy.CloseSlot].IndicatorName))
closeFilters = random.Next(lockedExitFilters, maxClosingLogicSlots + 1);
// Create a strategy
Data.Strategy = new Strategy(openFilters, closeFilters);
Data.Strategy.StrategyName = "Generated";
// Copy the trading sizes
Data.Strategy.UseAccountPercentEntry = strategyBest.UseAccountPercentEntry;
Data.Strategy.MaxOpenLots = strategyBest.MaxOpenLots;
Data.Strategy.EntryLots = strategyBest.EntryLots;
Data.Strategy.AddingLots = strategyBest.AddingLots;
Data.Strategy.ReducingLots = strategyBest.ReducingLots;
int slot = 0;
// Entry Slot
if (lockedEntrySlot != null)
{
Data.Strategy.Slot[slot] = lockedEntrySlot.Clone();
if (Data.Strategy.Slot[slot].SlotStatus == StrategySlotStatus.Linked)
GenerateIndicatorParameters(slot);
}
else
{
GenerateIndicatorName(slot);
GenerateIndicatorParameters(slot);
}
// Entry filter slots
for (int i = 0; i < lockedEntryFilters; i++)
{
slot++;
Data.Strategy.Slot[slot] = aLockedEntryFilter[i].Clone();
Data.Strategy.Slot[slot].SlotNumber = slot;
if (Data.Strategy.Slot[slot].SlotStatus == StrategySlotStatus.Linked)
GenerateIndicatorParameters(slot);
}
for (int i = lockedEntryFilters; i < openFilters; i++)
{
slot++;
GenerateIndicatorName(slot);
GenerateIndicatorParameters(slot);
}
// Exit slot
if (lockedExitSlot != null)
{
slot++;
Data.Strategy.Slot[slot] = lockedExitSlot.Clone();
Data.Strategy.Slot[slot].SlotNumber = slot;
if (Data.Strategy.Slot[slot].SlotStatus == StrategySlotStatus.Linked)
GenerateIndicatorParameters(slot);
}
else
{
slot++;
GenerateIndicatorName(slot);
GenerateIndicatorParameters(slot);
}
// Exit filter slots
if (Indicator_Store.ClosingIndicatorsWithClosingFilters.Contains(Data.Strategy.Slot[Data.Strategy.CloseSlot].IndicatorName) && closeFilters > 0)
{
for (int i = 0; i < lockedExitFilters; i++)
{
slot++;
Data.Strategy.Slot[slot] = aLockedExitFilter[i].Clone();
Data.Strategy.Slot[slot].SlotNumber = slot;
if (Data.Strategy.Slot[slot].SlotStatus == StrategySlotStatus.Linked)
GenerateIndicatorParameters(slot);
}
for (int i = lockedExitFilters; i < closeFilters; i++)
{
slot++;
GenerateIndicatorName(slot);
GenerateIndicatorParameters(slot);
}
}
return;
}