Самые начальные вопросы
Atom Ответить
16.12.2011


Подскажите самое простое, пожалуйста.

Пробую реализовать торговлю по сигналам MACD, длинная 26, короткая 12, сигнальная 9, по тикам.
Примитивный пример должен уметь (из теста сигнала на истории) несколько сделок в секунду.
Нет понимания как это делается технически во времени.
Код
pos = this.BuyAtMarket();
this.RegisterOrder(pos);

При сигнале на разворот, смотрю в pos, исполнилась ли? pos.IsMatched()
Подтверждение приходит, бывает, через несколько секунд. Читал что сделки приходят с опозданием, но подтверждение
выполнения в ордер - тоже? Как в принципе работает HFT тогда. Отправляется без обратной связи?
Полностью disappointed -(

4.0.8 12635
SmartCom - демосчет


Теги:


Спасибо:




19 Ответов
Alexander

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


строить через смартком хфт - не лучшая затея.
да, я отправляю без подтверждения.
если заявка посылается по маркету - зачем подтверждение?
порой через плазу2 задержки в секунды, какое тут подтверждение :)

Цитата:
подтверждение выполнения в ордер

это как раз и есть ответ от биржи.
Спасибо:

ktulhu2000

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


смартком выбирал человек с нулевым опытом -)
а какой шлюз больше подойдет? и какой - для тестирования?

если не ждать подтверждений, то, наверно ловить только order failed?
и в этом случае что делать - закрываться и перестартовывать стратегию?
тоже ведь будут задержки с инфой о позции. Trader.GetPosition(portfolio, security) или как-то иначе?

и готовые защитные стратегии при хфт тоже нельзя использовать, получается?
Автор топика
Спасибо:

Alexander

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


ktulhu2000 Перейти
смартком выбирал человек с нулевым опытом -)
а какой шлюз больше подойдет? и какой - для тестирования?

если не ждать подтверждений, то, наверно ловить только order failed?
и в этом случае что делать - закрываться и перестартовывать стратегию?
тоже ведь будут задержки с инфой о позции. Trader.GetPosition(portfolio, security) или как-то иначе?

и готовые защитные стратегии при хфт тоже нельзя использовать, получается?


для хфт - плаза2
можно ловить и исполнение сделок, и failed - тут всё зависит от стратегии

что делать на order failed - это, опять же, зависит от стратегии.
что вам надо делать если не удалось зарегать заявку? вряд ли перестартовывать стратегию. закрываться - тоже непонятно
скорее всего либо игнорировать, либо слать опять заявку

позицию можно считать самому - по мнимым сделкам, отправленным и реальную - что транслирует биржа
защитные - можно использовать. они просто закрывают при наступлении нужной цены.
Спасибо:

ktulhu2000

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


спасибо за ответы!
если ориентироваться на плазу, что использовать для тестов -
демо на смарткоме, realtime эмуляцию к плазе?
Автор топика
Спасибо:

Alexander

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


ktulhu2000 Перейти
спасибо за ответы!
если ориентироваться на плазу, что использовать для тестов -
демо на смарткоме, realtime эмуляцию к плазе?


Что вам удобно, зависит от того, какие данные нужны для тестов
Спасибо:

ktulhu2000

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


опять вопросы -)
Код
pos = this.BuyAtMarket();
this.RegisterOrder(pos);

отправляет как LIMIT (смотрю в терминал SmartTrade, демосчет)
заменил на
Код
var order = new Order
                    {
                        Portfolio = Portfolio,
                        Security = Security,
                        Type = OrderTypes.Market,
                        Volume = _volume,
                        Direction = OrderDirections.Buy,
                    };
base.RegisterOrder(order);

стало MARKET. инструмент фртс.

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

Alexander

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


ktulhu2000 Перейти
опять вопросы -)
Код
pos = this.BuyAtMarket();
this.RegisterOrder(pos);

отправляет как LIMIT (смотрю в терминал SmartTrade, демосчет)
заменил на
Код
var order = new Order
                    {
                        Portfolio = Portfolio,
                        Security = Security,
                        Type = OrderTypes.Market,
                        Volume = _volume,
                        Direction = OrderDirections.Buy,
                    };
base.RegisterOrder(order);

стало MARKET. инструмент фртс.

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



На бирже ртс нет сделок по рынку, она их не поддерживает.
Только лимит :)
Спасибо:

ktulhu2000

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


Alexander Mukhanchikov Перейти

На бирже ртс нет сделок по рынку, она их не поддерживает.
Только лимит :)


my god! в терминале и при отправке из #S есть тип заявки market и оно срабатывает!
т.е. надо делать "+" к LastTrade при покупке и "-" при продаже.
Автор топика
Спасибо:

Alexander

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


ktulhu2000 Перейти
т.е. надо делать "+" к LastTrade при покупке и "-" при продаже.


именно :)
Спасибо:

ktulhu2000

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


Помогите сделать живучего робота.
Взял SimpleSmaStrategy, переделанный под событийную модель.
Робот делает два шага и падает ничком. У меня нет учебников,
где написано как их собирать. Поэтому нужны конкретные
ответы, а не политкорректные )) что можно разными вариантами сделать.
нельзя - без долговременной практики.

Биржа (смартком тест) не регистрирует заявку и все -
незакрытые позиции стратегией не учитываются, position manager
считает неправильно, выходим за пределы Volume и привет.

Задача конечная - стратегия парного трейдинга.
Я хотел отработать вот эти ситуации нештатные.
Это можно сделать на примере черного ящика MarketQuotingStrategy
или плюнуть на него?

Если не использовать, то где взять примеры несферических стратегий? (

на всякий случай ниже раскадровка, версия 4.0.17

Код
    class SmaStrategy : Strategy
    {
        private readonly CandleToken _candleToken;
        private bool _isShortLessThenLong;

        public SmaStrategy(CandleToken candleToken, ExponentialMovingAverage longSma, ExponentialMovingAverage shortSma, TimeSpan timeFrame)
        {
            _candleToken = candleToken;

            LongSma = longSma;
            ShortSma = shortSma;
        }

        public ExponentialMovingAverage LongSma { get; private set; }
        public ExponentialMovingAverage ShortSma { get; private set; }

        protected override void OnStarting()
        {
            this
                .When(_candleToken.CandlesFinished())
                .Do(ProcessCandles);

            // запоминаем текущее положение относительно друг друга
            _isShortLessThenLong = ShortSma.LastValue < LongSma.LastValue;

            base.OnStarting();
        }

        private void ProcessCandles(IEnumerable<Candle> candles)
        {
            // если наша стратегия в процессе остановки
            if (ProcessState == ProcessStates.Stopping)
            {
                // отменяем активные заявки
                CancelActiveOrders();
                return;
            }

            // если робот запустил экспорт не с начала торгов, может быть несколько свечей
            foreach (var candle in candles)
            {
                // добавляем новую свечку
                LongSma.Process((DecimalIndicatorValue)candle.ClosePrice);
                ShortSma.Process((DecimalIndicatorValue)candle.ClosePrice);
            }

            // вычисляем новое положение относительно друг друга
            var isShortLessThenLong = ShortSma.LastValue < LongSma.LastValue;

            // если произошло пересечение
            if (_isShortLessThenLong != isShortLessThenLong)
            {
                // если короткая меньше чем длинная, то продажа, иначе, покупка.
                var direction = isShortLessThenLong ? OrderDirections.Sell : OrderDirections.Buy;

                // создаем заявку
                var order = this.CreateOrder(direction, Security.GetMarketPrice(direction), Volume);

                // регистрируем заявку (обычным способом - лимитированной заявкой)
                // RegisterOrder(order);

                // регистрируем заявку (через котирование)
                // var strategy = new MarketQuotingStrategy(order, new Unit(), new Unit());
                var strategy = new MarketQuotingStrategy(order, new Unit(), new Unit());
                ChildStrategies.Add(strategy);

                // запоминаем текущее положение относительно друг друга
                _isShortLessThenLong = isShortLessThenLong;
            }
        }
    }



Код
14:19:22.150 |            | REAL_ExSma      | Новая Buy сделка 54517197 по цене 163810 на 1 заявки 50757477.
14:22:07.413 |            | MQS             | Стратегия запущена.
14:22:07.416 |            | MQS             | Котирование на Sell объема 1.
14:22:07.416 |            | MQS             | Цена текущей NULL и лучшей 163755.
14:22:07.416 |            | MQS             | Лучший бид 163745 и лучший аск 163755.
14:22:07.416 |            | MQS             | Регистрация новой заявки на Sell с ценой 163755 и объемом 1.
14:22:07.418 |            | MQS             | Заявка 50757480 на Sell отправлена с ценой 163755 объемом 1.
14:22:07.486 | Warning    | MQS             | Заявка 50757480 в процессе регистрации.
14:22:07.603 |            | MQS             | Заявка 50757480 принята биржей.
14:22:07.631 |            | MQS             | Цена текущей 163755 и лучшей 163740.
14:22:07.631 |            | MQS             | Лучший бид 163720 и лучший аск 163740.
14:22:07.633 |            | MQS             | Котирование заявки 50757480 на Sell с ценой 163755 объемом 1.
14:22:07.643 |            | MQS             | Перекотирование зарегистрировано для заявки 50757481 на Sell с ценой 163740 объемом 1.
14:22:07.733 |            | MQS             | Цена текущей 163740 и лучшей 163755.
14:22:07.733 |            | MQS             | Лучший бид 163720 и лучший аск 163755.
14:22:07.736 |            | MQS             | Котирование заявки 50757481 на Sell с ценой 163740 объемом 1.
14:22:07.738 |            | MQS             | Перекотирование зарегистрировано для заявки 50757482 на Sell с ценой 163755 объемом 1.
14:22:07.811 |            | MQS             | Заявка 50757482 принята биржей.
14:22:07.963 |            | MQS             | Цена текущей 163755 и лучшей 163740.
14:22:07.963 |            | MQS             | Лучший бид 163730 и лучший аск 163740.
14:22:07.963 |            | MQS             | Котирование заявки 50757482 на Sell с ценой 163755 объемом 1.
14:22:07.968 |            | MQS             | Перекотирование зарегистрировано для заявки 50757483 на Sell с ценой 163740 объемом 1.
14:22:13.300 |            | MQS             | Цена текущей 163740 и лучшей 163805.
14:22:13.301 |            | MQS             | Лучший бид 163720 и лучший аск 163805.
14:22:13.301 |            | MQS             | Котирование заявки 50757483 на Sell с ценой 163740 объемом 1.
14:22:13.318 |            | MQS             | Перекотирование зарегистрировано для заявки 50757484 на Sell с ценой 163805 объемом 1.
14:22:13.321 | Error      | MQS             | Заявка 50757483 не была принята по причине System.InvalidOperationException: Перестановка заявки 50757483 не возможно в силу того что удовлетворена исходная заявка..
14:22:13.321 | Error      | MQS             | Заявка 50757484 не была принята по причине System.InvalidOperationException: Перестановка заявки 50757484 не возможно в силу того что удовлетворена исходная заявка..
14:22:13.321 | Error      | MQS             | Заявка 50757483 не принята биржей по причине 'Перестановка заявки 50757483 не возможно в силу того что удовлетворена исходная заявка.'.
14:22:13.323 | Warning    | MQS             | Заявка 50757483 устарела.
14:22:13.323 | Error      | MQS             | Заявка 50757484 не принята биржей по причине 'Перестановка заявки 50757484 не возможно в силу того что удовлетворена исходная заявка.'.
14:22:13.323 |            | MQS             | Цена текущей NULL и лучшей 163805.
14:22:13.323 |            | MQS             | Лучший бид 163720 и лучший аск 163805.
14:22:13.323 |            | MQS             | Регистрация новой заявки на Sell с ценой 163805 и объемом 1.
14:22:13.331 |            | MQS             | Заявка 50757485 на Sell отправлена с ценой 163805 объемом 1.
14:22:13.333 |            | REAL_ExSma      | Новая позиция -1.
14:22:13.334 |            | MQS             | Новая позиция -1.
14:22:13.335 |            | MQS             | Позиция изменилась на -1. Оставшийся объем 0.
14:22:13.336 |            | MQS             | Заканчиваем котирование.
14:22:13.336 |            | MQS             | Отмена заявки 50757480.
14:22:13.341 |            | MQS             | Стратегия останавливается.
14:22:13.342 |            | MQS             | Стратегия остановлена.
14:22:13.352 |            | REAL_ExSma      | Новая Sell сделка 54517392 по цене 163740 на 1 заявки 50757482.

Автор топика
Спасибо:

Alexander

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


Перечитал 3 раза, но вопросы не понял.
Можно как-то поподробнее и почётче их расписать?

Если вопрос почему падает - пишите где падает и с каким сообщением.
Спасибо:

ktulhu2000

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


Нет, он не падает в прямом смысле.
Вопрос "как написать робота?".

Дело в том, что, глядя на API, я могу написать программу типа "if then", которая будет совсем Франкенштейн.
Поэтому я взял красивую (с запуском MQS стратегии), но которая не выживает в диких условиях -)

Хотелось бы пример настоящей программы, где можно научиться и стратегию написать,
и обрабатывать все возникающие ситауции.

В идеале вы присылаете ненужную вам рабочую программу в качестве примера для изучения,
я смотрю как надо делать (отправлять заявки, реагировать на события) и не пишу глупые
и абстрактные вопросы от чайника -)
Автор топика
Спасибо:

Alexander

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


ktulhu2000 Перейти
Нет, он не падает в прямом смысле.
Вопрос "как написать робота?".

Дело в том, что, глядя на API, я могу написать программу типа "if then", которая будет совсем Франкенштейн.
Поэтому я взял красивую (с запуском MQS стратегии), но которая не выживает в диких условиях -)

Хотелось бы пример настоящей программы, где можно научиться и стратегию написать,
и обрабатывать все возникающие ситауции.

В идеале вы присылаете ненужную вам рабочую программу в качестве примера для изучения,
я смотрю как надо делать (отправлять заявки, реагировать на события) и не пишу глупые
и абстрактные вопросы от чайника -)


Посмотрите на примеры на codeplex в ветке dev, там некоторые уже переписаны под событийную модель.
К примеру - SampleHistoryTesting
Спасибо:

ktulhu2000

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


я же его, собственно, и выложил (
там используется стратегия MQS - черный ящик который сам считает, сам выставляет.
в итоге при ошибке выставления заявки работает неправильно,
что с ним делать непонятно.

я поэтому просил реальные примеры.
Автор топика
Спасибо:

Alexander

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


Спасибо:

ktulhu2000

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


спасибо.
а можно получить код встроенных стратегий? (MQS, StopLoss и тд)
Автор топика
Спасибо:

Alexander

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


ktulhu2000 Перейти
спасибо.
а можно получить код встроенных стратегий? (MQS, StopLoss и тд)


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

ktulhu2000

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


смысл в том, что в каком-нибудь MQS есть все для обучения -
и со стаканами работает, и позиции считает, и на сообщения об ошибках реагирует,
и заявки переставляет. В рабочем, правильно написанном виде, даже не
представляю как это увидеть, даже если я напишу сюда еще 100 вопросов.
Автор топика
Спасибо:

Alexander

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


ktulhu2000 Перейти
смысл в том, что в каком-нибудь MQS есть все для обучения -
и со стаканами работает, и позиции считает, и на сообщения об ошибках реагирует,
и заявки переставляет. В рабочем, правильно написанном виде, даже не
представляю как это увидеть, даже если я напишу сюда еще 100 вопросов.


Я отправлю котирование на почту, обычное. Всё остальное от него наследуется.
Но есть сомнения что вопросов станет меньше.
Спасибо:


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

loading
clippy