private void DrawTestData() { // // prepare test data var asset = new Security { Id = "RIM4@FORTS", PriceStep = 10, }; asset.LastTrade = new Trade { Security = asset, Price = 130000, }; var expiryDate = new DateTime(2014, 09, 15); var currDate = new DateTime(2014, 08, 15); var securities = new List <Security> { asset, CreateStrike(105000, 10, 60, OptionTypes.Call, expiryDate, asset, 100), CreateStrike(110000, 10, 53, OptionTypes.Call, expiryDate, asset, 343), CreateStrike(115000, 10, 47, OptionTypes.Call, expiryDate, asset, 3454), CreateStrike(120000, 78, 42, OptionTypes.Call, expiryDate, asset, null), CreateStrike(125000, 32, 35, OptionTypes.Call, expiryDate, asset, 100), CreateStrike(130000, 3245, 32, OptionTypes.Call, expiryDate, asset, 55), CreateStrike(135000, 3454, 37, OptionTypes.Call, expiryDate, asset, 456), CreateStrike(140000, 34, 45, OptionTypes.Call, expiryDate, asset, 4), CreateStrike(145000, 3566, 51, OptionTypes.Call, expiryDate, asset, 67), CreateStrike(150000, 454, 57, OptionTypes.Call, expiryDate, asset, null), CreateStrike(155000, 10, 59, OptionTypes.Call, expiryDate, asset, 334), CreateStrike(105000, 10, 50, OptionTypes.Put, expiryDate, asset, 100), CreateStrike(110000, 10, 47, OptionTypes.Put, expiryDate, asset, 343), CreateStrike(115000, 6788, 42, OptionTypes.Put, expiryDate, asset, 3454), CreateStrike(120000, 10, 37, OptionTypes.Put, expiryDate, asset, null), CreateStrike(125000, 567, 32, OptionTypes.Put, expiryDate, asset, 100), CreateStrike(130000, 4577, 30, OptionTypes.Put, expiryDate, asset, 55), CreateStrike(135000, 67835, 32, OptionTypes.Put, expiryDate, asset, 456), CreateStrike(140000, 13245, 35, OptionTypes.Put, expiryDate, asset, 4), CreateStrike(145000, 10, 37, OptionTypes.Put, expiryDate, asset, 67), CreateStrike(150000, 454, 39, OptionTypes.Put, expiryDate, asset, null), CreateStrike(155000, 10, 41, OptionTypes.Put, expiryDate, asset, 334) }; var dummyProvider = new DummyProvider(securities, new[] { new Position { Security = asset, CurrentValue = -1, }, new Position { Security = securities.First(s => s.OptionType == OptionTypes.Call), CurrentValue = 10, }, new Position { Security = securities.First(s => s.OptionType == OptionTypes.Put), CurrentValue = -3, } }); _model.MarketDataProvider = dummyProvider; _model.ExchangeInfoProvider = new InMemoryExchangeInfoProvider(); _model.UnderlyingAsset = asset; // // draw test data on the pos chart PosChart.MarketDataProvider = dummyProvider; PosChart.ExchangeInfoProvider = _model.ExchangeInfoProvider; PosChart.SecurityProvider = dummyProvider; PosChart.PositionProvider = dummyProvider; PosChart.UnderlyingAsset = asset; PosChart.Options.Add(securities.First(s => s.OptionType == OptionTypes.Call)); PosChart.Options.Add(securities.First(s => s.OptionType == OptionTypes.Put)); PosChart.Refresh(null, currDate, expiryDate); // // draw test data on the desk foreach (var option in securities.Where(s => s.Type == SecurityTypes.Option)) { _model.Add(option); } // // draw test data on the smile chart RefreshSmile(currDate); }
private void ConnectClick(object sender, RoutedEventArgs e) { if (Connector != null && !(Connector is FakeConnector)) { return; } PosChart.Positions.Clear(); PosChart.AssetPosition = null; PosChart.Refresh(1, 1, default(DateTimeOffset), default(DateTimeOffset)); // create connection Connector = new QuikTrader(); //_trader = new PlazaTrader { IsCGate = true }; //_trader.Tables.Add(_trader.TableRegistry.Volatility); Portfolio.Portfolios = new PortfolioDataSource(Connector); PosChart.MarketDataProvider = Connector; PosChart.SecurityProvider = Connector; // fill underlying asset's list Connector.NewSecurities += securities => _assets.AddRange(securities.Where(s => s.Type == SecurityTypes.Future)); Connector.SecuritiesChanged += securities => { if ((PosChart.AssetPosition != null && securities.Contains(PosChart.AssetPosition.Security)) || PosChart.Positions.Cache.Select(p => p.Security).Intersect(securities).Any()) { _isDirty = true; } }; // subscribing on tick prices and updating asset price Connector.NewTrades += trades => { var assetPos = PosChart.AssetPosition; if (assetPos != null && trades.Any(t => t.Security == assetPos.Security)) { _isDirty = true; } }; Connector.NewPositions += positions => this.GuiAsync(() => { var asset = SelectedAsset; if (asset == null) { return; } var assetPos = positions.FirstOrDefault(p => p.Security == asset); var newPos = positions.Where(p => p.Security.UnderlyingSecurityId == asset.Id).ToArray(); if (assetPos == null && newPos.Length == 0) { return; } if (assetPos != null) { PosChart.AssetPosition = assetPos; } if (newPos.Length > 0) { PosChart.Positions.AddRange(newPos); } RefreshChart(); }); Connector.PositionsChanged += positions => this.GuiAsync(() => { if ((PosChart.AssetPosition != null && positions.Contains(PosChart.AssetPosition)) || positions.Intersect(PosChart.Positions.Cache).Any()) { RefreshChart(); } }); Connector.Connect(); }
public MainWindow() { InitializeComponent(); var assetsSource = new ObservableCollectionEx <Security>(); var optionsSource = new ObservableCollectionEx <Security>(); Options.ItemsSource = optionsSource; Assets.ItemsSource = assetsSource; _assets = new ThreadSafeObservableCollection <Security>(assetsSource); _options = new ThreadSafeObservableCollection <Security>(optionsSource); var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(5) }; timer.Tick += (sender, args) => { if (!_isDirty) { return; } _isDirty = false; RefreshChart(); }; timer.Start(); // // draw test data on the chart var asset = new Security { Id = "RIM4@FORTS" }; Connector = new FakeConnector(new[] { asset }); PosChart.AssetPosition = new Position { Security = asset, CurrentValue = -1, }; PosChart.MarketDataProvider = Connector; PosChart.SecurityProvider = Connector; var expDate = new DateTime(2014, 6, 14); PosChart.Positions.Add(new Position { Security = new Security { Code = "RI C 110000", Strike = 110000, ImpliedVolatility = 45, OptionType = OptionTypes.Call, ExpiryDate = expDate, Board = ExchangeBoard.Forts, UnderlyingSecurityId = asset.Id }, CurrentValue = 10, }); PosChart.Positions.Add(new Position { Security = new Security { Code = "RI P 95000", Strike = 95000, ImpliedVolatility = 30, OptionType = OptionTypes.Put, ExpiryDate = expDate, Board = ExchangeBoard.Forts, UnderlyingSecurityId = asset.Id }, CurrentValue = -3, }); PosChart.Refresh(100000, 10, new DateTime(2014, 5, 5), expDate); Instance = this; }
private void DrawTestData() { // // draw test data on the pos chart var asset = new Security { Id = "RIM4@FORTS" }; var dummyProvider = new DummyProvider(new[] { asset }); PosChart.AssetPosition = new Position { Security = asset, CurrentValue = -1, }; PosChart.MarketDataProvider = dummyProvider; PosChart.SecurityProvider = dummyProvider; var expDate = new DateTime(2014, 6, 14); PosChart.Positions.Add(new Position { Security = new Security { Code = "RI C 110000", Strike = 110000, ImpliedVolatility = 45, OptionType = OptionTypes.Call, ExpiryDate = expDate, Board = ExchangeBoard.Forts, UnderlyingSecurityId = asset.Id }, CurrentValue = 10, }); PosChart.Positions.Add(new Position { Security = new Security { Code = "RI P 95000", Strike = 95000, ImpliedVolatility = 30, OptionType = OptionTypes.Put, ExpiryDate = expDate, Board = ExchangeBoard.Forts, UnderlyingSecurityId = asset.Id }, CurrentValue = -3, }); PosChart.Refresh(100000, 10, new DateTime(2014, 5, 5), expDate); // // draw test data on the desk var expiryDate = new DateTime(2014, 09, 15); _model.MarketDataProvider = dummyProvider; _model.UnderlyingAsset = asset; _model.Add(CreateStrike(05000, 10, 60, OptionTypes.Call, expiryDate, asset, 100)); _model.Add(CreateStrike(10000, 10, 53, OptionTypes.Call, expiryDate, asset, 343)); _model.Add(CreateStrike(15000, 10, 47, OptionTypes.Call, expiryDate, asset, 3454)); _model.Add(CreateStrike(20000, 78, 42, OptionTypes.Call, expiryDate, asset, null)); _model.Add(CreateStrike(25000, 32, 35, OptionTypes.Call, expiryDate, asset, 100)); _model.Add(CreateStrike(30000, 3245, 32, OptionTypes.Call, expiryDate, asset, 55)); _model.Add(CreateStrike(35000, 3454, 37, OptionTypes.Call, expiryDate, asset, 456)); _model.Add(CreateStrike(40000, 34, 45, OptionTypes.Call, expiryDate, asset, 4)); _model.Add(CreateStrike(45000, 3566, 51, OptionTypes.Call, expiryDate, asset, 67)); _model.Add(CreateStrike(50000, 454, 57, OptionTypes.Call, expiryDate, asset, null)); _model.Add(CreateStrike(55000, 10, 59, OptionTypes.Call, expiryDate, asset, 334)); _model.Add(CreateStrike(05000, 10, 50, OptionTypes.Put, expiryDate, asset, 100)); _model.Add(CreateStrike(10000, 10, 47, OptionTypes.Put, expiryDate, asset, 343)); _model.Add(CreateStrike(15000, 6788, 42, OptionTypes.Put, expiryDate, asset, 3454)); _model.Add(CreateStrike(20000, 10, 37, OptionTypes.Put, expiryDate, asset, null)); _model.Add(CreateStrike(25000, 567, 32, OptionTypes.Put, expiryDate, asset, 100)); _model.Add(CreateStrike(30000, 4577, 30, OptionTypes.Put, expiryDate, asset, 55)); _model.Add(CreateStrike(35000, 67835, 32, OptionTypes.Put, expiryDate, asset, 456)); _model.Add(CreateStrike(40000, 13245, 35, OptionTypes.Put, expiryDate, asset, 4)); _model.Add(CreateStrike(45000, 10, 37, OptionTypes.Put, expiryDate, asset, 67)); _model.Add(CreateStrike(50000, 454, 39, OptionTypes.Put, expiryDate, asset, null)); _model.Add(CreateStrike(55000, 10, 41, OptionTypes.Put, expiryDate, asset, 334)); // // draw test data on the smile chart RefreshSmile(new DateTime(2014, 08, 15)); }
public MainWindow() { InitializeComponent(); var assetsSource = new ObservableCollectionEx <Security>(); var optionsSource = new ObservableCollectionEx <Security>(); Options.ItemsSource = optionsSource; Assets.ItemsSource = assetsSource; _assets = new ThreadSafeObservableCollection <Security>(assetsSource); _options = new ThreadSafeObservableCollection <Security>(optionsSource); // попробовать сразу найти месторасположение Quik по запущенному процессу Path.Text = QuikTerminal.GetDefaultPath(); var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(5) }; timer.Tick += (sender, args) => { if (!_isDirty) { return; } _isDirty = false; RefreshChart(); }; timer.Start(); // // добавляем тестовый данные для отображения графика var asset = new Security { Id = "RIM4@FORTS" }; Connector = new FakeConnector(new[] { asset }); PosChart.AssetPosition = new Position { Security = asset, CurrentValue = -1, }; PosChart.MarketDataProvider = Connector; PosChart.SecurityProvider = Connector; var expDate = new DateTime(2014, 6, 14); PosChart.Positions.Add(new Position { Security = new Security { Code = "RI C 110000", Strike = 110000, ImpliedVolatility = 45, OptionType = OptionTypes.Call, ExpiryDate = expDate, Board = ExchangeBoard.Forts, UnderlyingSecurityId = asset.Id }, CurrentValue = 10, }); PosChart.Positions.Add(new Position { Security = new Security { Code = "RI P 95000", Strike = 95000, ImpliedVolatility = 30, OptionType = OptionTypes.Put, ExpiryDate = expDate, Board = ExchangeBoard.Forts, UnderlyingSecurityId = asset.Id }, CurrentValue = -3, }); PosChart.Refresh(100000, 10, new DateTime(2014, 5, 5), expDate); Instance = this; }
private void ConnectClick(object sender, RoutedEventArgs e) { var isDde = IsDde.IsChecked == true; if (isDde && Path.Text.IsEmpty()) { MessageBox.Show(this, LocalizedStrings.Str2969); return; } if (Connector != null && !(Connector is FakeConnector)) { return; } PosChart.Positions.Clear(); PosChart.AssetPosition = null; PosChart.Refresh(1, 1, default(DateTimeOffset), default(DateTimeOffset)); // создаем подключение Connector = new QuikTrader(Path.Text) { IsDde = isDde }; if (isDde) { // изменяем метаданные так, чтобы начали обрабатывать дополнительные колонки опционов var columns = ((QuikTrader)Connector).SecuritiesTable.Columns; columns.Add(DdeSecurityColumns.Strike); columns.Add(DdeSecurityColumns.ImpliedVolatility); columns.Add(DdeSecurityColumns.UnderlyingSecurity); columns.Add(DdeSecurityColumns.TheorPrice); columns.Add(DdeSecurityColumns.OptionType); columns.Add(DdeSecurityColumns.ExpiryDate); } //_trader = new PlazaTrader { IsCGate = true }; //_trader.Tables.Add(_trader.TableRegistry.Volatility); Portfolio.Connector = Connector; PosChart.MarketDataProvider = Connector; PosChart.SecurityProvider = Connector; // добавляем базовые активы в список Connector.NewSecurities += securities => _assets.AddRange(securities.Where(s => s.Type == SecurityTypes.Future)); Connector.SecuritiesChanged += securities => { if ((PosChart.AssetPosition != null && securities.Contains(PosChart.AssetPosition.Security)) || PosChart.Positions.Cache.Select(p => p.Security).Intersect(securities).Any()) { _isDirty = true; } }; // подписываемся на событие новых сделок чтобы обновить текущую цену фьючерса Connector.NewTrades += trades => { var assetPos = PosChart.AssetPosition; if (assetPos != null && trades.Any(t => t.Security == assetPos.Security)) { _isDirty = true; } }; Connector.NewPositions += positions => this.GuiAsync(() => { var asset = SelectedAsset; if (asset == null) { return; } var assetPos = positions.FirstOrDefault(p => p.Security == asset); var newPos = positions.Where(p => p.Security.UnderlyingSecurityId == asset.Id).ToArray(); if (assetPos == null && newPos.Length == 0) { return; } if (assetPos != null) { PosChart.AssetPosition = assetPos; } if (newPos.Length > 0) { PosChart.Positions.AddRange(newPos); } RefreshChart(); }); Connector.PositionsChanged += positions => this.GuiAsync(() => { if ((PosChart.AssetPosition != null && positions.Contains(PosChart.AssetPosition)) || positions.Intersect(PosChart.Positions.Cache).Any()) { RefreshChart(); } }); Connector.Connect(); }
public MainWindow() { InitializeComponent(); var assetsSource = new ObservableCollectionEx <Security>(); var optionsSource = new ObservableCollectionEx <Security>(); Options.ItemsSource = optionsSource; Assets.ItemsSource = assetsSource; _assets = new ThreadSafeObservableCollection <Security>(assetsSource); _options = new ThreadSafeObservableCollection <Security>(optionsSource); var timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(5) }; timer.Tick += (sender, args) => { if (!_isDirty) { return; } _isDirty = false; RefreshChart(); }; timer.Start(); // // draw test data on the pos chart var asset = new Security { Id = "RIM4@FORTS" }; Connector = new FakeConnector(new[] { asset }); PosChart.AssetPosition = new Position { Security = asset, CurrentValue = -1, }; PosChart.MarketDataProvider = Connector; PosChart.SecurityProvider = Connector; var expDate = new DateTime(2014, 6, 14); PosChart.Positions.Add(new Position { Security = new Security { Code = "RI C 110000", Strike = 110000, ImpliedVolatility = 45, OptionType = OptionTypes.Call, ExpiryDate = expDate, Board = ExchangeBoard.Forts, UnderlyingSecurityId = asset.Id }, CurrentValue = 10, }); PosChart.Positions.Add(new Position { Security = new Security { Code = "RI P 95000", Strike = 95000, ImpliedVolatility = 30, OptionType = OptionTypes.Put, ExpiryDate = expDate, Board = ExchangeBoard.Forts, UnderlyingSecurityId = asset.Id }, CurrentValue = -3, }); PosChart.Refresh(100000, 10, new DateTime(2014, 5, 5), expDate); // // draw test data on the desk var expiryDate = new DateTime(2014, 09, 15); Desk.MarketDataProvider = Connector; Desk.SecurityProvider = Connector; Desk.CurrentTime = new DateTime(2014, 08, 15); Desk.Options = new[] { CreateStrike(05000, 10, 60, OptionTypes.Call, expiryDate, asset, 100), CreateStrike(10000, 10, 53, OptionTypes.Call, expiryDate, asset, 343), CreateStrike(15000, 10, 47, OptionTypes.Call, expiryDate, asset, 3454), CreateStrike(20000, 78, 42, OptionTypes.Call, expiryDate, asset, null), CreateStrike(25000, 32, 35, OptionTypes.Call, expiryDate, asset, 100), CreateStrike(30000, 3245, 32, OptionTypes.Call, expiryDate, asset, 55), CreateStrike(35000, 3454, 37, OptionTypes.Call, expiryDate, asset, 456), CreateStrike(40000, 34, 45, OptionTypes.Call, expiryDate, asset, 4), CreateStrike(45000, 3566, 51, OptionTypes.Call, expiryDate, asset, 67), CreateStrike(50000, 454, 57, OptionTypes.Call, expiryDate, asset, null), CreateStrike(55000, 10, 59, OptionTypes.Call, expiryDate, asset, 334), CreateStrike(05000, 10, 50, OptionTypes.Put, expiryDate, asset, 100), CreateStrike(10000, 10, 47, OptionTypes.Put, expiryDate, asset, 343), CreateStrike(15000, 6788, 42, OptionTypes.Put, expiryDate, asset, 3454), CreateStrike(20000, 10, 37, OptionTypes.Put, expiryDate, asset, null), CreateStrike(25000, 567, 32, OptionTypes.Put, expiryDate, asset, 100), CreateStrike(30000, 4577, 30, OptionTypes.Put, expiryDate, asset, 55), CreateStrike(35000, 67835, 32, OptionTypes.Put, expiryDate, asset, 456), CreateStrike(40000, 13245, 35, OptionTypes.Put, expiryDate, asset, 4), CreateStrike(45000, 10, 37, OptionTypes.Put, expiryDate, asset, 67), CreateStrike(50000, 454, 39, OptionTypes.Put, expiryDate, asset, null), CreateStrike(55000, 10, 41, OptionTypes.Put, expiryDate, asset, 334) }; Desk.RefreshOptions(); // // draw test data on the smile chart var puts = SmileChart.CreateSmile("RIM4 (Put)", Colors.DarkRed); var calls = SmileChart.CreateSmile("RIM4 (Call)", Colors.DarkGreen); foreach (var option in Desk.Options) { if (option.Strike == null || option.ImpliedVolatility == null) { continue; } (option.OptionType == OptionTypes.Put ? puts : calls).Add(new LineData <double> { X = (double)option.Strike.Value, Y = option.ImpliedVolatility.Value }); } Instance = this; }
private void ConnectClick(object sender, RoutedEventArgs e) { if (Connector != null && !(Connector is FakeConnector)) { return; } PosChart.Positions.Clear(); PosChart.AssetPosition = null; PosChart.Refresh(1, 1, default(DateTimeOffset), default(DateTimeOffset)); // create connection Connector = new QuikTrader(); //_trader = new PlazaTrader { IsCGate = true }; //_trader.Tables.Add(_trader.TableRegistry.Volatility); Portfolio.Portfolios = new PortfolioDataSource(Connector); PosChart.MarketDataProvider = Connector; PosChart.SecurityProvider = Connector; // fill underlying asset's list Connector.NewSecurity += security => { if (security.Type == SecurityTypes.Future) { _assets.Add(security); } }; Connector.SecurityChanged += security => { if ((PosChart.AssetPosition != null && PosChart.AssetPosition.Security == security) || PosChart.Positions.Cache.Select(p => p.Security).Contains(security)) { _isDirty = true; } }; // subscribing on tick prices and updating asset price Connector.NewTrade += trade => { var assetPos = PosChart.AssetPosition; if (assetPos != null && trade.Security == assetPos.Security) { _isDirty = true; } }; Connector.NewPosition += position => this.GuiAsync(() => { var asset = SelectedAsset; if (asset == null) { return; } var assetPos = position.Security == asset; var newPos = position.Security.UnderlyingSecurityId == asset.Id; if (!assetPos && !newPos) { return; } if (assetPos) { PosChart.AssetPosition = position; } if (newPos) { PosChart.Positions.Add(position); } RefreshChart(); }); Connector.PositionChanged += position => this.GuiAsync(() => { if ((PosChart.AssetPosition != null && PosChart.AssetPosition == position) || PosChart.Positions.Cache.Contains(position)) { RefreshChart(); } }); Connector.Connect(); }