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


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

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

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

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

Код:

Код

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

Теги:


Спасибо:


< 1 2 
vk37

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


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

Alexander

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


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

vk37

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


Сегодня снова. Лог:
Спасибо:

Mikhail Sukhov

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


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


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

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

loading
clippy