Возможная ошибка S#
Atom
21.06.2013


ttt

Фотография
Добрый день.

Пишу робота на S#.
Подписан на событие формирования новой свечи. Timeframe 1 минута.
В момент прихода новой свечи цена close последней свечи отличается от close той же свечи,
полученной с Finam'a на 1-7 пунктов (контракт Si-9.13). Если отключаюсь и
заново подключаюсь, то цены закрытия тех же самых свечей в точности совпадают с ценами
закрытия по данным с Finam'а.
Цены open, high, low также идут с ошибками:
[Количество несовпадений (на примере одного дня)]:
open: 0
high: 17 несовпадений
low: 23 несовпадения
close: 188 несовпадений
Всего 532 бара.
Во время вечерней сессии данные по свечам приходят корректные.

Общение с техподдержкой SmartCOM позволило выделить 2 возможные причины данной проблемы:
1. Либо происходят потери при получении тиковых данных от сервера, на основе которых S# формирует свечи.
2. Либо платформа S# неверно формирует свечи по тем данным, по которым получает данные от серверов.

Учитывая, что после перезапуска приложения, приходят корректные данные о свечах, можно предположить, что более вероятен второй вариант. Чтобы проверить, выполняю подписку на исторические свечи каждый раз после прихода события формирования новой свечи. В обработчике события NewHistoryCandles отслеживаю повторно полученную информацию о серии. Результат: данные не меняются.

Вопросы:
1) Правильно ли я понимаю, что внутри метода, реализующего формирование новой свечи, вызов GetBars осуществляется всего один раз при самом первом запуске приложения, а затем, S# не запрашивает каждый раз сервер о параметрах сформировавшейся свечи, а сам каким-то образом формирует свечи?
2) Как можно вызвать GetBars (или метод, который запросит информацию от сервера посредством GetBars)?
3) В каком событии и как отлавливать пришедшую информацию?

Теги:


Спасибо:


< 1 2 
Mikhail Sukhov

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


Мое сообщение проигнорировалось. Это ключевое сообщение.
Спасибо:

ttt

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


Так что делать-то? Как получить корректные свечи?
Спасибо:

Mikhail Sukhov

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


ttt Перейти
Так что делать-то? Как получить корректные свечи?


Вначале надо понять причину. То, что в SampleCandles свечки не страятся - факт. Другой вопрос, делаете ли вы проверку именно этим примером, или что-то свое испольуете... Вообщем поможет информация от вас. Вопрос номер 1 - вы тестируете SampleSmartCandles? Есть ли какие то модификации?
Спасибо:

ttt

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


Проверку делаю используя пример SampleSmartCandles.
Модификаций, на мой взгляд, нет.
Если быть совсем точным, то сначала, используя SampleSmartCandles, сделал свое приложение, которое получает исторические свечи.
Вывод свечей выполняю в текстовой форме на экран.
В real-time замечаю, что свечи идут с ошибками. Выключаю свое приложение. Запускаю SampleSmartCandles. Выбираю режим "Real-time". Сверяю свечи с Finam'овскими. Результат тот же: свечи отличаются на несколько пунктов.

Схема работы и код приложения в части работы со свечками приведены выше в этой теме в 4 посте от начала.
Спасибо:

Mikhail Sukhov

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


ttt Перейти
Проверку делаю используя пример SampleSmartCandles.


Я не совсем понял, а как идет сверка? В текстовый формат пример не выводит данные.
Спасибо:

ttt

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


На графике со свечками увеличиваю масштаб, рядом открываю текстовый файл с данными с Finam'а. И сравниваю. Можно сказать - в ручном режиме, отдельно каждую свечу.

В моем приложении процесс сравнения параметров свечей более автоматизирован: информацию о свечках вывожу на экран, затем копирую в текстовый файл. Поскольку механизм получения свечей реализован тот же, что и в SampleSmartCandles, то и результаты совпадают: если у меня в приложении свечки идут корректные, то и при тестах в SampleSmartCandles свечи тоже идут корректные. В случаях же, когда у меня в приложении данные отличаются, то и SampleSmartCandles тоже показывает свечи, отличающиеся от Finam'овских.
Спасибо:

Mikhail Sukhov

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


Может быть строить свечки из тиков?
Спасибо:

ttt

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


Зачем связываться с тиками, когда есть GetBars?
Временная задержка на 1-2 секунды для получения информации о сформировавшейся свече не играет принципиального значения. Важно получить корректные параметры свечи. При использовании тиков придется отслеживать много технических моментов, и при этом никогда не будет 100%-ой уверенности, что конкретная свеча построилась правильно.
Спасибо:

Mikhail Sukhov

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


Постучитесь в скайп, попробую понять где проблема.
Спасибо:

ttt

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


Михаил,
следующие варианты решения проблемы не сработали:

1)Использование new CandleManager(new TradeCandleBuilderSource(_trader)).
Результат:
события NewHistoricalCandles не приходят совсем.

2) Реализовал следующий механизм: после прихода новой свечи, фиксирую параметры свечи (OHLC).
Выставляю задержку 45(!) секунд.
Затем выполняю:
Код
_trader.RegisterHistoryCandles(_Si, SmartTimeFrames.Minute1, DateTime.Now, 10, SmartHistoryDirections.Backward);

Получаю данные через 45 секунд. Фиксирую параметры свечи(OHLC).

Имеем три разных свечи:
1-я: эталон, с Finam'а
2-я: свеча, зафиксированная сразу как только пришло событие формирования новой свечи
3-я: свеча, полученная после задержки

Результат:
во-первых, 2-я и 3-я свеча отличаются(!!!) между собой
во-вторых, ни 2-я, ни 3-я свеча не совпадают (!!!) с эталоном.
в-третьих, после перегрузки приложения, исторические свечи в точности совпадают с эталонными, то есть свечи, которые только что отличались от эталона, теперь полностью с ним совпадают.
Спасибо:
< 1 2 

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

loading
clippy