Убить упрямую тварь!

Убить упрямую тварь!
Atom
9/6/2012


Здравствуйте.

Я использую MQS для открытия позиции, как дочернюю стратегию. В процессе работы котирования произошла ошибка, и котирование осталось висеть дочерней стратегией. Но при этом, перед ошибкой, позиция по инструменту была открыта. Мне надо сделать так, чтобы дочерняя MQS закончилась и самоудалилась из базовой стратегии, даже при ошибке. В данном же случае MQS переходит в ProcessState == Stopping и висит в родительской стратегии. Мне же нужно удалять дочерние стратегии после совершения сделок, или после ошибок. То есть - если стратегия отработала или ошиблась, то она должна удалиться.

Как это сделать самым лучшим способом? Под "лучшим способом" я понимаю в порядке убывания лучшести:
1. При создании стратегии выставить какое-нибудь свойство, которое указывает стратегии убиться в любом нештатном случае
2. Написать обработчик Error, в котором прибивать стратегию самостоятельно. (И что там примерно писать?).
3. Следить за дочерней стратегией из базовой, и выпиливать дочернюю, если что не так.

Лог утерян. В общем же, там было следующее:
1. Стратегия отправила ордер, тот зарегистрировался.
2. Изменился стакан или что-то еще произошло, и стратегия начала перерегистрацию ордера
3. В процессе перерегистрации заявка исполнилась.
4. Новый ордер ушел на биржу
5. ФОРТС ответил "нехватка по лимитам"
6. MQS вывалила в лог исключение (сообщение с ФОРТС) и осталась висеть в состоянии Stopping

Код:

Code

        protected void EnterLong()
        {
            // дожидаемся завершения стратегий
            if(base.ChildStrategies.Count != 0)
            {
                this.AddWarningLog("EnterLong - отказ, есть активные стратегии!");
                return;
            }

            // Проверяем время
            if(m_TTM.State(DateTime.Now) != TradeState.Opened)
            {
                this.AddWarningLog("EnterLong - отказ, неторговое время");
                return;
            }

            decimal LongVolume = base.Volume - base.Position;
            this.AddInfoLog("Входим в лонг, макс. объем {0}", LongVolume);

            if(LongVolume < 1)
            {
                this.AddWarningLog("EnterLong - отказ, неправильный объем {0}. Вычислено {1} - {2}", LongVolume, base.Volume, base.Position);
                return;
            }

            m_PositionEnter = base.Security.LastTrade.Price;
            MarketQuotingStrategy buyer = new MarketQuotingStrategy(OrderDirections.Buy, Math.Min(LongVolume, m_Depth.BestAsk.Volume))
            {
                PriceType = MarketPriceTypes.Opposite/*,
                MaxErrorCount = 3,
                MaxReRegisterCount = 10,
                MaxRegisterFailCount = 3*/
            };
            base.ChildStrategies.Add(buyer);
        }

Tags:


Thanks:


< 1 2 
vk37

Avatar
Date: 9/11/2012
Reply


Тоже сегодня столкнулся с тем, что стратегия дублирует заявки. Работаю на смарте. Делать свою реализацию? Мог бы посмотреть имеющуюся, если бы доступ был. После дублирования стратегия перестала работать. Как теперь уходить от компа? )
Thanks:

Alexander

Avatar
Date: 9/11/2012
Reply


Может стоит лог приложить? Или нам догадываться надо в очередной раз?
Thanks:

vk37

Avatar
Date: 9/14/2012
Reply


Сегодня снова. Лог:
Thanks:

Mikhail Sukhov

Avatar
Date: 9/14/2012
Reply


vk37 Go to
Сегодня снова. Лог:


А где проблемное место в логе?
Thanks:
< 1 2 

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy