Не приходит событие NewMyTrades в MarketQuotingStrategy
Atom Ответить
17.06.2011


сабж. Причем по родительской стратегии событие приходит. Я так понимаю, стратегия успевает остановиться перед вызовом этого события. Это так задумано или баг?
Код
 var strategy = new MyStrategy(Security)
            {
            	Volume = 1,
            	Portfolio = Portfolio_FORTS,
            	Trader = this.Trader,
            };

			strategy.NewMyTrades += t =>
			{
				MyTrade tr = t.FirstOrDefault();
				Debug.WriteLine("Родительская стратегия: Пришла новая сделка - " + DateTime.Now.ToLongTimeString() + "   " + tr.ToString());
			};

В коде стратеги при получении сигнала прописываю:
Код

var order = base.BuyAt(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());
	};
base.ChildStrategies.Add(qstr);

Получаю:
Родительская стратегия: Пришла новая сделка - 17:07:56 StockSharp.BusinessEntities.MyTrade
Родительская стратегия: Пришла новая сделка - 17:08:17 StockSharp.BusinessEntities.MyTrade

Причем иногда сделка по котированию все-таки приходит, иногда с третьего раза, бывает позже.

Теги:


Спасибо:




10 Ответов
InsiderHSE

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


Версия 3.2.2, проблема осталась.
Использую следующий код
Код

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();
		}
    }

Событие не приходит.
Автор топика
Спасибо:

Mikhail Sukhov

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


InsiderHSE Перейти
Версия 3.2.2, проблема осталась.
Использую следующий код

Событие не приходит.


Молный лог можете привести котирования? Плюс как используется стратегия? Куда-то добавляется или сама по себе работает? Как создается?
Спасибо:

InsiderHSE

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


Есть базовая стратегия, которая при срабатывании кастомного правила вызывается Do(Action1):
Код

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 приведен выше.
Сама базовая стратегия вызывается следующим образом:
Код

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();
        }


Вывод дебаггера (после первой сделки все события вызвались, потом нет):
Код

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


лог:
Код

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] Стратегия остановлена.
Автор топика
Спасибо:

Mikhail Sukhov

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


Меня в логе напрягает один момент. Сначала он выводит запись от родительской стратегии, а затем от дочерней. А так быть не может. Потому что родительская подписывается последней строчкой в Action1 (неявно при добавлении в ChildStrategies).
Спасибо:

InsiderHSE

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


Mikhail Sukhov Перейти
Меня в логе напрягает один момент. Сначала он выводит запись от родительской стратегии, а затем от дочерней. А так быть не может. Потому что родительская подписывается последней строчкой в Action1 (неявно при добавлении в ChildStrategies).

Мхаил, а в какую сторону копать не подскажете? Не знаю, может это поможет, логика работы робота такая - базовая тратегия подписывается на событие новой свечки, и если есть условия на вход, вызывает кастомное событие. Есть кастомное правило, которое подписывается на это событие и активируется по его приходу, именно в тот момент вызывается Action1.
Автор топика
Спасибо:

Mikhail Sukhov

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


InsiderHSE Перейти
Mikhail Sukhov Перейти
Меня в логе напрягает один момент. Сначала он выводит запись от родительской стратегии, а затем от дочерней. А так быть не может. Потому что родительская подписывается последней строчкой в Action1 (неявно при добавлении в ChildStrategies).

Мхаил, а в какую сторону копать не подскажете? Не знаю, может это поможет, логика работы робота такая - базовая тратегия подписывается на событие новой свечки, и если есть условия на вход, вызывает кастомное событие. Есть кастомное правило, которое подписывается на это событие и активируется по его приходу, именно в тот момент вызывается Action1.


Можете выкинуть все люгику работы, и прислать пример мне на mika сбк сайт?
Спасибо:

InsiderHSE

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


Mikhail Sukhov Перейти


Можете выкинуть все люгику работы, и прислать пример мне на mika сбк сайт?

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

Mikhail Sukhov

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


InsiderHSE Перейти
Mikhail Sukhov Перейти


Можете выкинуть все люгику работы, и прислать пример мне на mika сбк сайт?

Сделал.


Ок, получил. Буду разбираться.
Спасибо:

Mikhail Sukhov

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


InsiderHSE Перейти
Mikhail Sukhov Перейти


Можете выкинуть все люгику работы, и прислать пример мне на mika сбк сайт?

Сделал.


Нашел проблему. Ситуация следующая. MyMarketQuotingStrategy успешно отработало и было удалено. Сделки приходят чуть с запозданием, поэтому оно то успевало вызвать событие, то нет. Решается проблема так:

Код
public VolumeDiffStrategy(Security sec)
{
  this.Security = sec;
  base.RemoveChildStrategies = false;
}


Пока не знаю, насколько это правильно.
Спасибо:

InsiderHSE

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


Mikhail Sukhov Перейти
InsiderHSE Перейти
Mikhail Sukhov Перейти


Можете выкинуть все люгику работы, и прислать пример мне на mika сбк сайт?

Сделал.


Нашел проблему. Ситуация следующая. MyMarketQuotingStrategy успешно отработало и было удалено. Сделки приходят чуть с запозданием, поэтому оно то успевало вызвать событие, то нет. Решается проблема так:

Код
public VolumeDiffStrategy(Security sec)
{
  this.Security = sec;
  base.RemoveChildStrategies = false;
}


Пока не знаю, насколько это правильно.

Спасибо, попробую так.
Автор топика
Спасибо:


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

loading
clippy