Forex_Strategy_Builder.Dialogs.Generator.Generator.GenerateStrategySlots C# (CSharp) Method

GenerateStrategySlots() private method

Generates a random strategy
private GenerateStrategySlots ( ) : void
return void
        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;
        }