Для изменения размера нажмите или перетащите

Котирование по волатильности

Для котирования опционов реализована специальная стратегия VolatilityQuotingStrategy, которая предусматривает котирование объема по заданным границам волатильности.

Котирование по волатильности

  1. В дистрибутиве S# идет пример SampleOptionQuoting, который котирует выбранный страйк по заданной границе волатильности.

  2. Создание подключения к Quik и запуск экспорта:

    C#
    private void InitConnector()
    {
        // subscribe on connection successfully event
        Connector.Connected += () =>
        {
            // update gui labels
            this.GuiAsync(() => ChangeConnectStatus(true));
        };
    
        // subscribe on disconnection event
        Connector.Disconnected += () =>
        {
            // update gui labels
            this.GuiAsync(() => ChangeConnectStatus(false));
        };
    
        // subscribe on connection error event
        Connector.ConnectionError += error => this.GuiAsync(() =>
        {
            // update gui labels
            ChangeConnectStatus(false);
    
            MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2959);
        });
    
        // fill underlying asset's list
        Connector.NewSecurity += security =>
        {
            if (security.Type == SecurityTypes.Future)
                _assets.Add(security);
        };
    
        Connector.SecurityChanged += security =>
        {
            if (_model.UnderlyingAsset == security || _model.UnderlyingAsset.Id == security.UnderlyingSecurityId)
                _isDirty = true;
        };
    
        // subscribing on tick prices and updating asset price
        Connector.NewTrade += trade =>
        {
            if (_model.UnderlyingAsset == trade.Security || _model.UnderlyingAsset.Id == trade.Security.UnderlyingSecurityId)
                _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();
        });
    
        try
        {
            if (File.Exists(_settingsFile))
                Connector.Load(new XmlSerializer<SettingsStorage>().Deserialize(_settingsFile));
        }
        catch
        {
        }
    }
    private void ConnectClick(object sender, RoutedEventArgs e)
    {
        if (!_isConnected)
        {
            ConnectBtn.IsEnabled = false;
    
            _model.Clear();
            _model.MarketDataProvider = Connector;
    
            ClearSmiles();
    
            PosChart.Positions.Clear();
            PosChart.AssetPosition = null;
            PosChart.Refresh(1, 1, default(DateTimeOffset), default(DateTimeOffset));
    
            Portfolio.Portfolios = new PortfolioDataSource(Connector);
    
            PosChart.MarketDataProvider = Connector;
            PosChart.SecurityProvider = Connector;
    
            Connector.Connect();
        }
        else
            Connector.Disconnect();
    }
  3. Настройка стратегии VolatilityQuotingStrategy (заполнение границ волатильности, а также создание заявки, через которую указываются требуемый объем и направление котирования):

    private void StartClick(object sender, RoutedEventArgs e)
    {
        var option = SelectedOption;
    
        // create DOM window
        var wnd = new QuotesWindow { Title = option.Name };
        wnd.Init(option);
    
        // create delta hedge strategy
        var hedge = new DeltaHedgeStrategy
        {
            Security = option.GetUnderlyingAsset(Connector),
            Portfolio = Portfolio.SelectedPortfolio,
            Connector = Connector,
        };
    
        // create option quoting for 20 contracts
        var quoting = new VolatilityQuotingStrategy(Sides.Buy, 20,
                new Range<decimal>(ImpliedVolatilityMin.Value ?? 0, ImpliedVolatilityMax.Value ?? 100))
        {
            // working size is 1 contract
            Volume = 1,
            Security = option,
            Portfolio = Portfolio.SelectedPortfolio,
            Connector = Connector,
        };
    
        // link quoting and hending
        hedge.ChildStrategies.Add(quoting);
    
        // start henging
        hedge.Start();
    
        wnd.Closed += (s1, e1) =>
        {
            // force close all strategies while the DOM was closed
            hedge.Stop();
        };
    
        // show DOM
        wnd.Show();
    }
  4. Запуск котирования:

    C#
    hedge.Start();
  5. Для визуального представления волатильности пример показывает, как можно перевести стандартный стакан с котировками в стакан волатильности за счет использования метода DerivativesHelperImpliedVolatility(MarketDepth, ISecurityProvider, IMarketDataProvider, DateTimeOffset, Decimal, Decimal):

    C#
    private void OnQuotesChanged()
    {
        DepthCtrl.UpdateDepth(_depth.ImpliedVolatility(Connector, Connector, Connector.CurrentTime));
    }
    Стакан волатильности.
  6. Окончание котирования и остановка стратегии:

См. также

Другие ресурсы