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


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


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

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

Код

public DeltaHedgeStrategy(
	Strategy tradingStrategy
)


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

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

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

Теги:


Спасибо:


< 1 2 3 
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 раза выводится лог


Спасибо поправил!
Спасибо:
< 1 2 3 

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

loading
clippy