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); } }
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; }
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); } } } }