InsiderHSE
|
Date: 6/22/2011
Версия 3.2.2, проблема осталась. Использую следующий код Code
class MyMarketQuotingStrategy : MarketQuotingStrategy
{
public MyMarketQuotingStrategy(Order order, Unit betsPriceOffset, Unit priceOffset) : base(order, betsPriceOffset, priceOffset) { }
protected override void OnRunned()
{
base.NewMyTrades += t =>
{
MyTrade tr = t.FirstOrDefault();
Debug.WriteLine("Котирование внутри: Пришла новая сделка - " + DateTime.Now.ToLongTimeString() + " " + tr.ToString());
};
base.OnRunned();
}
}
Событие не приходит.
|
|
Thanks:
|
|
|
|
|
Mikhail Sukhov
|
Date: 6/23/2011
InsiderHSE Версия 3.2.2, проблема осталась. Использую следующий код
Событие не приходит. Молный лог можете привести котирования? Плюс как используется стратегия? Куда-то добавляется или сама по себе работает? Как создается?
|
|
Thanks:
|
|
|
|
|
InsiderHSE
|
Date: 6/23/2011
|
|
|
|
Есть базовая стратегия, которая при срабатывании кастомного правила вызывается Do(Action1): Code
private void Action1()
{
Debug.WriteLine(DateTime.Now.ToLongTimeString() + " - Запускаем действие");
var order = _signalDirection == OrderDirections.Buy ? base.BuyAt(Security.LastTrade.Price) : base.SellAt(Security.LastTrade.Price);
var qstr = new MyMarketQuotingStrategy(order, 0m.Pips(order.Security), (0m).Pips(order.Security)) { PriceType = MarketPriceTypes.Middle, MaxErrorCount = 1 };
qstr.NewMyTrades += t =>
{
MyTrade tr = t.FirstOrDefault();
Debug.WriteLine("Котирование: Пришла новая сделка - " + DateTime.Now.ToLongTimeString() + " " + tr.ToString());
};
this.ChildStrategies.Add(qstr);
}
код MyMarketQuotingStrategy приведен выше. Сама базовая стратегия вызывается следующим образом: Code
private void LounchStrat()
{
var cm = new CandleManager(Trader);
var cf = new VolumeTimeFrameCandleFactory();
cm.UnRegisterCandleFactory<TimeFrameCandle>();
cm.RegisterCandleFactory(cf);
var strategy = new VolumeDiffStrategy(Security, SignalSecurity, 18000, (-5.08).Percents(), 0.03.Percents(), 0.03.Percents())
{
Volume = 1,
Portfolio = Portfolio_FORTS,
Trader = this.Trader,
IsShortEnabled = true,
CandleManager = cm,
};
cm.RegisterCandles<TimeFrameCandle, TimeSpan>(SignalSecurity, TimeSpan.FromSeconds(25));
if (!Trader.Terminal.IsQuotesOpened(Security)) Trader.Terminal.OpenQuotes(Security);
Trader.RegisterQuotes(Security);
strategy.NewMyTrades += t =>
{
MyTrade tr = t.FirstOrDefault();
Debug.WriteLine("Базовая стратегия: Пришла новая сделка - " + DateTime.Now.ToLongTimeString() + " " + tr.ToString());
};
var fileLogger = new FileStrategyLogger("log.txt");
fileLogger.Strategies.Add(strategy);
strategy.Start();
}
Вывод дебаггера (после первой сделки все события вызвались, потом нет): Code
16:19:25 - вызван OnRunning
16:19:38 - Запускаем действие
Базовая стратегия: Пришла новая сделка - 16:19:40 StockSharp.BusinessEntities.MyTrade
Котирование: Пришла новая сделка - 16:19:40 StockSharp.BusinessEntities.MyTrade
Котирование внутри: Пришла новая сделка - 16:19:40 StockSharp.BusinessEntities.MyTrade
The thread '<No Name>' (0xc90) has exited with code 0 (0x0).
16:20:00 - Запускаем действие
Базовая стратегия: Пришла новая сделка - 16:20:01 StockSharp.BusinessEntities.MyTrade
16:20:29 - Запускаем действие
Базовая стратегия: Пришла новая сделка - 16:20:34 StockSharp.BusinessEntities.MyTrade
лог: Code
VDS 23.06.2011 16:19:26.313 Стратегия запущена.
VDS 23.06.2011 16:19:38.359 [MMQS] Стратегия запущена.
VDS 23.06.2011 16:19:38.566 [MMQS] Регистрация новой заявки на Buy с ценой 9622 и объемом 1.
VDS 23.06.2011 16:19:38.577 [MMQS] Заявка 58736846 на Buy отправлена с ценой 9622 объемом 1.
VDS 23.06.2011 16:19:38.678 [MMQS] Заявка 58736846 не имеет состояния.
VDS 23.06.2011 16:19:40.297 [MMQS] Цена текущей 9622 и лучшей 9621.
VDS 23.06.2011 16:19:40.297 [MMQS] Котирование заявки 58736846 на Buy с ценой 9622 объемом 1.
VDS 23.06.2011 16:19:40.301 [MMQS] Перекотирование зарегистрировано для заявки 58736847 на Buy с ценой 9621 объемом 1.
VDS 23.06.2011 16:19:40.336 [MMQS] Позиция изменилась на 1.
VDS 23.06.2011 16:19:40.336 [MMQS] Заканчиваем котирование с неисполненным объемом равный 0.
VDS 23.06.2011 16:19:40.336 [MMQS] Стратегия останавливается.
VDS 23.06.2011 16:19:40.340 [MMQS] Стратегия остановлена.
VDS 23.06.2011 16:20:00.823 [MMQS] Стратегия запущена.
VDS 23.06.2011 16:20:00.889 [MMQS] Регистрация новой заявки на Buy с ценой 9618 и объемом 1.
VDS 23.06.2011 16:20:00.889 [MMQS] Заявка 58736848 на Buy отправлена с ценой 9618 объемом 1.
VDS 23.06.2011 16:20:01.091 [MMQS] Заявка 58736848 не имеет состояния.
VDS 23.06.2011 16:20:01.659 [MMQS] Позиция изменилась на 1.
VDS 23.06.2011 16:20:01.659 [MMQS] Заканчиваем котирование с неисполненным объемом равный 0.
VDS 23.06.2011 16:20:01.659 [MMQS] Стратегия останавливается.
VDS 23.06.2011 16:20:01.659 [MMQS] Стратегия остановлена.
VDS 23.06.2011 16:20:30.155 [MMQS] Стратегия запущена.
VDS 23.06.2011 16:20:30.302 [MMQS] Регистрация новой заявки на Buy с ценой 9619 и объемом 1.
VDS 23.06.2011 16:20:30.302 [MMQS] Заявка 58736849 на Buy отправлена с ценой 9619 объемом 1.
VDS 23.06.2011 16:20:34.764 [MMQS] Позиция изменилась на 1.
VDS 23.06.2011 16:20:34.764 [MMQS] Заканчиваем котирование с неисполненным объемом равный 0.
VDS 23.06.2011 16:20:34.764 [MMQS] Стратегия останавливается.
VDS 23.06.2011 16:20:34.764 [MMQS] Стратегия остановлена.
|
|
Thanks:
|
|
|
|
|
Mikhail Sukhov
|
Date: 6/23/2011
Меня в логе напрягает один момент. Сначала он выводит запись от родительской стратегии, а затем от дочерней. А так быть не может. Потому что родительская подписывается последней строчкой в Action1 (неявно при добавлении в ChildStrategies).
|
|
Thanks:
|
|
|
|
|
InsiderHSE
|
Date: 6/24/2011
Mikhail Sukhov Меня в логе напрягает один момент. Сначала он выводит запись от родительской стратегии, а затем от дочерней. А так быть не может. Потому что родительская подписывается последней строчкой в Action1 (неявно при добавлении в ChildStrategies). Мхаил, а в какую сторону копать не подскажете? Не знаю, может это поможет, логика работы робота такая - базовая тратегия подписывается на событие новой свечки, и если есть условия на вход, вызывает кастомное событие. Есть кастомное правило, которое подписывается на это событие и активируется по его приходу, именно в тот момент вызывается Action1.
|
|
Thanks:
|
|
|
|
|
Mikhail Sukhov
|
Date: 6/24/2011
InsiderHSE Mikhail Sukhov Меня в логе напрягает один момент. Сначала он выводит запись от родительской стратегии, а затем от дочерней. А так быть не может. Потому что родительская подписывается последней строчкой в Action1 (неявно при добавлении в ChildStrategies). Мхаил, а в какую сторону копать не подскажете? Не знаю, может это поможет, логика работы робота такая - базовая тратегия подписывается на событие новой свечки, и если есть условия на вход, вызывает кастомное событие. Есть кастомное правило, которое подписывается на это событие и активируется по его приходу, именно в тот момент вызывается Action1. Можете выкинуть все люгику работы, и прислать пример мне на mika сбк сайт?
|
|
Thanks:
|
|
|
|
|
InsiderHSE
|
Date: 6/28/2011
Mikhail Sukhov
Можете выкинуть все люгику работы, и прислать пример мне на mika сбк сайт?
Сделал.
|
|
Thanks:
|
|
|
|
|
Mikhail Sukhov
|
Date: 6/28/2011
InsiderHSE Mikhail Sukhov
Можете выкинуть все люгику работы, и прислать пример мне на mika сбк сайт?
Сделал. Ок, получил. Буду разбираться.
|
|
Thanks:
|
|
|
|
|
Mikhail Sukhov
|
Date: 7/1/2011
InsiderHSE Mikhail Sukhov
Можете выкинуть все люгику работы, и прислать пример мне на mika сбк сайт?
Сделал. Нашел проблему. Ситуация следующая. MyMarketQuotingStrategy успешно отработало и было удалено. Сделки приходят чуть с запозданием, поэтому оно то успевало вызвать событие, то нет. Решается проблема так: Code
public VolumeDiffStrategy(Security sec)
{
this.Security = sec;
base.RemoveChildStrategies = false;
}
Пока не знаю, насколько это правильно.
|
|
Thanks:
|
|
|
|
|
InsiderHSE
|
Date: 7/1/2011
Mikhail Sukhov InsiderHSE Mikhail Sukhov
Можете выкинуть все люгику работы, и прислать пример мне на mika сбк сайт?
Сделал. Нашел проблему. Ситуация следующая. MyMarketQuotingStrategy успешно отработало и было удалено. Сделки приходят чуть с запозданием, поэтому оно то успевало вызвать событие, то нет. Решается проблема так: Code
public VolumeDiffStrategy(Security sec)
{
this.Security = sec;
base.RemoveChildStrategies = false;
}
Пока не знаю, насколько это правильно. Спасибо, попробую так.
|
|
Thanks:
|
|
|
|