S#

DeltaHedgeStrategy осуществление хеджирование по нескольким пакетным стратегиям :D


DeltaHedgeStrategy осуществление хеджирование по нескольким пакетным стратегиям :D
Atom Ответить
11.03.2012


Александр! Михаил! :D

Решил попробовать встроенный механизм дельта-хеджирования реализованный в платформе Stock#

Код

public DeltaHedgeStrategy(
	Strategy tradingStrategy
)


Стратегия, содержащая в себе дочерние стратегии, которые торгуют по отдельному страйку

А к примеру мне нужно осуществлять дельта-хеджирование не по одной пакетной стратегии, а по нескольким!

Есть к примеру 3 пакетных стратегии в которые упакованы алгоритмы котирования, и я их запускаю в различное время!
И мне нужно осуществлять механизм дельта-хеджирования по ним всем! Т.е. передать в DeltaHedgeStrategy не одну пакетную стратегию
а 3 пакетные стратегии (N - пакетных стратегий)
Есть ли такая возможность? Было бы здорово :DWoot

Теги:


Спасибо:




25 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 11.03.2012
Ответить


huricane Перейти

Есть ли такая возможность? Было бы здорово :DWoot


На форуме отвечаем только на вопросы, связанные с багами. Все подробнее - в тех поддержку.Woot
Спасибо:

hurricane

Фотография
Дата: 11.03.2012
Ответить


ну пожайлуста! как новичку 1 ответикBlushing
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 11.03.2012
Ответить


huricane Перейти
ну пожайлуста! как новичку 1 ответикBlushing


42
Спасибо:

hurricane

Фотография
Дата: 11.03.2012
Ответить


Цитата:
42


Михаил, не понял? это шутка? или это серьезный ответ на мой вопрос?
Автор топика
Спасибо:

hurricane

Фотография
Дата: 11.03.2012
Ответить


Код
//БЛОК КОТИРОВАНИЯ ОПЦИОНОВ CALL НА ПРOДАЖУ
              //котирование на продажу опциона Call минус 1 страйк от базового -5000п
              var VolatilityQuoting_Call_minus1Strike_Sell = new VolatilityQuotingStrategy(new Range<decimal>((decimal)vol_Call_minus1Strike - 0.03m, (decimal)vol_Call_minus1Strike + 0.03m), OrderDirections.Sell, 4)
              {
                  Volume = 2,
                  Security = _SECURITY_Call_minus1Strike,
                  Trader = Trader,
                  Portfolio = Portfolio
              };

              //котирование на продажу опциона Call базовый страйк
              var VolatilityQuoting_Call_baseStrike_Sell = new VolatilityQuotingStrategy(new Range<decimal>((decimal)vol_Call_baseStrike - 0.03m, (decimal)vol_Call_baseStrike + 0.03m), OrderDirections.Sell, 4)
              {
                  Volume = 2,
                  Security = _SECURITY_Call_baseStrike,
                  Trader = Trader,
                  Portfolio = Portfolio
              };

              //котирование на продажу опциона Call со страйком плюс 1 от базового +5000п
              var VolatilityQuoting_Call_plus1Strike_Sell = new VolatilityQuotingStrategy(new Range<decimal>((decimal)vol_Call_plus1Strike - 0.03m, (decimal)vol_Call_plus1Strike + 0.03m), OrderDirections.Sell, 4)
              {
                  Volume = 2,
                  Security = _SECURITY_Call_plus1Strike,
                  Trader = Trader,
                  Portfolio = Portfolio
              };

              //котирование на продажу опциона Call со страйком плюс 2 от базового +10000п
              var VolatilityQuoting_Call_plus2Strike_Sell = new VolatilityQuotingStrategy(new Range<decimal>((decimal)vol_Call_plus2Strike - 0.03m, (decimal)vol_Call_plus2Strike + 0.03m), OrderDirections.Sell, 4)
              {
                  Volume = 2,
                  Security = _SECURITY_Call_plus2Strike,
                  Trader = Trader,
                  Portfolio = Portfolio
              };

              // упаковываем алгоритмы котирования по разным страйкам на продажу опционов Call в BasketStrategy
              var basket_Quote_Call_Sell = new BasketStrategy(BasketStrategyFinishModes.First)
              {
                  Trader = Trader,
                  Portfolio = Portfolio,
                  Volume = 1,
                  Security = _SECURITY_Call_baseStrike
              };
              basket_Quote_Call_Sell.ChildStrategies.Add(VolatilityQuoting_Call_minus1Strike_Sell);
              basket_Quote_Call_Sell.ChildStrategies.Add(VolatilityQuoting_Call_baseStrike_Sell);
              basket_Quote_Call_Sell.ChildStrategies.Add(VolatilityQuoting_Call_plus1Strike_Sell);
              basket_Quote_Call_Sell.ChildStrategies.Add(VolatilityQuoting_Call_plus2Strike_Sell);

              //запускаем котирование
              basket_Quote_Call_Sell.Start();

              //создаем дельта-хеджирование, передав в него опционные стратегии для отслеживания их позиции
              var hedge_Call_Sell = new DeltaHedgeStrategy(basket_Quote_Call_Sell)
              {
                  Security = _SECURITY_Call_baseStrike.GetUnderlyingAsset(), // получаем базовый актив по опциону (т.е. фьюч РТС)
                  Portfolio = Portfolio,
                  Trader = Trader
              };

              hedge_Call_Sell.Start();


вот и глюк запустил пакетную механизм дельта хеджирования в итоге дельта по позиции -7.3 а DeltaHedgeStrategy так и не отработал даже по одной пакетной стратегии :D
Автор топика
Спасибо:

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 11.03.2012
Ответить


huricane Перейти

вот и глюк запустил пакетную механизм дельта хеджирования в итоге дельта по позиции -7.3 а DeltaHedgeStrategy так и не отработал даже по одной пакетной стратегии :D


Лог приводите, указывайте место неправильной работы, будем разбираться.
Спасибо:

Alexander

Фотография
Дата: 11.03.2012
Ответить


huricane Перейти
Есть ли такая возможность?


есть
Спасибо:

hurricane

Фотография
Дата: 11.03.2012
Ответить


Цитата:
huricane;16631 написал:
Есть ли такая возможность?


есть


понял спасибо! Александр!
Автор топика
Спасибо:

hurricane

Фотография
Дата: 12.03.2012
Ответить


не получается вывести логи при работе через пакетную стратегию, если стратегию запускать не через пакетную стратегию BasketStrategy
логи выводятся в окно "мониторинг работы", если через пакетную стратегию алгоритм котирует, но не выводит никакой информации в данное окно "мониторинг работы". Вы сами пробовали запускать через пакетную стратегию алгоритмы котирования, выводятся логи? нормально идет перекрытие по дельте если использовать DeltaHedgeStrategy? а то я делаю все как в примерах а не работает...Confused

Автор топика
Спасибо:

Alexander

Фотография
Дата: 12.03.2012
Ответить


Цитата:
не получается вывести логи при работе через пакетную стратегию, если стратегию запускать не через пакетную стратегию BasketStrategy
логи выводятся в окно "мониторинг работы", если через пакетную стратегию алгоритм котирует, но не выводит никакой информации в данное окно "мониторинг работы".


ничего не понял из вышенаписанного


логи от вложенности стратегий никак не зависят. всё что необходимо для работы с логами описано в документации и в примерах.
любое котирование - вложенная стратегия. логи отлично работают.
Спасибо:

hurricane

Фотография
Дата: 12.03.2012
Ответить


плюс ко всему у меня стоит чтобы алгоритм прокотировал объем 4 контракта, необходимый объем прокоториван, но все также выставляет заявки Unsure
я имею ввиду окно "мониторинг работы" в него должны выводится логи работы алгоритма, я правильно понимаю? так вот если запустить котирование без пакетной стратегии

Код
var VolatilityQuoting_Call_minus1Strike_Sell = new VolatilityQuotingStrategy(new Range<decimal>((decimal)vol_Call_minus1Strike - 0.9m, (decimal)vol_Call_minus1Strike + 0.9m), OrderDirections.Sell, 4)
            {
                Volume = 2,
                Security = _SECURITY_Call_minus1Strike,
                Trader = Trader,
                Portfolio = Portfolio
            };
base.ChildStrategies.Add(VolatilityQuoting_Call_minus1Strike_Sell);


то логи выводятся в окно "мониторинг работы", если запустить через BasketStrategy, то не выводятся

Код
var VolatilityQuoting_Call_minus1Strike_Sell = new VolatilityQuotingStrategy(new Range<decimal>((decimal)vol_Call_minus1Strike - 0.9m, (decimal)vol_Call_minus1Strike + 0.9m), OrderDirections.Sell, 4)
            {
                Volume = 2,
                Security = _SECURITY_Call_minus1Strike,
                Trader = Trader,
                Portfolio = Portfolio
            };
var basket_Quote_Call_Sell = new BasketStrategy(BasketStrategyFinishModes.All)
              {
                  Trader = Trader,
                  Portfolio = Portfolio,
                  Volume = 1,
                  Security = _SECURITY_Call_baseStrike
              };
basket_Quote_Call_Sell.ChildStrategies.Add(VolatilityQuoting_Call_minus1Strike_Sell);


basket_Quote_Call_Sell.Start();
1.png 30,7KB (0)
Автор топика
Спасибо:

Alexander

Фотография
Дата: 12.03.2012
Ответить


Где и что конкретно должно было вывестись, но не вывелось?
На вашем скриншоте вывод есть.
Спасибо:

hurricane

Фотография
Дата: 12.03.2012
Ответить


я ожидал увидеть при запуске подобный вывод как к примеру при запуске котирования без использования пакетной стратегии BasketStrategy
UPD плюс ко всеми при этом выводе показывает не правильный Ask
2.png 125,8KB (0)
Автор топика
Спасибо:

Alexander

Фотография
Дата: 12.03.2012
Ответить


Ну нажмите на первом скриншоте стрелочку слева и выберите что вам необходимо.
Спасибо:

hurricane

Фотография
Дата: 12.03.2012
Ответить


Александр но там нет ни какой информации! вот на принскрине идет котирование через пакетную стратегию (в заявках можно видеть активную заявку с объемом 2) при этом лог в "мониторинг работы" не выводится
3.png 333,1KB (0)
Автор топика
Спасибо:

Alexander

Фотография
Дата: 12.03.2012
Ответить


Выставите EnableRulesLog в true у basket_Quote_Call_Sell
Спасибо:

Alexander

Фотография
Дата: 12.03.2012
Ответить


А почему у вас всё по 2 раза запускается и, соответственно, выводится?
Так вами задумано?
Спасибо:

hurricane

Фотография
Дата: 12.03.2012
Ответить


Код
basket_Quote_Call_Sell.EnableRulesLog = true;
- не помогло
Автор топика
Спасибо:

hurricane

Фотография
Дата: 12.03.2012
Ответить


Alexander Mukhanchikov Перейти
А почему у вас всё по 2 раза запускается и, соответственно, выводится?
Так вами задумано?

на самом деле нет, не задумывалось :D
с чем это может быть связано?
Автор топика
Спасибо:

Alexander

Фотография
Дата: 12.03.2012
Ответить


huricane Перейти
Alexander Mukhanchikov Перейти
А почему у вас всё по 2 раза запускается и, соответственно, выводится?
Так вами задумано?

на самом деле нет, не задумывалось :D
с чем это может быть связано?


с тем, что вы 2 раза запускаете стратегию
Спасибо:

Alexander

Фотография
Дата: 12.03.2012
Ответить


huricane Перейти
Код
basket_Quote_Call_Sell.EnableRulesLog = true;
- не помогло


покажите работу с логами - как идёт инициализация, добавление MonitorWindow и стратегий
Спасибо:

hurricane

Фотография
Дата: 12.03.2012
Ответить


в MainWindow

Код
private readonly LogManager _logManager = new LogManager();

public MainWindow()
	{
	  InitializeComponent();
	  MainWindow.Instance = this;
          _logManager.Listeners.Add(new FileLogListener());
 
	}

private void Connect_Click(object sender, RoutedEventArgs e)
		{
			try
			{
				if (!_isConnected)
				{
					if (this.Trader == null)
					{
						// создаем шлюз
                        this.Trader = new PlazaTrader();
                        this.Portfolios.Trader = this.Trader;
						LoadRevisions();

                        var monitor = new MonitorWindow();
                        monitor.Show();

                        _logManager.Listeners.Add(new GuiLogListener(monitor));
                     .
                     .
                     .
               }

 private void Button_Click(object sender, RoutedEventArgs e)
        {
            if (_strategy == null)
            {
                if (this.Portfolios.SelectedPortfolio == null)
                {
                    MessageBox.Show(this, "Портфель не выбран.");
                    return;
                }

strategy = new _Strategy(SECURITY_Call_minus1Strike, SECURITY_Call_baseStrike, SECURITY_Call_plus1Strike, SECURITY_Call_plus2Strike,
                    SECURITY_Put_minus2Strike, SECURITY_Put_minus1Strike, SECURITY_Put_baseStrike, SECURITY_Put_plus1Strike, SECURITY_future)
                {
                    Volume = 1,
                    Security = SECURITY_Call_minus1Strike,
                    // тут все инструменты
                    _SECURITY_future = SECURITY_future, 
                    Portfolio = this.Portfolios.SelectedPortfolio,
                    Trader = Trader,
                };

                _logManager.Sources.Add(_strategy);
                _strategy.Log += OnLog;
               // _strategy.PropertyChanged += OnStrategyPropertyChanged;

            }

            _logManager.Sources.Add(_strategy);

            if (_strategy.ProcessState == ProcessStates.Stopped)
            {
                // запускаем процесс получения стакана, необходимый для работы алгоритма котирования
                this.Trader.RegisterQuotes(SECURITY_future);
                _strategy.Start();
     
            }
            else
            {
                this.Trader.UnRegisterQuotes(SECURITY_Call_minus1Strike);
                _strategy.Stop();
            
            }
           // this.GuiAsync(() => MainWindow.Instance.textBox13.Text = MainWindow.Instance.textBox13.Text + Environment.NewLine + "Статус стратегии:" + _strategy.ProcessState);

        }


В классе самой стратегии
// Стратегия
Код
        public _Strategy(Security SECURITY_future, Security SECURITY_Call_minus1Strike, Security SECURITY_Call_baseStrike, Security SECURITY_Call_plus1Strike, Security SECURITY_Call_plus2Strike,
                         Security SECURITY_Put_minus2Strike, Security SECURITY_Put_minus1Strike, Security SECURITY_Put_baseStrike, Security SECURITY_Put_plus1Strike)
        {
            _SECURITY_future = SECURITY_future;
            _SECURITY_Call_minus1Strike = SECURITY_Call_minus1Strike;
            _SECURITY_Call_baseStrike = SECURITY_Call_baseStrike;
            _SECURITY_Call_plus1Strike = SECURITY_Call_plus1Strike;
            _SECURITY_Call_plus2Strike = SECURITY_Call_plus2Strike;
            _SECURITY_Put_minus2Strike = SECURITY_Put_minus2Strike;
            _SECURITY_Put_minus1Strike = SECURITY_Put_minus1Strike;
            _SECURITY_Put_baseStrike = SECURITY_Put_baseStrike;
            _SECURITY_Put_plus1Strike = SECURITY_Put_plus1Strike;

        }


        protected override void OnStarting()
        {
            SuspendRules(() =>
            {

                MainWindow.Instance.GuiAsync(() => MainWindow.Instance.textBox13.Text = MainWindow.Instance.textBox13.Text + Environment.NewLine + "OnStarting GO :)");
                // PriceOffcetBid_3 = Convert.ToDecimal(MainWindow.Instance.textBox12.Text);

                this
                   .When(_SECURITY_future.MarketDepthChanged())
                   .Do(change);

                this
                    .When(_SECURITY_future.MarketDepthChanged())
                    .Do(Greeks_computation);

                this
                   .When(_SECURITY_future.MarketDepthChanged())
                   .Do(Start_logic).Once();

            });
            base.OnStarting();

        }
Автор топика
Спасибо:

Alexander

Фотография
Дата: 12.03.2012
Ответить


1) можно просто так:
Код
_logManager.Listeners.Add(monitor);


2) вы 2 раза делаете
Код
_logManager.Sources.Add(_strategy);

отсюда и 2 раза выводится лог

3) нигде не делается EnableRulesLog для strategy

+ эти стратегии расходятся с тем, что вы писали до этого
Спасибо:

hurricane

Фотография
Дата: 12.03.2012
Ответить


Код
 private void Start_logic()
        {
           MainWindow.Instance.GuiAsync(() => MainWindow.Instance.textBox13.Text = MainWindow.Instance.textBox13.Text + Environment.NewLine + "Start logic");
              //БЛОК КОТИРОВАНИЯ ОПЦИОНОВ CALL НА ПРOДАЖУ
              //котирование на продажу опциона Call минус 1 страйк от базового -5000п
            var VolatilityQuoting_Call_minus1Strike_Sell = new VolatilityQuotingStrategy(new Range<decimal>((decimal)vol_Call_minus1Strike - 0.5m, (decimal)vol_Call_minus1Strike + 0.5m), OrderDirections.Sell, 4)
            {
                Volume = 2,
                Security = _SECURITY_Call_minus1Strike,
                Trader = Trader,
                Portfolio = Portfolio
            };
            //base.ChildStrategies.Add(VolatilityQuoting_Call_minus1Strike_Sell);



              //котирование на продажу опциона Call базовый страйк
             /* var VolatilityQuoting_Call_baseStrike_Sell = new VolatilityQuotingStrategy(new Range<decimal>((decimal)vol_Call_baseStrike - 0.03m, (decimal)vol_Call_baseStrike + 0.03m), OrderDirections.Sell, 4)
              {
                  Volume = 2,
                  Security = _SECURITY_Call_baseStrike,
                  Trader = Trader,
                  Portfolio = Portfolio
              };

              //котирование на продажу опциона Call со страйком плюс 1 от базового +5000п
              var VolatilityQuoting_Call_plus1Strike_Sell = new VolatilityQuotingStrategy(new Range<decimal>((decimal)vol_Call_plus1Strike - 0.03m, (decimal)vol_Call_plus1Strike + 0.03m), OrderDirections.Sell, 4)
              {
                  Volume = 2,
                  Security = _SECURITY_Call_plus1Strike,
                  Trader = Trader,
                  Portfolio = Portfolio
              };

              //котирование на продажу опциона Call со страйком плюс 2 от базового +10000п
              var VolatilityQuoting_Call_plus2Strike_Sell = new VolatilityQuotingStrategy(new Range<decimal>((decimal)vol_Call_plus2Strike - 0.03m, (decimal)vol_Call_plus2Strike + 0.03m), OrderDirections.Sell, 4)
              {
                  Volume = 2,
                  Security = _SECURITY_Call_plus2Strike,
                  Trader = Trader,
                  Portfolio = Portfolio
              };*/

              //упаковываем алгоритмы котирования по разным страйкам на продажу опционов Call в BasketStrategy
              var basket_Quote_Call_Sell = new BasketStrategy(BasketStrategyFinishModes.All)
              {
                  Trader = Trader,
                  Portfolio = Portfolio,
                  Volume = 1,
                  Security = _SECURITY_Call_baseStrike
              };
              basket_Quote_Call_Sell.ChildStrategies.Add(VolatilityQuoting_Call_minus1Strike_Sell);
             // basket_Quote_Call_Sell.ChildStrategies.Add(VolatilityQuoting_Call_baseStrike_Sell);
             // basket_Quote_Call_Sell.ChildStrategies.Add(VolatilityQuoting_Call_plus1Strike_Sell);
             // basket_Quote_Call_Sell.ChildStrategies.Add(VolatilityQuoting_Call_plus2Strike_Sell);

              //запускаем котирование
              basket_Quote_Call_Sell.Start();

              basket_Quote_Call_Sell.EnableRulesLog = true;

              //создаем дельта-хеджирование, передав в него опционные стратегии для отслеживания их позиции
              var hedge_Call_Sell = new DeltaHedgeStrategy(basket_Quote_Call_Sell)
              {
                  Security = _SECURITY_Call_baseStrike.GetUnderlyingAsset(), // получаем базовый актив по опциону (т.е. фьюч РТС)
                  Portfolio = Portfolio,
                  Trader = Trader
              };

              hedge_Call_Sell.Start();

}

вот кусок логики там где я ставил EnableRulesLog = true
Автор топика
Спасибо:

hurricane

Фотография
Дата: 12.03.2012
Ответить


Alexander Mukhanchikov Перейти
1) можно просто так:
Код
_logManager.Listeners.Add(monitor);


2) вы 2 раза делаете
Код
_logManager.Sources.Add(_strategy);

отсюда и 2 раза выводится лог


Спасибо поправил!
Автор топика
Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy