public void OverRideTickEventTestCase()
        {
            _tradeHubStrategy.InitializeMarketDataServiceDisruptor(new IEventHandler <RabbitMqRequestMessage>[] { this });

            _tickArrived = false;

            _manualTickEvent = new ManualResetEvent(false);

            Thread.Sleep(5000);
            _tradeHubStrategy.Run();

            _manualTickEvent.WaitOne(300000, false);

            Assert.AreEqual(true, _tickArrived, "Tick Arrived");
        }
예제 #2
0
        /// <summary>
        /// Executes single iteration of the given strategy instance
        /// </summary>
        public double ExecuteStrategy(double alpha, double beta, double gemma, double epsilon)
        {
            //SetStrategyParameters(alpha, beta, gemma, epsilon);

            _manualReset = new ManualResetEvent(false);

            // Update Strategy Parameters
            _tradeHubStrategy.SetParameters(new object[] { alpha, beta, gemma, epsilon });

            // Reset Statistics for current iteration
            _statistics.ResetAllValues();

            // Start Strategy Execution
            _tradeHubStrategy.Run();

            // Wait for the strategy to execute
            _manualReset.WaitOne();

            ////Dispose Object
            //_tradeHubStrategy.Dispose();

            //// Force garbage collector to free memory
            //GC.Collect();
            //GC.WaitForPendingFinalizers();

            //ExecuteStrategy(alpha, beta, gemma, epsilon);

            // return current iterations PnL
            return((double)_statistics.GetRisk());
        }
예제 #3
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");
            }
        }
        /// <summary>
        /// Execute Strategy iteration to calculate Fitness
        /// </summary>
        /// <returns>Return Strategy's Fitness for current execution</returns>
        public double ExecuteStrategy(double[] values)
        {
            try
            {
                _manualReset = new ManualResetEvent(false);

                //convert all parameters to object.
                object[] array = new object[values.Length];
                for (int i = 0; i < values.Length; i++)
                {
                    array[i] = values[i];
                }
                // Update Strategy Parameters
                _tradeHubStrategy.SetParameters(array);

                // Reset Statistics for current iteration
                _statistics.ResetAllValues();
                _orderExecutor.Clear();

                // Start Strategy Execution
                _tradeHubStrategy.Run();

                // Wait for the strategy to execute
                _manualReset.WaitOne();

                // Clear subscription maps
                _dataHandler.ClearMaps();
                _tradeHubStrategy.ClearOrderMap();

                // return current iterations risk
                return(-1 * (double)_tradeHubStrategy.GetObjectiveFunctionValue());
            }
            catch (Exception exception)
            {
                _logger.Error(exception, _type.FullName, "ExecuteStrategy");
                return(default(double));
            }
        }
예제 #5
0
        /// <summary>
        /// Starts custom strategy execution
        /// </summary>
        public void ExecuteStrategy()
        {
            try
            {
                bool parameterChanged = true;

                // Check if any strategy parameter was changed
                if (_ctorArguments != null)
                {
                    parameterChanged = _strategyInstance.ParametersChanged(_ctorArguments);

                    // Get updated values to be used
                    if (parameterChanged)
                    {
                        // Get parameter values to be used
                        _ctorArguments = _strategyInstance.GetParameterValues();
                    }
                }

                // Verify Strategy Instance
                if (_tradeHubStrategy == null || parameterChanged)
                {
                    //create DB strategy
                    Strategy strategy = new Strategy();
                    strategy.Name          = _strategyType.Name;
                    strategy.StartDateTime = DateTime.Now;

                    // Get parameter values to be used
                    _ctorArguments = _strategyInstance.GetParameterValues();

                    // Get new strategy instance
                    var strategyInstance = StrategyHelper.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 = StrategyHelper.GetCustomClassSummary(_strategyType);

                    // Set notificaitons preference
                    _tradeHubStrategy.SetNewOrderNotification(_newOrderNotification);
                    _tradeHubStrategy.SetAcceptedOrderNotification(_acceptedOrderNotification);
                    _tradeHubStrategy.SetExecutionNotification(_executionNotification);
                    _tradeHubStrategy.SetRejectionNotification(_rejectionNotification);

                    // Register Events
                    RegisterTradeHubStrategyEvent();
                }

                if (_asyncClassLogger.IsInfoEnabled)
                {
                    _asyncClassLogger.Info("Executing user strategy: " + _strategyType.FullName, _type.FullName, "ExecuteStrategy");
                }

                //Overriding if running on simulated exchange
                ManageBackTestingStrategy();

                _stopInstanceRequested = false;

                // Start Executing the strategy
                _tradeHubStrategy.Run();
            }
            catch (Exception exception)
            {
                _asyncClassLogger.Error(exception, _type.FullName, "ExecuteStrategy");
            }
        }