S# 4.2.3.4 ошибки в работе historyemulator
Atom Ответить
17.05.2014


Тиковая история, импортированная из рейтерса, S# 4.2.3.4 - при бэктестинге вылазят вот такие вот баги: http://gyazo.com/1fb882dd0a0df11e31ac31d1eaf4c0dd
S# проводит сделки по несуществующим ценам. На версии 4.2.2.16 было все нормально

Также появилось ощущение, что на новой версии сильно возросло проскальзывание - проходит сигнал на вход/выход из позиции, а реальный execution проходит совсем по другим ценам



Спасибо:




44 Ответов
< 1 2 
Mikhail Sukhov

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


Михаил уже в чате сказал - на графике не сделки, а заявки.

Требуется переводчик с русского на русский.
Спасибо:

devruss

Фотография
Курсы
Дата: 17.07.2014
Ответить


Михаил Сухов Перейти
Михаил уже в чате сказал - на графике не сделки, а заявки.

Требуется переводчик с русского на русский.


Переводчик с русского на русский все-таки уверен, что ранее было написано, что на графике именно сделки.
Есть пруф: сверху заявки (выделена исполненная на графике заявка) - внизу реальный execution http://gyazo.com/a2e139b186c91958d62cd76842bb59a6
Автор топика
Спасибо:

Mikhail Sukhov

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


1. Какой ТФ?
2. Заявки как выставляются? Market Limit?
Спасибо:

devruss

Фотография
Курсы
Дата: 17.07.2014
Ответить


Михаил Сухов Перейти
1. Какой ТФ?
2. Заявки как выставляются? Market Limit?


1. ТФ: 1 мин, данные тиковые (пробовал на 1с тоже самое)
2. this.CreateOrder(Sides.Sell,(decimal)(candle.ClosePrice - 50), tradeVolume);
this.CreateOrder(Sides.Buy,(decimal)(candle.ClosePrice + 50), tradeVolume);
Автор топика
Спасибо:

Mikhail Sukhov

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


devruss Перейти

2. this.CreateOrder(Sides.Sell,(decimal)(candle.ClosePrice - 50), tradeVolume);
this.CreateOrder(Sides.Buy,(decimal)(candle.ClosePrice + 50), tradeVolume);


Тоесть заявки вне рынка? Скорее всего тут рассинхронизация в отрисовке. Тоесть заявка исполняется по цене, когда рынок дойдет и рисуется с запозданием.

Выведи в лог в обработчике NewMyTrades: время сделки, текущее время, цену сделки и цены в стакане (или последнюю тиковую сделку).
Спасибо:

devruss

Фотография
Курсы
Дата: 17.07.2014
Ответить


Михаил Сухов Перейти
devruss Перейти

2. this.CreateOrder(Sides.Sell,(decimal)(candle.ClosePrice - 50), tradeVolume);
this.CreateOrder(Sides.Buy,(decimal)(candle.ClosePrice + 50), tradeVolume);


Тоесть заявки вне рынка? Скорее всего тут рассинхронизация в отрисовке. Тоесть заявка исполняется по цене, когда рынок дойдет и рисуется с запозданием.

Выведи в лог в обработчике NewMyTrades: время сделки, текущее время, цену сделки и цены в стакане (или последнюю тиковую сделку).


- Естественно, лимитные заявки с далеким лимитом, эмулирующие заявки "по-рынку", будут вне рынка.
- Рассинхрона в отрисовке нет, я проверял. Там иногда по ТАКИМ ценам проходит, каких не было и не будет
- Пруф в виде лога сделаю чуть позже

Как ни странно, но уже на 10 мин свечках все ок, таких диких выбросов нет
Автор топика
Спасибо:

Mikhail Sukhov

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


devruss Перейти

- Естественно, лимитные заявки с далеким лимитом, эмулирующие заявки "по-рынку", будут вне рынка.


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

devruss Перейти

- Рассинхрона в отрисовке нет, я проверял. Там иногда по ТАКИМ ценам проходит, каких не было и не будет


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

devruss

Фотография
Курсы
Дата: 18.07.2014
Ответить


Михаил Сухов Перейти
[quote=devruss;31250]
Если ты хотел сделать маркет-заявки, то сделал ты их неправильно.


- Ок, расскажи мне тогда пожалуйста как правильно реализовывать заявки "по-рынку".

- Вот лог. Но вначале картинка: http://gyazo.com/15e7d87fe5f1e5fb11e9a459345dff6b
В данном примере робот умудрился купить по цене, которой не было еще 17 минут (!!!) - робот успел уже закрыть позицию раньше, чем рынок дошел до той цены, где был execution
12/18/2013 13:50:13
TEST - 12/18/2013 13:50:13 Actual execution: 3466 last price: 3466.25
TEST - 12/18/2013 13:50:13 Actual execution: 3468 last price: 3466.25
TEST - 12/18/2013 13:50:14 Actual execution: 3466 last price: 3466.25

Заявка была одна - покупка 4 контрактов "по рынку"
18.12.2013 13:50:13 4 3516.25 Buy Limit Done 18.12.2013 13:50:14

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

Mikhail Sukhov

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


1. Код вывода в лог.
2. Почему только одна метка времени?
3. В лог добавь направление заявки.
Спасибо:

devruss

Фотография
Курсы
Дата: 18.07.2014
Ответить


devruss Перейти
Михаил Сухов Перейти
[quote=devruss;31250]
Если ты хотел сделать маркет-заявки, то сделал ты их неправильно.

- Ок, расскажи мне тогда пожалуйста как правильно реализовывать заявки "по-рынку".


Код:
Код

this.WhenNewMyTrades()
                .Do(TradeHandler)
                .Apply();



Код

private void TradeHandler(IEnumerable<MyTrade> trades)
        {
            Debug.WriteLine("TEST - {0} {1} Actual execution: {2} last price: {3} {4} ", trades.Last().Trade.Time, trades.Last().Order.Direction, trades.Last().Trade.Price, lastPrice, lastPriceTime);
}


Последняя цена и время запонимаются в обработчике индикаторов внутри стратегии.

12/18/2013 13:50:13
TEST - 12/18/2013 13:50:13 Buy Actual execution: 3466.25 last price: 3466.25 12/18/2013 13:50:13
TEST - 12/18/2013 13:50:13 Buy Actual execution: 3467.75 last price: 3466.25 12/18/2013 13:50:13
TEST - 12/18/2013 13:50:14 Buy Actual execution: 3466.00 last price: 3466.25 12/18/2013 13:50:13
Avg Entry price 3,467 on 4 volume

TEST - 12/18/2013 13:50:43 Sell Actual execution: 3464.25 last price: 3465.75 12/18/2013 13:50:43
TEST - 12/18/2013 13:50:43 Sell Actual execution: 3464.00 last price: 3465.75 12/18/2013 13:50:43
TEST - 12/18/2013 13:50:43 Sell Actual execution: 3463.50 last price: 3465.75 12/18/2013 13:50:43
Avg Closing price 3,464 on -4 volume

http://gyazo.com/42d05b7097693c9dfb61eac2f8a88fdf
Автор топика
Спасибо:

Mikhail Sukhov

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


devruss Перейти

Код

private void TradeHandler(IEnumerable<MyTrade> trades)
        {
            Debug.WriteLine("TEST - {0} {1} Actual execution: {2} last price: {3} {4} ", trades.Last().Trade.Time, trades.Last().Order.Direction, trades.Last().Trade.Price, lastPrice, lastPriceTime);
}



Код

private void TradeHandler(IEnumerable<MyTrade> trades)
{
   Debug.WriteLine("TEST - {0} {1} Actual execution: {2} last price: {3} {4} ", trades.Last().Trade.Time, trades.Last().Order.Direction, trades.Last().Trade.Price, Security.LastTrade, CurrentTime);
}
Спасибо:

devruss

Фотография
Курсы
Дата: 18.07.2014
Ответить


Все равно execution просто жуть, причеи стабильно хреново исполняет по ценам вне рынка...

Код

TEST - 12/18/2013 13:50:13 Buy Actual execution: 3466.25 last price: 12/18/2013 13:50:13 0 3466.25 1 12/18/2013 03:50:13 
TEST - 12/18/2013 13:50:13 Buy Actual execution: 3467.75 last price: 12/18/2013 13:50:13 0 3466.25 1 12/18/2013 03:50:13 
TEST - 12/18/2013 13:50:14 Buy Actual execution: 3466.25 last price: 12/18/2013 13:50:13 0 3466.25 1 12/18/2013 03:50:14 

TEST - 12/18/2013 13:50:43 Sell Actual execution: 3464.25 last price: 12/18/2013 13:50:43 0 3465.75 3 12/18/2013 03:50:43 
TEST - 12/18/2013 13:50:43 Sell Actual execution: 3464.00 last price: 12/18/2013 13:50:43 0 3465.75 3 12/18/2013 03:50:43 
TEST - 12/18/2013 13:50:43 Sell Actual execution: 3463.50 last price: 12/18/2013 13:50:43 0 3465.75 3 12/18/2013 03:50:43 


5 бэктестов - цены не меняются. Но таких цен нет ни в прошлом, ни в будущем в пределах 30 минут...
Автор топика
Спасибо:

Mikhail Sukhov

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


Это при тестировании на свечках? Если включить тестирование на тиках?
Спасибо:

devruss

Фотография
Курсы
Дата: 18.07.2014
Ответить


Михаил Сухов Перейти
Это при тестировании на свечках? Если включить тестирование на тиках?


все тоже самое. вот еще пример (уже на тиках):

Код

TEST - 12/19/2013 12:38:22 Sell Actual execution: 3493.00 last price: 12/19/2013 12:38:22 0 3493.50 1 12/19/2013 02:38:22 
TEST - 12/19/2013 12:38:22 Sell Actual execution: 3492.50 last price: 12/19/2013 12:38:22 0 3493.50 1 12/19/2013 02:38:22 
TEST - 12/19/2013 12:38:22 Sell Actual execution: 3492.25 last price: 12/19/2013 12:38:22 0 3493.50 1 12/19/2013 02:38:22 
TEST - 12/19/2013 12:38:22 Sell Actual execution: 3492.00 last price: 12/19/2013 12:38:22 0 3493.50 1 12/19/2013 02:38:22 
Автор топика
Спасибо:

devruss

Фотография
Курсы
Дата: 24.09.2014
Ответить


Версия 4.2.25, все тот же адский расколбас с трейдами абсолютно вне рынка
На этот раз ETF - XLF, из 1сек данных S# делает минутные свечки, объемы там огромные, так что с ликвидностью все ок.

http://gyazo.com/75cc08306defa2d72e50516c97f68b3d

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

Mikhail Sukhov

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


Как воспроизвести?
Спасибо:

devruss

Фотография
Курсы
Дата: 24.09.2014
Ответить


данные тебе выслал. Воспроизводимость: импортни данные в Гидру и запусти SampleHistoryTesting, либо любую стратегию и посмотри где реально проходит execution.
все как 2 месяца назад.

Какая-то засада с импортом csv... R ту же самую стратегию обрабатывает ок, так что данные точно не битые
Автор топика
Спасибо:

devruss

Фотография
Курсы
Дата: 27.09.2014
Ответить


Пока делаю пример, решил прогнать на данных IQfeed (с трудом скормил нужный тип биржи, через копирование Nyse и изменения имени - про это соседняя тема):
- данные 1 мин
- тестирование тоже на 1 мин

http://gyazo.com/1f1ebcf3dcaa352cf10844053faf34fc

Проблема локализовалась:
Если запускать тест на большом объеме, то при исполнении заявки S# смотрит на текущий объем свечи, исполняет объем свечи по цене закрытия, а вот оставшийся (объем заявки - объем свечи) он исполняет по какой-то рандомной цене...

Понятно откуда взялась проблема, вроде как по какой цене исполнить очень большой объем - но метод решения путем исполнения вне рынка - неправильный. На мой взгляд нужно сделать какой-нибудь режим тестирования, при котором будет считаться мгновенное исполнение всего объема по цене закрытия текущей или открытия следующей свечи (если нет стаканов). MatchOnTouch = true проблему не решает, картинка остается той же.

Update: Уменьшил объем до мизерного - практически всё исполнение вне рынка пропало, кроме нескольких мест

Мне кажется, что при тестировании на свечках, сделать исполнение по цене закрытия или открытия следующей - это самый правильный вариант. На сегодняшний день так себя ведут большинсто квантовых пакетов (quantstrat в R) например. Данный подход решил бы все проблемы. А проскальзывания надо либо на тиках + стаканы смотреть, либо просто закладывать дельту.
Автор топика
Спасибо:

Mikhail Sukhov

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


На SampleHistory теория воспроизводится? Какие изменения нужно внести?
Спасибо:
< 1 2 

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

loading
clippy