Пример #1
0
        public void SetSecurity(string board, string seccode)
        {
            if (Seccode == seccode)
            {
                return;
            }
            TickDataHandler.UnsubscribeFromTicksEvent(TicksToCandles);
            TXmlConnector.SendNewCandles -= ProcessCandles;
            OhlcDataSeries.Clear();
            XyDataSeries.Clear();
            StockChartAnnotations = new AnnotationCollection();
            Board       = board;
            Seccode     = seccode;
            _lastCandle = null;
            Task.Run(() => GetHistory());
            BubbleSeries.Clear();
            GetBubbleData();
            var volumes = TickDataHandler.AddChartSubscription(Board, Seccode, TicksToCandles);

            HorizontalVolumesBuy  = volumes[0];
            HorizontalVolumesSell = volumes[1];
            UpdateWindowInstrument();
            DragStep = Application.Current.Dispatcher
                       .Invoke(() => MainWindowViewModel.SecVm._secList
                               .First(s => s.Board == Board && s.Seccode == Seccode).Minstep);
            GetOrders();
        }
Пример #2
0
        public void Initialize()
        {
            var tradeItems = TickDataHandler.AddAllTradesSubsribtion(Board, Seccode);

            tradeItems.CollectionChanged += TradeItemsOnCollectionChanged;
            Initialized = true;
        }
Пример #3
0
        public void Uninitialize()
        {
            if (!Initialized)
            {
                return;
            }
            var tradeItems = TickDataHandler.AddAllTradesSubsribtion(Board, Seccode);

            tradeItems.CollectionChanged -= TradeItemsOnCollectionChanged;
        }
Пример #4
0
        private static void RunRegression()
        {
            currentProcessIndex++;

            while (isRun)
            {
                //get the batch of jobs to be processed
                var jobs = _dataManager.GetPendingRegressionJobs();

                foreach (var job in jobs)
                {
                    Console.WriteLine("Staring to process regression job with id: {0}", job.RegressionJobId);
                    //process the new job
                    currentJob = job;
                    m_RegressionEndFlagEvent.Reset();
                    runners   = new List <TradingModelRunner>();
                    pnl       = 0;
                    m_JobStat = new RegressionJobStat();
                    m_JobStat.InstrumentCode = currentJob.InstrumentCode;
                    m_JobStat.JobId          = currentJob.RegressionJobId;

                    //set up consumers
                    tickDataSubscriber       = new TickDataSubscriber();
                    tickDataHandler          = new TickDataHandler(tickDataSubscriber);
                    moneyManager             = new MoneyManager.MoneyManager(100000, .01);
                    barDataHandler           = new BarDataHandler(tickDataHandler, job.RegressionBarInterval.Value);
                    dailyPriceBarDataHandler = new DailyPriceBarDataHandler(job.InstrumentCode,
                                                                            job.RegressionStartDate.Value, job.RegressionEndDate.Value, tickDataHandler);
                    dailyPriceBarDataHandler.Fill();

                    //creates new instance of runner

                    StartTradeModelRunner(currentJobIndex, job.InstrumentCode, job.RegressionEndDate.Value);

                    //start feeder
                    historicalDataFeeder.Start(mktTickDataPublisher,
                                               new FeederProperties
                    {
                        InstrumentCode = job.InstrumentCode,
                        StartDate      = job.RegressionStartDate,
                        EndDate        = job.RegressionEndDate
                    }, () => { });
                    currentProcessIndex++;

                    //setting 30 minutes timeout
                    m_RegressionEndFlagEvent.WaitOne(TimeSpan.FromMinutes(30));
                }
            }

            //get regression from db and run them synchronously
        }
Пример #5
0
 public void SetSecurity(string board, string seccode)
 {
     if (board == Board && seccode == Seccode)
     {
         return;
     }
     Board   = board;
     Seccode = seccode;
     if (Board == "MCT")
     {
         Level2DataHandler.AddLevel2Subscribtion(Board, Seccode);
     }
     AllTrades = TickDataHandler.AddAllTradesSubsribtion(Board, Seccode);
     UpdateWindowInstrument();
 }
Пример #6
0
        //~BaseAlert()
        //{
        //    Debug.WriteLine(GetType() + " disposed");
        //}
        //initializing enables an alert (subs to events)
        public void Initialize()
        {
            if (Board == "MCT")
            {
                Time = DateTime.UtcNow;
            }
            else
            {
                Time = TimeZoneInfo.ConvertTime(DateTime.Now, TimeZoneInfo.FindSystemTimeZoneById("Russian Standard Time"));
            }

            var tradeItems = TickDataHandler.AddAllTradesSubsribtion(Board, Seccode);

            tradeItems.CollectionChanged += TradeItemsOnCollectionChanged;
            OnInitialize();
            _initialized = true;
        }
Пример #7
0
 public AllTradesSimpleViewModel(string board, string seccode, Window window, int id = 0)
 {
     Window  = window;
     Closing = new Command(arg => WindowClosing());
     Board   = board;
     Seccode = seccode;
     if (Board == "MCT")
     {
         Level2DataHandler.AddLevel2Subscribtion(Board, Seccode);
     }
     AllTrades = TickDataHandler.AddAllTradesSubsribtion(Board, Seccode);
     Id        = id;
     if (Id == 0)
     {
         SaveWindow();
     }
     SubscribeToWindowEvents();
 }
Пример #8
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;
        }
Пример #9
0
        public SciChartViewModel(string board, string seccode, Window window, int id = 0, int daysBack = 0, string selectedTimeFrame = "5 mins", bool toggleTrendlines = true)
        {
            Board   = board;
            Seccode = seccode;
            Window  = window;
            Id      = id;
            if (Id == 0)
            {
                SaveWindow();
            }
            SubscribeToWindowEvents();
            VolumesWidth          = Width / 2;
            Closing               = new Command(arg => WindowClosing());
            ChangePeriod          = new Command(arg => GetHistory());
            PlaceOrderCommand     = new Command(arg => PlaceOrder());
            PlaceStopOrderCommand = new Command(arg => PlaceStopOrder());
            CopyCommand           = new Command(arg => Copy());
            AddToWatchlistCommand = new Command(AddToWatchList);
            PriceAlertCommand     = new Command(arg => AddPriceAlert());
            _timer = new Timer(GetBubbleData, null, 1000, 2000);
            var volumes = TickDataHandler.AddChartSubscription(Board, Seccode, TicksToCandles);

            HorizontalVolumesBuy  = volumes[0];
            HorizontalVolumesSell = volumes[1];
            DaysBack          = daysBack;
            SelectedTimeframe = selectedTimeFrame;
            ToggleTrendlines  = toggleTrendlines;
            //_stockChartAnnotations = new AnnotationCollection();
            //sub to stoporders manager
            OrderManager.NotifyStoporderAdded   += NewStoporder;
            OrderManager.NotifyStoporderDeleted += DeleteStoporder;
            OrderManager.NotifyOrderAdded       += NewOrder;
            OrderManager.NotifyOrderDeleted     += DeleteOrder;
            //set dragstep
            DragStep = Application.Current.Dispatcher
                       .Invoke(() => MainWindowViewModel.SecVm._secList
                               .First(s => s.Board == Board && s.Seccode == Seccode).Minstep);
            GetOrders();
        }
Пример #10
0
        private void XmlConnector_OnSendNewStatus(string data)
        {
            var status = (ServerStatus)_statusXml.Deserialize(new StringReader(data));

            if (status.Recover == "true")
            {
                Status         = "Status: Reconnecting...";
                IsReconnecting = true;
                Animate        = false;
                return;
            }
            if (status.Connected != "true")
            {
                if (IsShuttingDown)
                {
                    //TXmlConnector.ConnectorUnInitialize();
                    //Application.Current.Shutdown();
                    return;
                }
                MenuItemConnectCommand = new Command(arg => Show_LoginForm()); //set command to open LoginForm
                MenuItemConnectText    = "Connect";                            //change text
                Status = "Status: Disconnected";                               //change status string

                //_dialogCoordinator.ShowMessageAsync(this, "Connection status", "Connection lost");
                //disable menu buttons
                InfoEnabled           = false;
                TradeEnabled          = false;
                Animate               = false;
                SecVm                 = new SecuritiesViewModel();
                ClientTradesViewModel = new ClientTradesViewModel();
                ClientOrdersViewModel = new ClientOrdersViewModel();
                //close windows
                Application.Current.Dispatcher.Invoke(() => {
                    foreach (Window window in Application.Current.Windows)
                    {
                        if (window.GetType() != typeof(MainWindow) && window.GetType().Namespace.Split('.')[0] != "Microsoft")
                        {
                            window.Close();
                        }
                    }
                });
                //clear clients
                ClientsViewModel.Clients.Clear();
                //clear subs
                Level2DataHandler.UnsubAll();
                TickDataHandler.UnsubAll();
            }
            else
            {
                MenuItemConnectCommand = new Command(arg => Disconnect()); //set command to disconnect
                Status = "Status: Connected";                              //change text
                MenuItemConnectText = "Disconnect";                        //change status string
                //enable menu buttons
                InfoEnabled  = true;
                TradeEnabled = true;
                Animate      = true;
                //Application.Current.Dispatcher.Invoke(() => {
                //    if (!CheckIfWindowIsOpened(typeof(Clients)))
                //        {
                //            _clientsViewModel.Timer.Start();
                //            new Clients { DataContext = _clientsViewModel }.Show();
                //        }
                //    });
                //if reconnecting, do not restore windows
                if (!IsReconnecting)
                {
                    OpenSavedWindows();
                }
                ClientsViewModel.GetInfo();
                IsReconnecting = false; //reconnected at this point
            }

            IsConnected            = status.Connected == "true";
            MenuItemConnectEnabled = true; //enable it after status change
            IsActive = false;
        }
Пример #11
0
        private void InitializeWatchlist(string name)
        {
            SecList = new ObservableCollection <Security>();
            Name    = name;
            var xml  = new XmlSerializer(typeof(List <Security>));
            var path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) +
                       "\\Inside MMA\\settings\\watchlists\\" + name;

            WatchListPath = path;
            List <Security> list = new List <Security>();

            try
            {
                using (
                    var file =
                        File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
                {
                    list = (List <Security>)xml.Deserialize(file);
                }
            }
            catch
            {
            }
            string error = string.Empty;

            foreach (var security in list)
            {
                if (Securities.FirstOrDefault(s => s.Seccode == security.Seccode) != null)
                {
                    SecList.Add(security);
                }
                else
                {
                    error += security.Seccode + ",";
                }
            }
            if (error != string.Empty)
            {
                Task.Run(() =>
                {
                    SpinWait.SpinUntil(() => Dialog != null);
                    Dialog.ShowMessageAsync(this, "Warning",
                                            "The following instruments were not found: " + error.TrimEnd(','));
                    var serializer = new XmlSerializer(typeof(List <Security>));
                    using (var file = File.Open(WatchListPath, FileMode.Open, FileAccess.ReadWrite))
                    {
                        var data = (List <Security>)serializer.Deserialize(file);
                        foreach (var s in error.Split(','))
                        {
                            data.RemoveWhere(sec => sec.Seccode == s);
                        }
                        file.SetLength(0);
                        serializer.Serialize(file, data);
                        file.Close();
                    }
                });
            }
            //Task.Run(() =>
            ////{
            ////    if (_firstBoot)
            ////        Thread.Sleep(3000);
            //    TickDataHandler.WatchlistSub(SecList.ToList());
            //});
            TickDataHandler.WatchlistSub(SecList.ToList());
        }