public void test_reqHistDataIfValid() { //[Test : Request Hist Data valid, needMergeFlag is true, isReqHistDataSent is false, current message time is after the hist data send time] DateTime processStartTime = new DateTime(2015, 10, 21, 10, 15, 0, DateTimeKind.Local); IAppMDManager appMDManager = getAppRTBSynchronizer_for_reqHistDataIfValid(processStartTime); AppRTBSynchronizer synchronizer = new AppRTBSynchronizer(appMDManager); synchronizer.setNeedMergeFlag(true); synchronizer.setIsReqHistDataSent(false); DateTime validStartTime = new DateTime(2015, 10, 21, 10, 15, 35, DateTimeKind.Local); //Console.Write(""+ synchronizer.); synchronizer.reqHistDataIfValid(validStartTime, "MIDPOINT", null); Assert.IsTrue(synchronizer.getIsReqHistDataSent()); //[Test : Request Hist Data not valid, needMergeFlag is true, isReqHistDataSent is false, current message time is before the hist data send time] appMDManager = getAppRTBSynchronizer_for_reqHistDataIfValid(processStartTime); synchronizer = new AppRTBSynchronizer(appMDManager); synchronizer.setNeedMergeFlag(true); synchronizer.setIsReqHistDataSent(false); DateTime invalidStartTime = new DateTime(2015, 10, 21, 10, 15, 25, DateTimeKind.Local); synchronizer.reqHistDataIfValid(invalidStartTime, "MIDPOINT", null); Assert.IsFalse(synchronizer.getIsReqHistDataSent()); }
public void test_isRTBarMergeNeed() { DateTime afterSetTime = new DateTime(2015, 11, 21, 9, 15, 55, DateTimeKind.Local); DateTime afterSetTime2 = new DateTime(2015, 11, 21, 9, 16, 0, DateTimeKind.Local); DateTime beforeSetTime = new DateTime(2015, 11, 21, 9, 10, 55, DateTimeKind.Local); DateTime beforeSetTime2 = new DateTime(2015, 11, 21, 9, 11, 0, DateTimeKind.Local); IBMessage afterSetTimeMessage = createTimeMessage(afterSetTime); IBMessage beforeSetTimeMessage = createTimeMessage(beforeSetTime); IBMessage afterSetTimeMessage2 = createTimeMessage(afterSetTime2); IBMessage beforeSetTimeMessage2 = createTimeMessage(beforeSetTime2); String strTickerStartTimeOfDay = "09:15:00"; //[Test : method return true, message time equal to RtbDataStartTime] IAppMDManager appMDManager = getAppRTBSynchronizer_for_isRTBarMergeNeed(afterSetTime); AppRTBSynchronizer synchronizer = new AppRTBSynchronizer(appMDManager); //IAppRTBSynchronizer synchronizer = appMDManager.getAppRTBSynchronizer(); Assert.AreEqual(true, synchronizer.isRTBarMergeNeed(strTickerStartTimeOfDay)); //[Test : method return true, message time later than RtbDataStartTime] appMDManager = getAppRTBSynchronizer_for_isRTBarMergeNeed(afterSetTime); synchronizer = new AppRTBSynchronizer(appMDManager); Assert.AreEqual(true, synchronizer.isRTBarMergeNeed(strTickerStartTimeOfDay)); //[Test : method return false, RtbDataStartTime before the strTickerStartTimeOfDay] appMDManager = getAppRTBSynchronizer_for_isRTBarMergeNeed(beforeSetTime); synchronizer = new AppRTBSynchronizer(appMDManager); Assert.AreEqual(false, synchronizer.isRTBarMergeNeed(strTickerStartTimeOfDay)); //[Test : method return false, RtbDataStartTime before the strTickerStartTimeOfDay] appMDManager = getAppRTBSynchronizer_for_isRTBarMergeNeed(beforeSetTime); synchronizer = new AppRTBSynchronizer(appMDManager); Assert.AreEqual(false, synchronizer.isRTBarMergeNeed(strTickerStartTimeOfDay)); }
public AppStrategyManager(IIBTradeAppBridge appForm) { appMDManager = new AppMDManager(appForm); appEventManager = new AppEventManager(this); appOrderManager = new AppOrderManager(this); appMaintenanceManager = new AppMainteanceManager(this); appMaintenanceManager.startManager(); ParentUI = appForm; //OrderRepositry = new ConcurrentDictionary<string, OrderRecord>(); activeStgNamesMap = new ConcurrentDictionary <String, String>(); storeStg = new Dictionary <string, IStrategy>(); storeStg.Add(AppConstant.STG1_SHORT_NAME, new StrategyRandom1(AppConstant.STG1_SHORT_NAME, 0)); storeStg.Add(AppConstant.STG2_SHORT_NAME, new StrategyRBreakerReverse1(AppConstant.STG2_SHORT_NAME, 1)); storeStg.Add(AppConstant.STG3_SHORT_NAME, new StrategyRBreakerTrend1(AppConstant.STG3_SHORT_NAME, 2)); storeStg.Add(AppConstant.STG4_SHORT_NAME, new StrategyRandom4(AppConstant.STG4_SHORT_NAME, 3)); /* * storeStg.Add(AppConstant.STG5_SHORT_NAME, new StrategyStastic1(AppConstant.STG5_SHORT_NAME, 4)); * storeStg.Add(AppConstant.STG6_SHORT_NAME, new StrategyRBreaker1(AppConstant.STG6_SHORT_NAME, 5)); * storeStg.Add(AppConstant.STG7_SHORT_NAME, new StrategyRBreakerTrend2(AppConstant.STG7_SHORT_NAME, 6)); */ StoreCancelToken = new ConcurrentDictionary <string, CancellationTokenSource>(); TimeDiffServer = long.MaxValue; appEventManager.startGenerateTimeEvents(); }
public RealTimeBarsManager(IBClient ibClient, Chart rtBarsChart, DataGridView rtBarsGrid, IAppMDManager MDManager, IBTradeApp appForm) : base(ibClient, rtBarsChart, rtBarsGrid, appForm) { this.MDManager = MDManager; //this.marketDataHelper = marketDataHelper; //this.appForm = appForm; }
public override void init(Object caller, Dictionary <String, String> inputArgs, TickerInfo info) { stgManager = (AppStrategyManager)caller; execution = new SignalContext(); eventManager = stgManager.getAppEventManager(); MDManager = stgManager.getAppMDManager(); stgHelper = new StrategyHelper(stgManager, stgName, stgIndex, execution); WTS = info.whatToShow; }
/* * private DateTime extractDateTimeFromMessage(IBMessage message) * { * RealTimeBarMessage rtBar = (RealTimeBarMessage)message; * DateTime start = new DateTime(1970, 1, 1, 0, 0, 0); * DateTime dt = start.AddMilliseconds(rtBar.Timestamp * 1000).ToLocalTime(); * return dt; * }*/ private IAppMDManager getAppRTBSynchronizer_for_isRTBarMergeNeed(DateTime dt) { var mock = new Mock <IAppMDManager>(); mock.Setup(foo => foo.getRtbDataStartTime()).Returns(dt); IAppMDManager fooObj = mock.Object; return(fooObj); }
public void test_mergeRTBHistDataIfValid_negative4() { //[Test : merge unsuccess, RTB data serie is null] IAppRTBSynchronizer synchronizer = getSynchronizer_for_mergeRTBHistDataIfValid_negative4(); synchronizer.mergeRTBHistDataIfValid(); IAppMDManager appMDManager = synchronizer.getAppMDManager(); Series <DateTime, MarketDataElement> TimeBarSeries = appMDManager.getTimeBarSeries(); Assert.IsNull(TimeBarSeries); Assert.AreEqual(false, synchronizer.getIsDataMerged()); }
public void test_mergeRTBHistDataIfValid_negative2() { //[Test : merge unsuccess, hist data is not fully loaded yet, missing the last hist data] IAppRTBSynchronizer synchronizer = getSynchronizer_for_mergeRTBHistDataIfValid_negative2(); synchronizer.mergeRTBHistDataIfValid(); IAppMDManager appMDManager = synchronizer.getAppMDManager(); Series <DateTime, MarketDataElement> TimeBarSeries = appMDManager.getTimeBarSeries(); Assert.IsNull(TimeBarSeries); Assert.AreEqual(false, synchronizer.getIsDataMerged()); }
public HistoricalDataManager(IBClient ibClient, Chart chart, DataGridView gridView, IBTradeApp appForm) : base(ibClient, chart) { /* * Chart historicalChart = (Chart)uiControl; * historicalChart.Series[0]["PriceUpColor"] = "Green"; * historicalChart.Series[0]["PriceDownColor"] = "Red"; */ this.gridView = gridView; this.appForm = appForm; AppStrategyManager stgManager = appForm.appStrategyManager; this.appMDManager = stgManager.getAppMDManager(); this.RTBSynchronizer = appMDManager.getAppRTBSynchronizer(); }
public void test_mergeRTBHistDataIfValid_positive2() { //[Test : merge success, histDataSeries and RTBDataSeries is not continuous] IAppRTBSynchronizer synchronizer = getSynchronizer_for_mergeRTBHistDataIfValid_positive2(); synchronizer.mergeRTBHistDataIfValid(); IAppMDManager appMDManager = synchronizer.getAppMDManager(); Series <DateTime, MarketDataElement> TimeBarSeries = appMDManager.getTimeBarSeries(); Assert.AreEqual(10, TimeBarSeries.KeyCount); Assert.AreEqual(true, TimeBarSeries.TryGet(new DateTime(2015, 10, 21, 9, 15, 0, DateTimeKind.Local)).HasValue); Assert.AreEqual(true, TimeBarSeries.TryGet(new DateTime(2015, 10, 21, 9, 23, 0, DateTimeKind.Local)).HasValue); Assert.AreEqual(true, TimeBarSeries.TryGet(new DateTime(2015, 10, 21, 9, 24, 0, DateTimeKind.Local)).HasValue); Assert.AreEqual(true, TimeBarSeries.TryGet(new DateTime(2015, 10, 21, 9, 26, 0, DateTimeKind.Local)).HasValue); Assert.AreEqual(true, synchronizer.getIsDataMerged()); }
public override void init(Object caller, Dictionary <String, String> inputArgs, TickerInfo info) { stgManager = (AppStrategyManager)caller; execution = new SignalContext(); stgHelper = new StrategyHelper(stgManager, stgName, stgIndex, execution); eventManager = stgManager.getAppEventManager(); MDManager = stgManager.getAppMDManager(); WTS = info.whatToShow; this.inputArgs = inputArgs; num_short_ma = Double.Parse(inputArgs["PARA1"]); orderSize = Int32.Parse(inputArgs["PARA2"]); cutLoss = Double.Parse(inputArgs["PARA3"]); profitTarget = Double.Parse(inputArgs["PARA4"]); log.Info(stgName + " Started !"); log.Info("short_ma = " + num_short_ma); log.Info("long_ma = " + num_long_ma); log.Info("cutLoss = " + cutLoss); log.Info("profitTarget = " + profitTarget); }
private void btn_req_mkt_data_Click(object sender, EventArgs e) { if (isConnected) { Contract contract = GetMDContract(); TickerInfo tickerInfo = getTickerInfo(); IAppMDManager appMDManager = appStrategyManager.getAppMDManager(); appMDManager.tickerInfo = tickerInfo; string genericTickList = ""; marketDataManager.AddRequest(contract, genericTickList); string whatToShow = txt_ticker_wts.Text; if (AppConstant.USE_OUT_REGULAR_DATA) { realTimeBarManager.AddRequest(contract, whatToShow, false); } else { realTimeBarManager.AddRequest(contract, whatToShow, true); } } }
//2015-10-27 private Boolean isHistDataRequested(IBMessage message) { IAppMDManager appMDMManager = appStrategyManager.getAppMDManager(); switch (message.Type) { case MessageType.HistoricalData: HistoricalDataMessage hMessage = (HistoricalDataMessage)message; if (appMDMManager.isHistDataAdHocRequested(hMessage.RequestId)) { return(true); } break; case MessageType.HistoricalDataEnd: return(false); break; } return(false); }
public void test_mergeRTBHistDataIfValid_negative1() { //[Test : merge unsuccess, needMerge Flag is set to false] IAppRTBSynchronizer synchronizer = getSynchronizer_for_mergeRTBHistDataIfValid_negative1(); synchronizer.setNeedMergeFlag(false); synchronizer.setIsDataMerged(false); synchronizer.mergeRTBHistDataIfValid(); IAppMDManager appMDManager = synchronizer.getAppMDManager(); Series <DateTime, MarketDataElement> TimeBarSeries = appMDManager.getTimeBarSeries(); Assert.IsNull(TimeBarSeries); Assert.AreEqual(false, synchronizer.getIsDataMerged()); //[Test : merge unsuccess, data merged Flag is set to true] synchronizer = getSynchronizer_for_mergeRTBHistDataIfValid_negative1(); synchronizer.setNeedMergeFlag(true); synchronizer.setIsDataMerged(true); synchronizer.mergeRTBHistDataIfValid(); appMDManager = synchronizer.getAppMDManager(); TimeBarSeries = appMDManager.getTimeBarSeries(); Assert.IsNull(TimeBarSeries); }
public override void UpdateUI(IBMessage message) { IAppMDManager appMDMManager = appStrategyManager.getAppMDManager(); IAppEventManager appEventManager = appStrategyManager.getAppEventManager(); MarketDataMessage dataMessage = (MarketDataMessage)message; checkToAddRow(dataMessage.RequestId); DataGridView grid = (DataGridView)uiControl; if (grid.Rows.Count >= dataMessage.RequestId - TICK_ID_BASE) { if (message is TickPriceMessage) { TickPriceMessage priceMessage = (TickPriceMessage)message; switch (dataMessage.Field) { case 1: { //BID appEventManager.putTickPriceEvents(priceMessage, dataMessage); //stgManager.handleTickMessage(message); grid[BID_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price; break; } case 2: { //ASK appEventManager.putTickPriceEvents(priceMessage, dataMessage); //stgManager.handleTickMessage(message); grid[ASK_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price; break; } case 4: { //LAST appEventManager.putTickPriceEvents(priceMessage, dataMessage); //stgManager.handleTickMessage(message); grid[LAST_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price; break; } case 6: { //HIGH grid[HIGH_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price; break; } case 7: { //LOW grid[LOW_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price; break; } case 9: { //CLOSE grid[CLOSE_PRICE_INDEX, GetIndex(dataMessage.RequestId)].Value = priceMessage.Price; break; } } } else if (dataMessage is TickSizeMessage) { TickSizeMessage sizeMessage = (TickSizeMessage)message; switch (dataMessage.Field) { case 0: { //BID SIZE grid[BID_SIZE_INDEX, GetIndex(dataMessage.RequestId)].Value = sizeMessage.Size; break; } case 3: { //ASK SIZE grid[ASK_SIZE_INDEX, GetIndex(dataMessage.RequestId)].Value = sizeMessage.Size; break; } case 5: { //LAST SIZE grid[LAST_SIZE_INDEX, GetIndex(dataMessage.RequestId)].Value = sizeMessage.Size; break; } case 8: { //VOLUME //stgManager.handleTickMessage(message); grid[VOLUME_SIZE_INDEX, GetIndex(dataMessage.RequestId)].Value = sizeMessage.Size; break; } } } } }
public void injectAppMDManager(IAppMDManager appMDManager) { this.appMDManager = appMDManager; }
public AppRTBSynchronizer(IAppMDManager appMDManager) { this.appMDManager = appMDManager; }
private void UpdateUI(IBMessage message) { switch (message.Type) { case MessageType.ConnectionStatus: { ConnectionStatusMessage statusMessage = (ConnectionStatusMessage)message; if (statusMessage.IsConnected) { btn_connect_light.BackColor = Color.LightGreen; btn_connect_light.Text = "ON"; accountManager.RequestAccountSummary(); grid_order_summary.Rows.Clear(); ibClient.ClientSocket.reqExecutions(1, new ExecutionFilter()); ibClient.ClientSocket.reqCurrentTime(); //grid_open_order.Rows.Clear(); //ibClient.ClientSocket.reqAllOpenOrders(); } else { btn_connect_light.BackColor = Color.Red; btn_connect_light.Text = "OFF"; } break; } case MessageType.ManagedAccounts: { accountManager.ManagedAccounts = ((ManagedAccountsMessage)message).ManagedAccounts; accountManager.SubscribeAccountUpdates(); break; } case MessageType.AccountValue: { accountManager.UpdateUI(message); break; } case MessageType.TickOptionComputation: case MessageType.TickPrice: case MessageType.TickSize: { HandleTickMessage((MarketDataMessage)message); break; } case MessageType.RealTimeBars: { realTimeBarManager.UpdateUI(message); break; } case MessageType.HistoricalData: case MessageType.HistoricalDataEnd: { IAppMDManager appMDMManager = appStrategyManager.getAppMDManager(); //2015-10-27 if (isHistDataRequested(message)) { appMDMManager.updateHistDataAdHoc((HistoricalDataMessage)message); } else { historicalDataManager.UpdateUI(message); } //historicalDataManager.UpdateUI(message); break; } case MessageType.PortfolioValue: { accountManager.UpdateUI(message); break; } case MessageType.OpenOrder: case MessageType.OpenOrderEnd: case MessageType.OrderStatus: case MessageType.ExecutionData: case MessageType.CommissionsReport: { if (message.Type == MessageType.ExecutionData) { orderManager.processExecution((ExecutionMessage)message); } //HandleExecutionMessage((ExecutionMessage)message); orderManager.UpdateUI(message); break; } case MessageType.ServerTime: { ServerTimeMessage tm = (ServerTimeMessage)message; appStrategyManager.calculateTimeDiffServer(tm.Time); //strategyManager.calculateTimeDiffServer(tm.Time); break; } case MessageType.Error: { ErrorMessage error = (ErrorMessage)message; ShowMessageOnPanel("Request " + error.RequestId + ", Code: " + error.ErrorCode + " - " + error.Message + "\r\n"); HandleErrorMessage(error); break; } } }