Не работает order.IsMatched()
Atom
15.01.2013
RoboKrolik


Написал каркас для торговой системы по итерационной модели: есть базовый класс и класс стратегии.

Создаю заявку на покупку в классе стратегии регистрирую ее - все хорошо.

Но после этого хочу проверить ордер с помощью order.IsMatched() - пишет false постоянно даже когда стратегия исполняет ордера.

пробовал
Код
this._order.IsMatched() 
и просто _order.IsMatched() 
и this.Trader.GetPosition(Portfolio,Security,"").CurrentValue ) 
и просто Trader.GetPosition(Portfolio,Security,"").CurrentValue )
и ничего!

Конструктор стратегии с класса стратегии:
Код
    
        public DartWeiderStretegy(CandleManager candleManager, TimeSpan timeFrame, CandleSeries series) : base(timeFrame)
        {
            _candleManager = candleManager;

            _timeFrame = TimeFrame;

            _series = series;

        }




Запуск стратегии с основного класса:
Код
                _series = new CandleSeries(typeof(TimeFrameCandle), _security, _timeFrame); // создаем поток свечей и указываем что тип TimeFrameCandle

                _candleManager.Start(_series, _starttime, _endtime);  // запускаем CandleManager
                
                System.Threading.Thread.Sleep(20000); // делаем паузу на 20 сек. перед тем как запустить стратегию - чтобы серия заполнилась свечками               

                _strategy = new DartWeiderStretegy(_candleManager, _timeFrame, _series) // создаем стратегию
                {
                    Volume = _sharecount, // количество контрактов которое мы указали
                    Security = _security,
                    Portfolio = _portfolio,
                    Trader = _trader,
                    Interval = _timeRefreshStrategy // интервал который мы указали
                };

Теги:


Спасибо:


Alexander

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


В какой момент проверяете?

IsMatched проверяет просто что order.State == OrderStates.Done и order.Balance == 0.
Првоерьте свои поля у order в момент проверки IsMatched
Спасибо:

RoboKrolik

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


Alexander Mukhanchikov
В какой момент проверяете?


Проверяю после того как с класса стратегии создал заявку и зарегистрировал ее:

Код

_order = this.CreateOrder(OrderDirections.Buy, _series.GetCandle<TimeFrameCandle>(1).ClosePrice, base.Volume);
base.RegisterOrder(_order);


Alexander Mukhanchikov
Првоерьте свои поля у order в момент проверки IsMatched


В момент проверки мой Order.States равен NONE - заявка не отправлена в систему. А Order.Balance показывает первоначальное количество контрактов в сделке и не меняется в процессе регистрации и выполнения сделки вообще никак.

Может быть такое что я не могу получить в класс со стратегией данные о том зарегистрирован ли ордер или нет?
У меня ощущение что ордер просто улетает в основной класс где регистрируется а инфу об этом класс со стратегией получить не может.

Может подписаться нужно на какое-то событие?
Спасибо:

Alexander

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


Ну всё правильно.

Вы отправили ордер, а он-то не дошёл ещё, биржа ответ не прислала.
Смотрите события NewOrders \ OrdersChanged \ ...
Смотря что конкретно вам надо.
Спасибо: RoboKrolik

RoboKrolik

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


Ну просто ничего не могу понять! Я тупой!

Alexander Mukhanchikov
Вы отправили ордер, а он-то не дошел ещё, биржа ответ не прислала.


Я проверяю заявку уже после того как она в квике зарегистрирована и исполнена...

В основном классе подписываюсь на события появления новых сделок ордеров итд..
Код

                _trader.NewMyTrades += MyNewTrades; //подписываемся на событие получения новых сделок
                _trader.NewOrders += MyNewOrders; //подписываемся на событие получения новых заявок
                _trader.NewStopOrders += MyNewStopOrders; //подписываемся на событие получения новых стоп-заявок
                _trader.OrdersChanged += MyOrdersChanged; // подписываеся на событие изменения ордеров


Потом описываю методы вот так:
Код

        public void MyNewTrades(IEnumerable<MyTrade> trades)
        {
            if (_strategy != null)
            {
                // найти те сделки, которые совершила стратегия
                //trades = trades.Where(t => _strategy.Orders.Any(o => o == t.Order));

                MessageBox.Show("hello");

            }
        }

        private void MyNewOrders(IEnumerable<Order> orders)
        {
            
        }

        private void MyNewStopOrders(IEnumerable<Order> orders)
        {
        }

        private void MyOrdersChanged(IEnumerable<Order> orders)
        {

        }


И никакое сообщение Хеллоу не выскакиеват. Я не вижу когда происходят сделки??? Я подписываюсь не в том классе???

Решил попробовать подписаться на событие появления новых сделок прямо в классе стратегии:
Код

        // конструктор для работы стратегии
        public DartWeiderStretegy(CandleManager candleManager, TimeSpan timeFrame, CandleSeries series) : base(timeFrame)
        {
            _candleManager = candleManager;

            _timeFrame = TimeFrame;

            _series = series;

            base.NewMyTrades += OnNewMyTrades;

        }

        private void OnNewMyTrades(IEnumerable<MyTrade> trades)
        {
            MessageBox.Show("hello");
        }


Та же беда...

Прошу подсказать куда копать? Что читать?

Хочу получить отчет о состоянии оредера)))
Спасибо:

Alexander

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


Смотрите Sample, там по событию NewMyTrades что-то происходит со сделками. Он у вас корректно работает?
Спасибо: RoboKrolik

RoboKrolik

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


Посмотрел тот пример - не понимаю как он мне подходит.

Дам весь код чтобы было понятно.

Мне нужно знать что подправить чтобы получить _order.IsMatched()

MainWindows.cs


Strategy.cs
Спасибо:

Alexander

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


Повторяю свой ответ. Вы проверяете не в тот момент isMatched. Вы проверяете после того как отправили, но до того как вам пришёл ответ от биржи.
Спасибо: RoboKrolik

RoboKrolik

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


Alexander Mukhanchikov
Повторяю свой ответ. Вы проверяете не в тот момент isMatched. Вы проверяете после того как отправили, но до того как вам пришёл ответ от биржи.


Спасибо все работает.

Не могу понять почему я вынес проверку исполнения ордера как Вы указали и ничего не получалось... Код вроде не менял, но на след день начало работать))) Мистика)
Спасибо:

zxzzxxzx

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


Товарищи!

Нельзя ли как-нибудь показатль работающий код? Пытаюсь настроить проверку статуса заявок - никак не получается(((

Спасибо
Спасибо:


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

loading
clippy