Mikhail Sukhov
|
Дата: 11.03.2012
huricane  Есть ли такая возможность? Было бы здорово :D На форуме отвечаем только на вопросы, связанные с багами. Все подробнее - в тех поддержку.
|
|
|
|
hurricane
|
Дата: 11.03.2012
ну пожайлуста! как новичку 1 ответик
|
Автор топика
|
|
|
Mikhail Sukhov
|
Дата: 11.03.2012
huricane  ну пожайлуста! как новичку 1 ответик 42
|
|
|
|
hurricane
|
Дата: 11.03.2012
Михаил, не понял? это шутка? или это серьезный ответ на мой вопрос?
|
Автор топика
|
|
|
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? а то я делаю все как в примерах а не работает...
|
Автор топика
|
|
|
Alexander
|
Дата: 12.03.2012
Цитата:не получается вывести логи при работе через пакетную стратегию, если стратегию запускать не через пакетную стратегию BasketStrategy логи выводятся в окно "мониторинг работы", если через пакетную стратегию алгоритм котирует, но не выводит никакой информации в данное окно "мониторинг работы". ничего не понял из вышенаписанного логи от вложенности стратегий никак не зависят. всё что необходимо для работы с логами описано в документации и в примерах. любое котирование - вложенная стратегия. логи отлично работают.
|
|
|
|
hurricane
|
Дата: 12.03.2012
|
|
|
|
плюс ко всему у меня стоит чтобы алгоритм прокотировал объем 4 контракта, необходимый объем прокоториван, но все также выставляет заявки я имею ввиду окно "мониторинг работы" в него должны выводится логи работы алгоритма, я правильно понимаю? так вот если запустить котирование без пакетной стратегии Код
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();
|
Автор топика
|
|
|
Alexander
|
Дата: 12.03.2012
Где и что конкретно должно было вывестись, но не вывелось? На вашем скриншоте вывод есть.
|
|
|
|
hurricane
|
Дата: 12.03.2012
я ожидал увидеть при запуске подобный вывод как к примеру при запуске котирования без использования пакетной стратегии BasketStrategy UPD плюс ко всеми при этом выводе показывает не правильный Ask
|
Автор топика
|
|
|
Alexander
|
Дата: 12.03.2012
Ну нажмите на первом скриншоте стрелочку слева и выберите что вам необходимо.
|
|
|
|
hurricane
|
Дата: 12.03.2012
Александр но там нет ни какой информации! вот на принскрине идет котирование через пакетную стратегию (в заявках можно видеть активную заявку с объемом 2) при этом лог в "мониторинг работы" не выводится
|
Автор топика
|
|
|
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 раза выводится лог Спасибо поправил!
|
Автор топика
|
|