Exemplo n.º 1
0
 // 构造函数
 public BarChart()
 {
     BarItems = new BarItemCollection();
     FontSize = 0.1;
     Loaded  += OnLoaded;
 }
        //private void PositionUpdateCallback(object state)
        //{

        //    if (PositionUpdated)
        //    {
        //        PositionUpdated = false;
        //        if (portfolioCB.SelectedValue != null)
        //        {
        //            ReloadDataCallback();
        //        }
        //    }


        //}
        //private void OnPositionUpdated(PositionVM vm)
        //{
        //    PositionUpdated = true;
        //}
        private async void portfolioCB_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            if (portfolioCB.SelectedValue != null)
            {
                var portfolio = portfolioCB.SelectedValue?.ToString();
                deltaRadioButton.IsChecked  = true;
                marketRadioButton.IsChecked = true;
                var strategyVMCollection = _otcOptionHandler?.StrategyVMCollection;
                var strategyContractList = strategyVMCollection.Where(s => s.Portfolio == portfolio /*&& !string.IsNullOrEmpty(s.BaseContract)*/)
                                           .GroupBy(s => s.BaseContract).Select(c => new StrategyBaseVM {
                    Contract = c.First().BaseContract, OptionContract = c.First().Contract
                }).ToList();
                var strategyVMList = strategyVMCollection.Where(s => s.Portfolio == portfolio && !string.IsNullOrEmpty(s.BaseContract)).ToList();
                foreach (var vm in strategyContractList)
                {
                    var contractinfo = ClientDbContext.FindContract(vm.OptionContract);
                    if (contractinfo != null)
                    {
                        vm.Expiration = contractinfo.ExpireDate;
                        vm.MktVM      = await _marketDataHandler.SubMarketDataAsync(vm.Contract);
                    }
                    var futurecontractinfo = ClientDbContext.FindContract(vm.Contract);
                    if (futurecontractinfo != null)
                    {
                        vm.FutureExpiration = futurecontractinfo.ExpireDate;
                    }
                }

                expirationLV.ItemsSource = strategyContractList;


                var baseContractSet = new SortedSet <string>();
                foreach (var vm in strategyVMList)
                {
                    if (vm.BaseContract != null)
                    {
                        baseContractSet.Add(vm.BaseContract);
                    }
                }

                var baseContractList = baseContractSet.ToList();
                baseContractAxis.ItemsSource = baseContractList;
                foreach (var vm in strategyVMList)
                {
                    if (vm.BaseContract != null)
                    {
                        _riskDict[vm.BaseContract] = baseContractList.FindIndex(s => s == vm.BaseContract);
                    }
                }
                // set x-axis using strikeList;
                lock (BarItemCollection)
                {
                    BarItemCollection.Clear();

                    for (int i = 0; i < baseContractList.Count; i++)
                    {
                        BarItemCollection.Add(new ColumnItem {
                            CategoryIndex = i, Value = 0
                        });
                    }
                }

                columnSeries.ItemsSource = BarItemCollection;

                ReloadDataCallback();
            }
        }