示例#1
0
 public void Stop()
 {
     commandWorker.CancelAsync();
     PercentProgress = 0;
     ProgressText    = "Execution Stopped";
     loaderInstance  = null;
 }
        public override void Run(ModelLoaderInterface loader)
        {
            Factory.Provider.StartSockets();
            parallelMode = ParallelMode.RealTime;
            Factory.SysLog.RegisterHistorical("FIXSimulator", GetDefaultLogConfig());
            Factory.SysLog.RegisterRealTime("FIXSimulator", GetDefaultLogConfig());
            Config  = "WarehouseTest.config";
            Address = "inprocess";
            //TODO: Needs to support seperate tests
#if USE_MBT
            var provider     = "MBTFIXProvider/Simulate";
            var assemblyName = "MBTFIXProvider";
#else
            AddProvider("LimeFIXProvider/Simulate");
            var provider     = "LimeProvider/Simulate";
            var assemblyName = "LimeProvider";
#endif
            AddProvider(provider);
            SetupProviderServiceConfig();
            var providerManager = Factory.Parallel.SpawnProvider("ProviderCommon", "ProviderManager");
            providerManager.SendEvent(new EventItem(EventType.SetConfig, "WarehouseTest"));
            using (Factory.Parallel.SpawnProvider(assemblyName, "FIXSimulator", "Negative", ProjectProperties))
            {
                base.Run(loader);
            }
            Factory.Provider.ShutdownSockets();
        }
        public void StartupPluginLoaderTest()
        {
            CoreStartup start = new CoreStartup("TickZoomTest");

            start.StartCoreServices();
            start.RunInitialization();
            string addInConfig =
                @"<Plugin name        = ""LoaderTests""
       author      = ""Wayne Walter""
       url         = """"
       description = ""TODO: Put description here"">
	
	<Runtime>
		<Import assembly = ""TickZoomLoaderTests.dll""/>
	</Runtime>
	
	<Path name = ""/Tests/Loaders"">
		<Extension id=""MyLoader"" class=""TestLoader""/>
	</Path>
</Plugin>";
            var    reader = new StringReader(addInConfig);
            Plugin plugin = Plugin.Load(reader, ".");

            plugin.Enabled = true;
            PluginTree.InsertPlugin(plugin);
            ModelLoaderInterface loader = (ModelLoaderInterface)PluginTree.BuildItem("/Tests/Loaders/MyLoader", this);

            Assert.IsNotNull(loader);
        }
示例#4
0
        public virtual void Run()
        {
            ModelLoaderInterface loader = Plugins.Instance.GetLoader(projectFileLoaderCategory + ": " + projectFileLoaderName);

            projectProperties = ProjectPropertiesCommon.Create(new StreamReader(ProjectFile));
            Run(loader);
        }
示例#5
0
        public ModelLoaderInterface GetLoader(string name)
        {
            var count = 0;
            ModelLoaderInterface result = null;

            for (int i = 0; i < modelLoaders.Count; i++)
            {
                Type type   = modelLoaders[i];
                var  loader = (ModelLoaderInterface)Activator.CreateInstance(type);
                if (loader.Name.Equals(name))
                {
                    count++;
                    result = loader;
                }
            }
            if (count == 1)
            {
                return(result);
            }
            else if (count > 0)
            {
                throw new ApplicationException("More than one ModelLoader '" + name + "' was found.");
            }
            else
            {
                throw new ApplicationException("ModelLoader '" + name + "' not found.");
            }
        }
示例#6
0
 public void WriteEngineResults(ModelLoaderInterface loader, List <TickEngine> engines, Action <int, double> fitnessCallback)
 {
     for (int i = 0; i < engines.Count; i++)
     {
         WriteEngineResult(loader, engines[i], fitnessCallback);
     }
 }
示例#7
0
        public void WriteEngineResult(ModelLoaderInterface loader, TickEngine engine, Action <int, double> fitnessCallback)
        {
            try {
                loader.OptimizeOutput = new FileStream(fileName, FileMode.Append);
                using (StreamWriter fwriter = new StreamWriter(loader.OptimizeOutput)) {
                    ModelInterface topModel = engine.Model;
                    foreach (var chain in topModel.Chain.Dependencies)
                    {
                        var passModel  = chain.Model as StrategyInterface;
                        var strings    = passModel.Name.Split(new char[] { '-' });
                        var passNumber = int.Parse(strings[2]);
                        if (fitnessCallback != null)
                        {
                            fitnessCallback(passNumber, passModel.OnGetFitness());
                        }

                        if (passModel == null)
                        {
                            log.Error("Model " + passModel + " must implement the StrategyInterface or PortfolioInterface for the optimizer statistics results to get recorded.");
                        }
                        else
                        {
                            WritePassStats(fwriter, passModel);
                        }
                    }
                }
            } catch (Exception ex) {
                log.Error("ERROR: Problem writing optimizer results.", ex);
            }
        }
        public override void Run(ModelLoaderInterface loader)
        {
            SetupSymbolData();
            Factory.Provider.StartSockets();
            parallelMode = ParallelMode.RealTime;
            Factory.SysLog.RegisterHistorical("FIXSimulator", GetDefaultLogConfig());
            Factory.SysLog.RegisterRealTime("FIXSimulator", GetDefaultLogConfig());
            Config  = "WarehouseTest.config";
            Address = "inprocess";
#if !USE_LIME
            var provider     = "MBTFIXProvider/Simulate";
            var fixAssembly  = "MBTFIXProvider";
            var fixSimulator = "MBTProviderSimulator";
#else
            var provider     = "LimeProvider/Simulate";
            var fixAssembly  = "LimeProvider";
            var fixSimulator = "ProviderSimulator";
#endif
            AddProvider(provider);
            SetupProviderServiceConfig();
            var providerManager = Factory.Parallel.SpawnProvider("ProviderCommon", "ProviderManager");
            providerManager.SendEvent(new EventItem(EventType.SetConfig, "WarehouseTest"));
            using (Factory.Parallel.SpawnProvider(fixAssembly, fixSimulator, "Simulate", ProjectProperties))
            {
                base.Run(loader);
            }
            Factory.Provider.ShutdownSockets();
        }
示例#9
0
 public override void Run(ModelLoaderInterface loader)
 {
     parallelMode = ParallelMode.RealTime;
     Factory.SysLog.RegisterRealTime("RealTime", GetDefaultLogConfig());                       // This creates the config if not exists.
     Factory.SysLog.RegisterHistorical("Historical", HistoricalStarter.GetDefaultLogConfig()); // This creates the config if not exists.
     Factory.SysLog.ReconfigureForRealTime();
     base.Run(loader);
 }
示例#10
0
        public override void Run(ModelLoaderInterface loader)
        {
            Config = "WarehouseTest.config";
            var provider = "TickZoomCombinedMock";

            AddProvider(provider);
            SetupProviderServiceConfig(provider, (ushort)Port);
            base.Run(loader);
        }
示例#11
0
 private void SetupStarter(Starter starterInstance)
 {
     FlushCharts();
     IntervalsUpdate();
     starterInstance.ProjectProperties.ConfigFile                  = projectConfig;
     starterInstance.ProjectProperties.Starter.StartTime           = (TimeStamp)startDateTime;
     starterInstance.ProjectProperties.Starter.EndTime             = (TimeStamp)endDateTime;
     starterInstance.ProjectProperties.Starter.TestFinishedTimeout = TestFinishedTimeout;
     if (simulatorProperties != null)
     {
         starterInstance.ProjectProperties.Simulator = simulatorProperties;
     }
     starterInstance.BackgroundWorker = commandWorker;
     starterInstance.DataFolder       = dataSubFolder;
     if (!disableCharting)
     {
         if (CreateChart == null || ShowChart == null)
         {
             log.Warn("Charting is enabled but you never set one of the CreateChart or the ShowChart properties.");
         }
         else
         {
             starterInstance.CreateChartCallback = new CreateChartCallback(CreateChart);
             starterInstance.ShowChartCallback   = new ShowChartCallback(ShowChart);
             log.Info("Starter create chart callback set to " + starterInstance.CreateChartCallback);
         }
     }
     else
     {
         log.Warn("You have the \"disable charts\" check box enabled.");
     }
     starterInstance.ProjectProperties.Chart.ChartType = chartType;
     starterInstance.ProjectProperties.Starter.SetSymbols(symbolList);
     starterInstance.ProjectProperties.Starter.IntervalDefault = intervalDefault;
     starterInstance.Config = serviceConfig;
     starterInstance.Port   = servicePort;
     starterInstance.AddProvider(providerAssembly);
     if (useDefaultInterval)
     {
         starterInstance.ProjectProperties.Chart.IntervalChartBar = intervalDefault;
     }
     else
     {
         starterInstance.ProjectProperties.Chart.IntervalChartBar = intervalChartBar;
     }
     if (intervalChartBar.BarUnit == BarUnit.Default)
     {
         starterInstance.ProjectProperties.Chart.IntervalChartBar = intervalDefault;
     }
     log.Info("Running Loader named: " + modelLoader);
     loaderInstance = Plugins.Instance.GetLoader(modelLoader);
 }
示例#12
0
        public ModelInterface ProcessLoader(ModelLoaderInterface loader, int passNumber)
        {
            loader.OnClear();
            loader.OnLoad(ProjectProperties);
            ModelInterface topModel = loader.TopModel;

            if (!SetOptimizeValues(loader))
            {
                throw new ApplicationException("Error, setting optimize variables.");
            }
            topModel.Name += "-Pass-" + passNumber;
            return(topModel);
        }
示例#13
0
        public bool SetOptimizeValues(ModelLoaderInterface loader)
        {
            // Then set them for logging separately to optimization reports.
            Dictionary <string, object> optimizeValues = new Dictionary <string, object>();

            for (int i = 0; i < loader.Variables.Count; i++)
            {
                optimizeValues[loader.Variables[i].Name] = loader.Variables[i].Value;
            }

            bool retVal = true;

            foreach (var kvp in optimizeValues)
            {
                string   name      = kvp.Key;
                object   value     = kvp.Value;
                string[] namePairs = kvp.Key.Split('.');
                if (namePairs.Length < 2)
                {
                    log.Error("Sorry, the optimizer variable '" + kvp.Key + "' was not found.");
                    retVal = false;
                    continue;
                }
                string            strategyName = namePairs[0];
                StrategyInterface strategy     = null;
                foreach (StrategyInterface tempStrategy in GetStrategyList(loader.TopModel.Chain.Tail))
                {
                    if (tempStrategy.Name.CompareWildcard(strategyName, false))
                    {
                        strategy = tempStrategy;
                        if (!SetOptimizeValue(strategy, name, value))
                        {
                            retVal = false;
                            break;
                        }
                    }
                }
                if (strategy == null)
                {
                    log.Error("Sorry, a strategy matching '" + strategyName + "' was never found for optimizer variable '" + kvp.Key + "'.");
                    retVal = false;
                    continue;
                }
            }
            optimizeValueMap.Add(loader.TopModel, optimizeValues);
            return(retVal);
        }
示例#14
0
        public virtual void Run(ModelLoaderInterface loader)
        {
            if (loader.Category == projectFileLoaderCategory && loader.Name == projectFileLoaderName)
            {
                log.Notice("Loading project from " + ProjectFile);
                projectProperties = ProjectPropertiesCommon.Create(new StreamReader(ProjectFile));
            }
            loader.OnInitialize(ProjectProperties);
            loader.OnLoad(ProjectProperties);
            if (!SetOptimizeValues(loader))
            {
                throw new ApplicationException("Error, setting optimize variables. See log file for details.");
            }
            ModelInterface model = loader.TopModel;

            Run(model);
        }
示例#15
0
        public override void Run(ModelLoaderInterface loader)
        {
            Factory.SysLog.Reconfigure("FIXRealTimePlayBack", GetDefaultLogConfig());
            Config = "WarehouseTest.config";
            var provider = "MBTFIXProvider/Simulate";

            AddProvider(provider);
            SetupProviderServiceConfig(provider, (ushort)Port);
            try {
                fixServer = (FIXSimulator)Factory.FactoryLoader.Load(typeof(FIXSimulator), "MBTFIXProvider", "PlayBack");
                base.Run(loader);
            } finally {
                if (fixServer != null)
                {
                    fixServer.Dispose();
                }
            }
        }
示例#16
0
 public StartCommand(Starter starter, ModelLoaderInterface loader)
 {
     this.starter      = starter;
     this.loader       = loader;
     CanExecuteChanged = (s, e) => { };
 }
示例#17
0
        public override void Run(ModelLoaderInterface loader)
        {
            Factory.Parallel.SetMode(parallelMode);
            Factory.SysLog.ResetConfiguration();
            this.loader = loader;

            try {
                if (loader.OptimizeOutput == null)
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(FileName));
                    File.Delete(FileName);
                }
            } catch (Exception ex) {
                log.Error("Error while creating directory and deleting '" + FileName + "'.", ex);
                return;
            }

            log.Notice("Beginning Genetic Optimize of: ");
            log.Notice(loader.Name + " model loader. Type: " + loader.GetType().Name);
            loader.QuietMode = true;

            loader.OnInitialize(ProjectProperties);

            optimizeVariables = new List <ModelProperty>();
            for (int i = 0; i < loader.Variables.Count; i++)
            {
                ModelProperty var = loader.Variables[i];
                if (var.Optimize)
                {
                    optimizeVariables.Add(var);
                }
            }

            // Get Total Number of Bits
            int totalBits = 0;

            for (int i = 0; i < optimizeVariables.Count; i++)
            {
                ModelProperty var  = optimizeVariables[i];
                int           bits = Convert.ToString(var.Count - 1, 2).Length;
                totalBits += bits;
            }

            if (optimizeVariables.Count == 1)
            {
                generationCount = 1;
            }

            // Get the highest count.
            populationCount = totalPasses / generationCount;
            tasksRemaining  = totalPasses;

            log.Notice("Assigning genomes.");

            // Create initial set of random chromosomes.
            generation = new List <Chromosome>();
            // This list assures we never retry a previous one twice.
            alreadyTried = new List <Chromosome>();

            // Create a genome holder.
            int[] genome = new int[optimizeVariables.Count];

            // Indexes for going through randomList
            int[] indexes = new int[optimizeVariables.Count];

//			for( int repeat=0; repeat < Math.Min(optimizeVariables.Count,2); repeat++) {
//
            //Get random values for each.
            List <List <int> > randomLists = new List <List <int> >();

            for (int i = 0; i < optimizeVariables.Count; i++)
            {
                randomLists.Add(GetRandomIndexes(optimizeVariables[i]));
            }

            // Create initial population
            for (int loop = 0; loop < populationCount; loop++)
            {
                // Set the genome from the randomLists using the indexes.
                for (int i = 0; i < optimizeVariables.Count; i++)
                {
                    genome[i] = randomLists[i][indexes[i]];
                }

                Chromosome chromosome = new Chromosome(genome);
                log.Debug(chromosome.ToString());
                generation.Add(chromosome);
                alreadyTried.Add(chromosome);
                for (int i = 0; i < indexes.Length; i++)
                {
                    indexes[i]++;
                    ModelProperty var = optimizeVariables[i];
                    if (indexes[i] >= populationCount)
                    {
                        indexes[i] = 0;
                    }
                }
            }
//			}

                        #if CLRPROFILER
            CLRProfilerControl.LogWriteLine("Entering Genetic Loop");
            CLRProfilerControl.AllocationLoggingActive = true;
            CLRProfilerControl.CallLoggingActive       = false;
                        #endif

            int totalEngineCount = Environment.ProcessorCount * generationCount;

            // Pre-setup engines. This causes the progress
            // bar to show a complete set of information for all
            // generations.
            var iteration = 1;

            for (int genCount = 0; genCount < generationCount && !CancelPending; genCount++)
            {
                // Assign fitness values
                var topModels = new List <ModelInterface>();
                for (int i = generation.Count - 1; i >= 0; i--)
                {
                    Chromosome chromosome = generation[i];
                    if (!chromosome.FitnessAssigned)
                    {
                        ModifyVariables(chromosome);
                        var model = ProcessLoader(loader, i);
                        topModels.Add(model);
                    }
                    else
                    {
                        tasksRemaining--;
                        log.Debug("Saves processing on " + chromosome + "!");
                    }
                }

                int tasksPerEngine = CalculateTasksPerEngine(topModels.Count);

                ModelInterface topModel  = new Portfolio();
                int            passCount = 0;
                foreach (var model in topModels)
                {
                    topModel.Chain.Dependencies.Add(model.Chain);
                    passCount++;
                    if (passCount % tasksPerEngine == 0)
                    {
                        var engine = SetupEngine(true, "Iteration" + ++iteration);
                        engine.Model = topModel;
                        engine.QueueTask();
                        engineIterations.Add(engine);
                        topModel = new Portfolio();
                        if (engineIterations.Count >= Environment.ProcessorCount)
                        {
                            ProcessIteration();
                        }
                    }
                }

                if (topModel.Chain.Dependencies.Count > 0)
                {
                    var engine = SetupEngine(true, "Iteration" + ++iteration);
                    engine.Model = topModel;
                    engine.QueueTask();
                    engineIterations.Add(engine);
                }

                if (engineIterations.Count > 0)
                {
                    ProcessIteration();
                }

                generation.Sort();

                log.Notice("After sorting generation...");
                double maxFitness = 0;
                for (int i = 0; i < generation.Count; i++)
                {
                    log.Debug(generation[i].ToString());
                    maxFitness = Math.Max(generation[i].Fitness, maxFitness);
                }
                // If none of the genes in the chromosome
                // had a positive fitness, stop here.
                if (maxFitness <= 0)
                {
                    break;
                }

                List <Chromosome> newGeneration = new List <Chromosome>();
                log.Notice("Crossover starting...");
                while (newGeneration.Count < populationCount - 1)
                {
                    Chromosome chromo1 = Roulette();
                    Chromosome chromo2;
                    do
                    {
                        chromo2 = Roulette();
                    } while(chromo2.Equals(chromo1));

                    log.Debug("Before: " + chromo1 + " - " + chromo2);
                    chromo1.DoubleCrossOver(chromo2);
                    log.Debug("After: " + chromo1 + " - " + chromo2);

                    if (alreadyTried.Contains(chromo1))
                    {
                        chromo1 = alreadyTried[alreadyTried.IndexOf(chromo1)];
                    }
                    else
                    {
                        alreadyTried.Add(chromo1);
                    }
                    if (alreadyTried.Contains(chromo2))
                    {
                        chromo2 = alreadyTried[alreadyTried.IndexOf(chromo2)];
                    }
                    else
                    {
                        alreadyTried.Add(chromo2);
                    }
                    newGeneration.Add(chromo1);
                    newGeneration.Add(chromo2);
                }
                generation = newGeneration;
            }

            GetEngineResults();

            WriteEngineResults(loader, engineIterations);

            engineIterations.Clear();

                        #if CLRPROFILER
            CLRProfilerControl.AllocationLoggingActive = false;
            CLRProfilerControl.CallLoggingActive       = false;
            CLRProfilerControl.LogWriteLine("Exiting Genetic Loop");
                #endif

            log.Notice("Genetic Algorithm Finished.");
        }
示例#18
0
 public override void Run(ModelLoaderInterface loader)
 {
     Factory.SysLog.Reconfigure("Historical", GetDefaultLogConfig());
     base.Run(loader);
 }
示例#19
0
 public void WriteEngineResults(ModelLoaderInterface loader, List <TickEngine> engines)
 {
     WriteEngineResults(loader, engines, null);
 }
示例#20
0
        public override void Run(ModelLoaderInterface loader)
        {
            Factory.SysLog.ResetConfiguration();
            try {
                if (loader.OptimizeOutput == null)
                {
                    Directory.CreateDirectory(Path.GetDirectoryName(FileName));
                    File.Delete(FileName);
                }
            } catch (Exception ex) {
                log.Error("Error while creating directory and deleting '" + FileName + "'.", ex);
                return;
            }
            this.loader           = loader;
            this.loader.QuietMode = true;
            startMillis           = Factory.TickCount;
            engineIterations      = new List <TickEngine>();

            loader.OnInitialize(ProjectProperties);

            totalTasks = 0;

            foreach (var num in RecursiveOptimize(0))
            {
                totalTasks++;
            }

            tasksRemaining = totalTasks;

            int tasksPerEngine = CalculateTasksPerEngine(totalTasks);

            int iterations     = Math.Max(1, totalTasks / maxParallelPasses);
            int leftOverPasses = Math.Max(0, totalTasks - (maxParallelPasses * iterations));

            if (totalTasks % maxParallelPasses > 0)
            {
                log.Notice("Planning " + iterations + " iterations with " + maxParallelPasses + " passes plus 1 pass with " + leftOverPasses + " iterations.");
            }
            else
            {
                log.Notice("Planning " + iterations + " iterations with " + maxParallelPasses + " passes each.");
            }

            ModelInterface topModel = new Portfolio();

            passCount = 0;
            foreach (var num in RecursiveOptimize(0))
            {
                ModelInterface model = ProcessLoader(loader, passCount);
                topModel.Chain.Dependencies.Add(model.Chain);
                passCount++;
                if (passCount % tasksPerEngine == 0)
                {
                    TickEngine engine = ProcessHistorical(topModel, true);
                    engine.QueueTask();
                    engineIterations.Add(engine);
                    topModel = new Portfolio();
                    if (engineIterations.Count >= Environment.ProcessorCount)
                    {
                        ProcessIteration();
                    }
                }
            }

            if (topModel.Chain.Dependencies.Count > 0)
            {
                TickEngine engine = ProcessHistorical(topModel, true);
                engine.QueueTask();
                engineIterations.Add(engine);
            }

            if (engineIterations.Count > 0)
            {
                ProcessIteration();
            }

            long elapsedMillis = Factory.TickCount - startMillis;

            log.Notice("Finished optimizing in " + elapsedMillis + "ms.");
        }