Example #1
0
        void OnRealTimeTickDataUpdate(string sender, MarketTickData message)
        {
            //TODO: This depends on the mode of when the trade signal should be run

            if (m_TradingModel.IsDaily && !m_IsDailyTradeSignalRan)
            {
                m_IsDailyTradeSignalRan = true;
                RunTradeSignal();
            }

            if (m_SignalState != TradingModelSignalState.TradeSignal)
            {
                //signal is already generated, Run Entry/Exit
                if (m_SignalState == TradingModelSignalState.TradeEntry)
                {
                    m_TradeEntryInstruction = m_TradingModel.TradeEntry();

                    if (m_TradeEntryInstruction != null)
                    {
                        //add the bar index for entry position
                        m_TradeEntryInstruction.BarIndex = m_CurrentBarIndex;
                        m_SignalState = TradingModelSignalState.TradeExit;

                        //add Trade entry to the money manager
                        m_moneyMgr.AddTradeEntry(m_TradeEntryInstruction);
                    }
                }

                if (m_SignalState == TradingModelSignalState.TradeExit)
                {
                    m_TradeExitInstruction = m_TradingModel.TradeExit(m_TradeEntryInstruction);


                    if (m_TradeExitInstruction != null)
                    {
                        //log the bar index for exit signal
                        m_TradeExitInstruction.BarIndex = m_CurrentBarIndex;

                        //add Trade exit to the money manager
                        m_moneyMgr.AddTradeExit(m_TradeExitInstruction);

                        //unsubscribe from all events
                        m_BarDataHandler.BarDataCreatedCompleted       -= OnBarDataCreatedCompleted;
                        m_TickDataHandler.OnRealTimeTickDataUpdate     -= OnRealTimeTickDataUpdate;
                        m_TickDataHandler.OnRealTimeTickDataDateChange -= OnRealTimeTickDataDateChange;

                        if (CallbackTradePositionCloseReceived != null)
                        {
                            CallbackTradePositionCloseReceived.Invoke(m_ref, m_TradeEntryInstruction, m_TradeExitInstruction);
                        }
                    }
                }
            }

            if (CallbackTickDataUpdateReceived != null)
            {
                CallbackTickDataUpdateReceived.Invoke(m_jobId, message, m_CurrentBarIndex);
            }
        }
Example #2
0
        public TradingModelRunner(
            int reference,
            ITradeModel tradeModel,
            int jobId,
            string instrumentCode,
            DateTime regressionEndDate,
            BarDataHandler barDataHandler,
            TickDataHandler tickDataHandler,
            DailyPriceBarDataHandler dailyPriceBarDataHandler,
            BarCompleted callBackBarCompleted,
            EntrySignalReceived callBackEntrySignalReceived,
            TradePositionCloseReceived callBackTradePositionCloseReceived,
            RegressionJobFinished callbackRegressionJobFinished,
            TickDataUpdateReceived callbackTickDataUpdateReceived,
            IMoneyManager moneyManager)
        {
            m_ref                 = reference;
            m_TradingModel        = tradeModel;
            m_BarDataHandler      = barDataHandler;
            m_TickDataHandler     = tickDataHandler;
            m_DailyBarDataHandler = dailyPriceBarDataHandler;
            m_jobId               = jobId;
            m_instrumentCode      = instrumentCode;
            m_RegressionEndDate   = regressionEndDate;
            m_moneyMgr            = moneyManager;

            CallbackOnEntrySignalReceived      = callBackEntrySignalReceived;
            CallbackTradePositionCloseReceived = callBackTradePositionCloseReceived;
            CallbackRegressionJobFinished      = callbackRegressionJobFinished;
            CallbackBarCompleted           = callBackBarCompleted;
            CallbackTickDataUpdateReceived = callbackTickDataUpdateReceived;

            m_SignalState = TradingModelSignalState.TradeSignal;

            m_TradingModel.SetHandlers(barDataHandler, tickDataHandler, dailyPriceBarDataHandler, moneyManager);

            m_BarDataHandler.BarDataCreatedCompleted       += OnBarDataCreatedCompleted;
            m_TickDataHandler.OnRealTimeTickDataUpdate     += OnRealTimeTickDataUpdate;
            m_TickDataHandler.OnRealTimeTickDataDateChange += OnRealTimeTickDataDateChange;
        }
Example #3
0
        private void RunTradeSignal()
        {
//Console.WriteLine("Bar completed: {0}", args.Bar);
            if (m_SignalState == TradingModelSignalState.TradeSignal)
            {
                if (m_TradingModel.TradeSignal())
                {
                    m_SignalState = TradingModelSignalState.TradeEntry;

                    if (m_TradingModel.IsDaily)
                    {
                        m_IsDailyTradeSignalRan = true;
                    }


                    if (CallbackOnEntrySignalReceived != null)
                    {
                        CallbackOnEntrySignalReceived.Invoke(m_ref, m_CurrentBarIndex);
                    }
                }
            }
        }