示例#1
0
        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());
        }
示例#2
0
        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;
 }
示例#5
0
 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;
 }
示例#6
0
        /*
         * 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);
        }
示例#7
0
        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());
        }
示例#8
0
        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();
        }
示例#10
0
        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());
        }
示例#11
0
 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);
 }
示例#12
0
 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);
         }
     }
 }
示例#13
0
        //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);
        }
示例#14
0
        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;
 }
示例#18
0
        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;
            }
            }
        }