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

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


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


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

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)

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



Thanks:


1 2  >
Bond

Avatar
Date: 3/11/2014
Reply


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

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

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

romany4

Avatar
Date: 3/14/2014
Reply


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

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

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


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

Bond

Avatar
Date: 3/14/2014
Reply


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

romany4

Avatar
Date: 3/14/2014
Reply


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

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

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

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

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

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

Bond

Avatar
Date: 3/14/2014
Reply


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

romany4

Avatar
Date: 3/14/2014
Reply


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


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

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

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

romany4

Avatar
Date: 3/15/2014
Reply


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


лог с SampleHistoryTesting


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

Bond

Avatar
Date: 3/15/2014
Reply


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

devruss

Avatar
Date: 3/15/2014
Reply


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


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

Thanks:

devruss

Avatar
Date: 3/15/2014
Reply


romany4 Go to


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


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

Thanks:
1 2  >

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

loading
clippy