/// <summary> /// Starts custom strategy execution /// </summary> public void ExecuteStrategy() { try { // Verify Strategy Instance if (_tradeHubStrategy == null) { //create DB strategy Strategy strategy = new Strategy(); strategy.Name = _strategyType.Name; strategy.StartDateTime = DateTime.Now; // Get new strategy instance var strategyInstance = LoadCustomStrategy.CreateStrategyInstance(_strategyType, CtorArguments); if (strategyInstance != null) { // Cast to TradeHubStrategy Instance _tradeHubStrategy = strategyInstance as TradeHubStrategy; } if (_tradeHubStrategy == null) { if (_asyncClassLogger.IsInfoEnabled) { _asyncClassLogger.Info("Unable to initialize Custom Strategy: " + _strategyType.FullName, _type.FullName, "ExecuteStrategy"); } // Skip execution of further actions return; } // Set Strategy Name _tradeHubStrategy.StrategyName = LoadCustomStrategy.GetCustomClassSummary(_strategyType); // Register Events _tradeHubStrategy.OnStrategyStatusChanged += OnStrategyStatusChanged; _tradeHubStrategy.OnNewExecutionReceived += OnNewExecutionReceived; } if (_asyncClassLogger.IsInfoEnabled) { _asyncClassLogger.Info("Executing user strategy: " + _strategyType.FullName, _type.FullName, "ExecuteStrategy"); } //Overriding if running on simulated exchange ManageBackTestingStrategy(); // Start Executing the strategy _tradeHubStrategy.Run(); } catch (Exception exception) { _asyncClassLogger.Error(exception, _type.FullName, "ExecuteStrategy"); } }
/// <summary> /// Sets up the strategy to be executed /// </summary> /// <param name="initializeStrategy">Holds info to initialize the given strategy</param> private void InitializeUserStrategy(InitializeStrategy initializeStrategy) { try { if (_asyncClassLogger.IsInfoEnabled) { _asyncClassLogger.Info("Setting up user strategy to run: " + initializeStrategy.StrategyType.FullName, _type.FullName, "InitializeUserStrategy"); } // Get new Key. string key = ApplicationIdGenerator.NextId(); // Save Strategy details in new Strategy Executor object StrategyExecutor strategyExecutor = new StrategyExecutor(key, initializeStrategy.StrategyType, initializeStrategy.CtorArguments); // Add to local map _strategiesCollection.AddOrUpdate(key, strategyExecutor, (ky, value) => strategyExecutor); //Register Event strategyExecutor.StatusChanged += OnStatusChanged; strategyExecutor.ExecutionReceived += OnExecutionArrived; // Save Brief info of constructor parameters StringBuilder briefInfo = new StringBuilder(); // Add Strategy Description briefInfo.Append(LoadCustomStrategy.GetCustomClassSummary(initializeStrategy.StrategyType)); briefInfo.Append(" :: "); // Add Parameters Description foreach (object ctorArgument in initializeStrategy.CtorArguments) { briefInfo.Append(ctorArgument.ToString()); briefInfo.Append("|"); } // Create object to add to AddStrattegy.cs object SelectedStrategy selectedStrategy = new SelectedStrategy { Key = key, Symbol = initializeStrategy.CtorArguments[3].ToString(), BriefInfo = briefInfo.ToString() }; // Create object to pass to event aggregator. AddStrategy addStrategy = new AddStrategy(selectedStrategy); // Publish event to notify listeners. EventSystem.Publish <AddStrategy>(addStrategy); } catch (Exception exception) { _asyncClassLogger.Error(exception, _type.FullName, "InitializeUserStrategy"); } }
/// <summary> /// Displays the selected strategy parameters /// </summary> /// <param name="optimizeStrategy">Contains info regarding the strategy to be optimized</param> private void DisplaySelectedStrategy(OptimizationParametersBruteForce optimizeStrategy) { try { if (Logger.IsDebugEnabled) { Logger.Debug("Displaying the strategy parameters", _type.FullName, "DisplaySelectedStrategy"); } _parameters.Clear(); // Get Strategy Info StrategyInfo = LoadCustomStrategy.GetCustomClassSummary(optimizeStrategy.StrategyType); // Save Ctor Arguments _ctorArguments = optimizeStrategy.CtorArguments; // Save Custom Strategy Type _strategyType = optimizeStrategy.StrategyType; // Save Parameters Details _parmatersDetails = optimizeStrategy.ParameterDetails; // Get all parameters for (int i = 0; i < optimizeStrategy.CtorArguments.Length; i++) { ParameterInfo parameterInfo = new ParameterInfo { Index = i, Parameter = optimizeStrategy.ParameterDetails[i].Name, Value = optimizeStrategy.CtorArguments[i].ToString() }; _currentDispatcher.Invoke(DispatcherPriority.Normal, (Action)(() => { // Add to collection _parameters.Add(parameterInfo); })); } } catch (Exception exception) { Logger.Error(exception, _type.FullName, "DisplaySelectedStrategy"); } }
/// <summary> /// Get class summary /// </summary> /// <param name="type"></param> /// <returns></returns> public static string GetCustomClassSummary(Type type) { return(LoadCustomStrategy.GetCustomClassSummary(type)); }
/// <summary> /// Displays available parameters for genetic optimization /// </summary> private void DisplayGeneticParameters(OptimizationParametersGeneticAlgo optimizeStrategyGeneticAlgo) { try { if (Logger.IsDebugEnabled) { Logger.Debug("Displaying the strategy parameters", _type.FullName, "DisplaySelectedStrategy"); } _parameters.Clear(); // Get Strategy Info GaStrategyInfo = LoadCustomStrategy.GetCustomClassSummary(optimizeStrategyGeneticAlgo.StrategyType); // Save Ctor Arguments _ctorArguments = optimizeStrategyGeneticAlgo.CtorArguments; // Save Custom Strategy Type _strategyType = optimizeStrategyGeneticAlgo.StrategyType; int i = 0; // Get all parameters foreach (var parameters in optimizeStrategyGeneticAlgo.GeneticAlgoParameters) { double start = 0; double end = 0; if (i == 0) { start = 1; end = 5; } else if (i == 1) { start = 0.0001; end = 0.011; } else if (i == 2) { start = 0.2; end = 10; } else if (i == 3) { start = 0.002; end = 0.01; } GeneticAlgoParameters parameterInfo = new GeneticAlgoParameters { Index = parameters.Key, Description = parameters.Value.Item1, StartValue = start, EndValue = end, }; i++; // Update UI Element _currentDispatcher.Invoke(DispatcherPriority.Normal, (Action)(() => { // Add to collection _parameters.Add(parameterInfo); })); } } catch (Exception exception) { Logger.Error(exception, _type.FullName, "DisplayGeneticParameters"); } }