Тестирование 4.2.2.16. Вывод свечей на график.


Тестирование 4.2.2.16. Вывод свечей на график.
Atom
10.03.2014


Добрый вечер!
Разъясните, пожалуйста, следующую ситуацию.
Есть HistoryEmulationConnector.
Есть свечи из бд (источник финам).
Допустим такой набор


Свечи формируются следующим образом
Код

var time = DateTime.ParseExact(candle.DatetimeCandle, "dd.MM.yyyy HH:mm:ss", null);
return new TimeFrameCandle()
{
    OpenPrice = candle.Open,
    HighPrice = candle.High,
    LowPrice = candle.Low,
    ClosePrice = candle.Close,
    TimeFrame = timeFrameCandle,
    OpenTime = time,
    CloseTime = time + timeFrameCandle,
    TotalVolume = candle.Volume,
    Security = security,
    State = CandleStates.Finished
};


Если смотреть через дебаггер - то значения соответствуют тем, что выше.
1) Но вот при отрисовке свечей их OPEN и CLOSE значения изменяются. Изменяются они не намного, но все же мне пока не понятно по какому принципу это происходит.
2) И еще - все первые свечи (10:00:00) каждого дня при отрисовке имеют OPEN = HIGH = LOW = CLOSE, что, например, не соответствует данным, указанным выше. (Для первого набора, например, эти значения равны 97,8)

Буду благодарен, если кто-то объяснит почему так происходит.



Спасибо:


1 2  >
Bond

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


Добрый день!
К сведению, некоторые особенности формирования свечей из тиков:
- Свечи закрываются первой сделкой из следующей свечи. Так может возникнуть запаздывание события закрытия свечи.
- В первой свече может возникнуть неопределенность и, в принципе, по алгоритму может формироваться новая свеча только когда закроется первая. Но это нужно смотреть алгоритм.

Цитата:
Изменяются они не намного
Уточните конкретнее о чем речь.

Вам лучше по шагам просмотреть как парсится текстовый файл. Тогда сразу будет все понятно.
Спасибо:

romany4

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


Добрый день.
Цитата:
Уточните конкретнее о чем речь.

Есть уже готовые свечи в бд. Хранятся они в таком виде:

Данные из бд получаю и сохраняю в IEnumerable<Candle> candles
Если смотреть candles через дебаггер - то все нормально - данные те же самые.
Далее я их сохраняю в StorageRegistry, который в свою очередь используется в HistoryEmulationConnector
И вот если через дебаг смотреть уже метод DrawCandle то там будут такие значения


Т.е. получается так. Первая свеча формируется из OPEN. При этом OPEN = HIGH = LOW = CLOSE.
Для остальных свечей HIGH и LOW соответствуют первоначальным значениям (что и в бд). А вот OPEN и CLOSE не намного изменяются, и изменяются они не везде, но в большинстве случаев.
Спасибо:

Bond

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


Приведите полный код преобразований. Здесь явно какая-то ошибка.
Спасибо:

romany4

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


Так получаю свечи
Код

IEnumerable<Candle> candles = instanceCandle.GetHistoryCandle(_security, _fromDate.ToMysqlTimestampFormat(), _toDate.ToMysqlTimestampFormat(), timeFrameCandle);

если смотреть через дебаг - candles содержит тот же набор что и в бд.

теперь сохраняю в StorageRegistry, затем создаю HistoryEmulationConnector, и вывожу свечи

Вот собственно весь код.

И вот еще сам метод DrawCandle
Код
private void DrawCandle(Candle candle)
{
    this.GuiAsync(() => Chart.ProcessCandle((ChartCandleElement)Chart.Areas[0].Elements[0], candle));
}
Спасибо:

Bond

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


Вы берете текстовый файл с данными свечи. Потом его парсите и сохраняете в хранилище. Потом берете из хранилища сохраненные свечи(!). При этом используете генератор стакана! Затем создаете свечи из приходящих сделок (скорее всего случайные из стакана. Здесь появляются отличия.) [laugh]
Я даже не знаю как эту схему еще больше можно усложнить)
Берете свечи - используйте свечи. Торгуете тики и стаканы - используйте тики и стаканы.
От себя советую не использовать никакие генераторы - это бред.
Торгуйте свечи или тики. Нужны стаканы - берите ордер лог.
Данные качайте Гидрой и не забиыайте себе голову всякими ненужными преобразованиями.
Спасибо:

romany4

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


Спасибо за советы) Намудрил)
Тогда подскажите, правильно ли я понимаю, что могу исключить этот блок кода


Цитата:
скорее всего случайные из стакана. Здесь появляются отличия

Почему тогда эта случайность одна и та же? или тут речь о псевдослучайности?

PS Закомментил пока этот код у себя. Но результат тот же.
Спасибо:

romany4

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


Собственно в продолжение темы решил данные выкачать гидрой и проверить.
1) Для сравнения выкачиваем данные с финама вручную (тыц) (Сбербанк, с 01.10.2013 по 01.12.2013, 5мин. свечи) - это будет эталон, на который будем ориентироваться.
2) С помощью гидры также выкачиваем Сбер за аналогичный период. (только пятиминутные свечи, без сделок)
3) Протестируем данные гидры на SampleHistoryTesting (4.2.2.16)
4) Проверим данные, записанные в лог и сравним их с тем, что прислал финам
Вот что я вижу -
финам


лог с SampleHistoryTesting


Наблюдаются те же самые расхождения. Совпадают только HIGH и LOW цены.
Спасибо:

Bond

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


Сбросьте ВСЕ файлы, включая ваш пример и исторические данные в одном архиве на почту bond_algotrade@mail.ru
Найдем, где собака зарыта.
Спасибо:

devruss

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


Bond Перейти
От себя советую не использовать никакие генераторы - это бред.


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

Спасибо:

devruss

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


romany4 Перейти


Наблюдаются те же самые расхождения. Совпадают только HIGH и LOW цены.


У финама дырявые данные. НО бесплатные=))) Доверять можно только данным записанным вживую с рынка, и то, с определенным скептицизмом (latency, рассинхронизация на очень маленьких таймфреймах и т.д.)

Спасибо:
1 2  >

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

loading
clippy