/// <summary> /// Call when connection with server established, auth past and /// server sent ticker's data. /// </summary> /// <param name="tickerData"></param> public void UpdateInstrParamsOnConnection(CTIckerData tickerData) { //removed 2018-06-25 /* if (tickerData.Decimals != Decimals) * Decimals = tickerData.Decimals; * * if ((double) tickerData.Step != Step) * Step = (double)tickerData.Step; */ if (tickerData.DecimalVolume != DecimalVolume) { DecimalVolume = tickerData.DecimalVolume; } CStocksVisual sv = new CStocksVisual { Decimals = Decimals, ConNumm = ConnId, Step = Step, Ticker = TickerName }; _kernelTerminal.UpdateStockVisualInstrumentParams(StockNum, sv); SaveInstrumentConfig(); }
/// <summary> /// Call when instrument parameter changed (for example Decimals) /// during trading. Mostly for bitfinex. /// /// Call from CKernelTerminal.ProcessUserUpdateAvailableTickers /// </summary> /// <param name="updInstrParams"></param> public void UpdateInstrumentParamsOnline(CUpdateInstrumentParams updInstrParams) { //removed 2018-06-25 //if (updInstrParams.Decimals != Decimals) //Decimals = updInstrParams.Decimals; //if ((double) updInstrParams.Min_step != Step) //Step = (double) updInstrParams.Min_step; if (updInstrParams.DecimalVolume != DecimalVolume) { DecimalVolume = updInstrParams.DecimalVolume; } CStocksVisual sv = new CStocksVisual { Decimals = Decimals, ConNumm = ConnId, Step = Step, Ticker = TickerName }; _kernelTerminal.UpdateStockVisualInstrumentParams(StockNum, sv); SaveInstrumentConfig(); }
/// <summary> /// Call from: /// /// 1)MarketViewModel Constructor /// 2)CKernelTerminal.EditConnectedStock /// </summary> /// <param name="stockVisual"></param> public void SetInstrumentParams(CStocksVisual stockVisual) { //m_sContract_ShortName = stockVisual.Ticker; TickerName = stockVisual.Ticker; //_tickerName = stockVisual.Ticker; Decimals = stockVisual.Decimals; Step = stockVisual.Step; }
private void SaveInstrumentParams() { CUtil.TaskStart(SaveInstrumentConfig); CStocksVisual sv = new CStocksVisual { Decimals = Decimals, ConNumm = ConnId, Step = Step, Ticker = TickerName }; _kernelTerminal.UpdateStockVisualInstrumentParams(StockNum, sv); }
/// <summary> /// Creates new MarketViewModel instance and adds it to dictioanary with viewmodels /// /// Call from /// 1) CKernelTerminal.AddOneStockFromConfig /// 2) CKernelTerminal.AddEmptyStock /// </summary> public void AddMarketViewModelNew(int stockNum, ControlMarket controlMarket, CStocksVisual stockVisual, CInstrumentConfig instrumentConfig) { //TODO access using unique id of market try { lock (_dictKIsinVMarketViewModel) _dictKIsinVMarketViewModel.Add(stockVisual.Ticker, new MarketViewModel(stockNum, controlMarket, _kernelTerminal, stockVisual, instrumentConfig)); } catch (Exception e) { Error("AddMarketViewModelNew", e); } }
/// <summary> /// Call when Connected stock need replace with the new one /// 1) Find VieModel with oldTicker, reset IsAlive (stops network processing /// data thread) /// 2) Remove old ticker MarketViewModel from dictKIsinVMarketViewModel /// 3) Creates new ticker MarketViewModel and add it to _dictKIsinVMarketViewModel /// /// Call from CKernelTerminal.EditConnectedStock /// </summary> public void ReplaceMarketViewModel(int stockNum, string oldTicker, CStocksVisual stockVisual, ControlMarket controlMarket, CInstrumentConfig instrumentConfig) { lock (_dictKIsinVMarketViewModel) { var res = _dictKIsinVMarketViewModel.Values.FirstOrDefault(a => a.ControlMarket.StockNum == stockNum); //Where(key => key.StockNum == stockNum); if (res != null) { res.IsAlive = false; _dictKIsinVMarketViewModel.Remove(oldTicker); _dictKIsinVMarketViewModel[stockVisual.Ticker] = new MarketViewModel(stockNum, controlMarket, _kernelTerminal, stockVisual, instrumentConfig); //upd 2017_08_27 // _dictKIsinVMarketViewModel[stockVisual.Ticker].IsConnectedToServer = true; } } }
public MarketViewModel(int stockNum, ControlMarket controlMain, CKernelTerminal kernelTerminal, CStocksVisual stockVisual, CInstrumentConfig instrumentConfig) { StockNum = stockNum; string tickerName = stockVisual.Ticker; IsAlive = true; IsDead = false; SelectionMode = new CSelectionMode(); string tf = instrumentConfig.MarketProperties.ClusterProperties.TimeFrame; _clusterProcessor = new CClusterProcessor(tickerName, tf); _userLevels = new CUserLevels(tickerName); _eventRouterViewModel = new CEventRouterViewModel(this); // int conId = stockVisual.ConNumm; _orders = new OrderData[Params.MaxUserOrdersPerInstr]; _terminalViewModel = CViewModelDispatcher.GetTerminalViewModel(); int parUpdateStockPerSec = kernelTerminal.TerminalConfig.UpdateStockPerSec; _parSleep = (int)(1 / (double)parUpdateStockPerSec * 1000); _instrumentConfig = instrumentConfig; // (new Thread(TestPar)).Start(); GUIDispatcher = System.Windows.Threading.Dispatcher.CurrentDispatcher; _controlMarket = controlMain; _kernelTerminal = kernelTerminal; _communicator = kernelTerminal.Communicator; //TextPriceSize = "10"; // StringHeight = "10"; CurrAmountNum = "0"; ListWorkAmount = new List <CWorkAmount>(); SetInstrumentParams(stockVisual); _vmUserPos = new ViewModelUserPos(Decimals, Step); _parMaxVolumeBar = Int32.MaxValue; //RaisePropertyChanged("Contract_ShortName"); ConnId = stockVisual.ConNumm;// conId; MonitorUserOrders = new Dictionary <long, COrder>(); if (tickerName != null) { _logger = new CLogger("MarketViewModel_" + tickerName); } Log("Start logging__________________________________________"); InitBidsAsks(); //TODO remove this.InitializeStockData(); SetMouseMode(true); _threadDataReciever = new Thread(ThreadDataReciever); _threadDataReciever.Start(); //BindWorkAmount(); }
/// <summary> /// Add columns to Grid and adds ControlMarket /// and GridSplitter to Grid. /// /// Call from: /// 1) KernelTerminal.AddAllStocksFromConfig /// 2) KernelTerminal.AddEmptyStockFromButton /// /// </summary> /// <param name="VisualConf">Params from config, if null (call from button) /// do use default params</param> private void CreateStockCell(int stockNum, string ticker, ControlMarket controlMarket, CStocksVisual visualConf = null) { ColumnDefinition colDef = new ColumnDefinition(); colDef.Tag = "ColStock_" + stockNum; GridMarket.ColumnDefinitions.Add(colDef); /* * //2018-05-03 * //Use default params - called from button * if (visualConf == null) * { * double sumWidthStock = 0; * * foreach (UIElement v in GridMarket.Children) * { * * if (v is ControlMarket) * { * ControlMarket currCM = (ControlMarket)v; * foreach (var cd in currCM.GridControlMarket.ColumnDefinitions) * { * if (cd.Name == "ColControlStock") * sumWidthStock += cd.ActualWidth; * * } * * * } * * } * * * * * //Stock Cell * if (stockNum != 0) * { * controlMarket.GridControlMarket.ColumnDefinitions[4].Width = * new GridLength(sumWidthStock / (stockNum)); * * * } * * } * else //use specific params - called from initialization (params from filr) * { * //Clusters cell * controlMarket.GridControlMarket.ColumnDefinitions[0].Width = * new GridLength(visualConf.WidthClusters); * * //Stock Cell * controlMarket.GridControlMarket.ColumnDefinitions[4].Width = * new GridLength(visualConf.WidthStock); * } */ Grid.SetRow(controlMarket, 0); Grid.SetColumn(controlMarket, 2 * stockNum); //KAA changed 2017-03 was stockNum GridMarket.Children.Add(controlMarket); //2017-03-17 add splitter ColumnDefinition colSplitter = new ColumnDefinition(); colSplitter.Width = GridLength.Auto; GridMarket.ColumnDefinitions.Add(colSplitter); GridSplitter splitter = new GridSplitter(); splitter.Width = 1.5; splitter.Background = new SolidColorBrush(Colors.Blue); //TODO DP splitter.HorizontalAlignment = HorizontalAlignment.Stretch; splitter.Tag = stockNum; Panel.SetZIndex(splitter, Int16.MaxValue); Grid.SetRow(splitter, 0); Grid.SetColumn(splitter, 2 * stockNum + 1); GridMarket.Children.Add(splitter); // Canvas.SetZIndex(controlMarket, 10 - stockNum); }