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

Возможная ошибка S#
Atom
6/21/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. В каком событии и как отлавливать пришедшую информацию?

Tags:


Thanks:


< 1 2 
Mikhail Sukhov

Avatar
Date: 6/25/2013
Reply


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

Thanks:

ttt

Avatar
Date: 6/25/2013
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 6/25/2013
Reply


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

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

Thanks:

ttt

Avatar
Date: 6/25/2013
Reply


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

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

Thanks:

Mikhail Sukhov

Avatar
Date: 6/25/2013
Reply


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

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

Thanks:

ttt

Avatar
Date: 6/25/2013
Reply


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

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

Thanks:

Mikhail Sukhov

Avatar
Date: 6/26/2013
Reply


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

Thanks:

ttt

Avatar
Date: 6/26/2013
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 6/26/2013
Reply


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

Thanks:

ttt

Avatar
Date: 6/28/2013
Reply


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

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

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

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

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

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy