예제 #1
0
        /// <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");
            }
        }
예제 #2
0
        /// <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");
            }
        }
예제 #3
0
        /// <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");
            }
        }
예제 #4
0
 /// <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");
            }
        }