← Назад

Гидра формирует кривые свечки?

или я чего-то не понимаю...

15 минутные: 15min лишняя свечка в конце дня.

часовые:

час

лишняя в конце дня, плюс свечка с окончанием в 18.45 отображается с временем окончания 18 и OHLC одинаковые...

Комментарии (27)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Moadip
Moadip

Инструмент? Источник?

Если хотите получить ответ на вопрос, давайте максимум информации в понятной форме. А не две картинки на которых вывод свечек реализован в "оригинальном" формате, в который сразу и не въедешь.

profts
profts Автор

Фьючерс на индекс РТС, источник Финам. Собственно в гидре ничего не менял, все настройки по-умолчанию. Выбрал инструмент, период и все виды стандартных свечек.
P.S. Гидра из архива stocksharp-23281, т.е. одна из последних версий 4.1.9.

На скринах в первом посте вывод информации о свечках по событию .WhenCandlesFinished().

profts
profts Автор

Неужели никто не сталкивался?

Хотел вручную все это исправить, т.е. уже в коде объединять две последние свечки за день в одну. Объединить получилось... Но индикаторы не считаются, если я в них отправляю свою "public Candle Candle_15min;". Вообщем, пытаясь решить одну проблему, натыкаюсь на вторую...

Mikhail Sukhov
Mikhail Sukhov

profts:

Вы бы лучше объяснили, как вы все это проверяете. Например, посмотрели что Гидра скачала с Финама. Что она построила. Потратьте час времени на анализ, и тогда наш ответ будет детальнее.

profts
profts Автор

Хмм... Не совсем понял, что тут еще возможно проанализировать ))) я уже два дня сижу с этим )))
ну хорошо, постараюсь по порядку...

Включаю гидру, выбираю источник данных Финам, добавляю нужные инструменты, ставлю ON для формирования свечек всех доступных по умолчанию таймфреймов.

Настройки Гидры Настройки источника Настройки инструмента в настройках инструмента, кстати, так и не понял, какой шаг цены правильнее указывать, т.к. данные закачиваются с 2008-го .

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

Закачиваются тиковые данные вместе с файлами готовых свечек: папка с готовыми данными

Далее... Как проверить эти свечки... вижу только один способ. по событию окончания свечек вывести их на график или в файл. различий в графике или файле не вижу, графиком никогда не пользовался, поэтому вывожу тупо в файл. За основу взял SampleHistoryTesting, оставив форму как есть, изменил инструмент, таймфрейм на 15 мин, в стратегии добавил правило и вывод в аксесс...


var security = new Security
				{
                    Id = "SPFB.RTS@RTS", // по идентификатору инструмента будет искаться папка с историческими маркет данными
                    Code = "RTS",
                    Name = "RTS",
                    MinStepSize = 10,
                    MinStepPrice = 3,
                    ExchangeBoard = ExchangeBoard.Forts,

                    MinPrice = 10,
                    MaxPrice = 1000000,
				};

var series_1 = new CandleSeries(typeof(TimeFrameCandle), security, timeFrame_1);



series_1
                .WhenCandlesFinished()
                .Do(ProcessCandle_1)
                .Apply(this);
private void ProcessCandle_1(Candle candle)
        {
 string vsql = string.Format("insert into 1 (data, vremya, candle_Open, candle_High, candle_Low, candle_Close, candle_Volume) Values ({0}, {1}, {2}, {3}, {4}, {5}, {6})", (candle.CloseTime.ToString("dd.MM")), (candle.CloseTime.ToString("HH.mmss")),
                 (candle.OpenPrice), (candle.HighPrice), (candle.LowPrice), (candle.ClosePrice), (candle.TotalVolume));
 OleDbCommand vcom = new OleDbCommand(vsql, vcon);
                    vcom.ExecuteNonQuery();
}


На выходе имеем: 15 min т.е. 1 лишняя свечка в конце каждого дня. причем если просуммировать объемы двух свечек с временем закрытия 23.45 и 10 , то получится реальный объем последней свечи.

1 час Для часовых все еще намного сложнее )))

Mikhail Sukhov
Mikhail Sukhov

profts: Хмм... Не совсем понял, что тут еще возможно проанализировать ))) я уже два дня сижу с этим )))

Давайте начнем с того, что вы скажите, где именно рисуются неправильно свечки. В гидре или вашей программе.

profts
profts Автор

а как посмотреть как рисуются в гидре свечки на основе сформированных этой же гидрой свечек? в гидре как понял можно только посмотреть формирование свечек из тиков. с этим все нормально.
впрочем как и с формированием свечек из тиковых данных в самой программе...

Свечки из тиков в гидре

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


public Candle Candle_15min;
...

Candle_15min = new TimeFrameCandle()

            {
                ClosePrice = 0,
                OpenPrice = 0,
                HighPrice = 0,
                LowPrice = 0,
            };
...


 private void ProcessCandle_1(Candle candle)
        {
          Candle_15min.CloseTime = candle.CloseTime;
          Candle_15min.OpenPrice = candle.OpenPrice;
          Candle_15min.HighPrice = candle.HighPrice;
          Candle_15min.LowPrice = candle.LowPrice;
          Candle_15min.ClosePrice = candle.ClosePrice;
          Candle_15min.TotalVolume = candle.TotalVolume;
          
      
            //Добавление новой свечки в индикаторы
            Ind1.Process(Candle_15min);
           
}

Буду тогда исправлять свечки вручную.

Mikhail Sukhov
Mikhail Sukhov

profts: а как посмотреть как рисуются в гидре свечки на основе сформированных этой же гидрой свечек?

Это описано в документации.

Я ваш вопрос тогда первоначально не понимаю. Где неправильно работает? Вы написали на форуме Гидра что она неправильно формирует свечки. Как вы это проверяете?

profts
profts Автор

Михаил, при всем уважении... стокшарпом пользуюсь уже 1,5 года. и к документации обращаюсь в первую очередь, если что-то непонятно, во-вторую - ищу по форуму все похожие темы...

в документации нет такого. есть только формирование и отображение свечек из тиковых данных, как и написал выше. так вот... если просто в гидре посмотреть формирование свечек из тиковых данных, то все ОК. также как и с формированием свечек из этих же тиковых данный в программе. с этим никогда не было проблем. но при старте гидры, она криво пишет свечки в файл типа candles_TimeFrameCandle_00-15-00.bin. а как посмотреть правильно или неправильно сформированы свечки в этом файле? только запустив тестер на основе свечек... что я и делаю.

Moadip
Moadip

Я правильно понял что суть проблемы в том, что готовые свечки скачанные с финама кривые?

profts
profts Автор

"Я правильно понял что суть проблемы в том, что готовые свечки скачанные с финама кривые?"

Именно!!!! )))) я правда думал, что это гидра их формирует на основе тиковых данных, скачанных с финама ) поэтому изначально не так выразился )

Moadip
Moadip

Ну это уже значительный прогресс. Еще постов 10 и думаю докопаемся до сути.🙂

я правда думал, что это гидра их формирует на основе тиковых данных, скачанных с финама ) поэтому изначально не так выразился ) Не, скачиваются готовые свечки с финама.

А теперь самый главный вопрос. Откуда уверенность что их гидра криво сохраняет? Может они с финама такие приходят?

Поэтому, скачиваем готовые свечки с финама, выгружаем их в txt файл. Скачиваем вручную свечки с сайта финама. Или берем txt файлы из **папка_куда_сохраняются_данные\TemporaryFiles**, что тоже самое, т.к. гидра скачивает их с финама.

Открываем эти файлы и сравниваем/проверяем проблемные места.

profts
profts Автор

Как сделать это "скачиваем готовые свечки с финама, выгружаем их в txt файл. " - не совсем понимаю )
т.е. из bin файла можно как-то выгрузить в txt?

в TemporaryFiles посмотрел - свечки нормальные.

т.е. получается, что как раз гидра из txt криво записывает в bin файл...

тут посетила мысль )) может и в bin файл они сохраняются нормально. а глюк может возникать из-за параметра ExchangeBoard = ExchangeBoard.Forts... и EmulationTrader уже криво обрабатывает их.

Moadip
Moadip

  1. Скачал с финама 5 минутки ри.
  2. Открыл окно свечки.
  3. Выставил путь к данным.
  4. Выставил такой же ТФ.
  5. Выбрал инструмент.
  6. Нашел эти свечки(кнопка с иконкой лупы).
  7. Нажал кнопку с иконкой дискеты и выбрал тип сохраняемых данных txt.

Вообще то это все есть в доке.

profts
profts Автор

Даже в голову не пришло, что если в графе "Построить из:" выбрать "не строить", то гидра отобразит готовые свечки ))) ну да ладно.

сравнил. Свечки совпадают. вот как они отображаются в гидре: Финамовские свечки в Гидре

а вот какие свечки приходят в программе по событию .WhenCandlesFinished(): 23.15 -23.30 23.30-23.45 далее идет непонятная свечка : 23.45 еще одна такая же, но со временем 10.00: 10.00 и далее уже свечка следующего дня: 10.00-10.15

profts
profts Автор

т.е. единственная цена первой кривой свечки совпадает с Open свечки из финама, а HLC второй кривой совпадают с HLC свечки из финама. Т.е. каким-то образом последняя свечка из финама 23.45-23.50 разбивается на две кривых.

собственно возникает вопрос... неужели только у меня такая проблема? ))) кто-нибудь вообще тестирует на основе готовых финамовских свечек?

profts
profts Автор

Резюмируя все вышесказанное:

гидра финамовские готовые свечки отображает верно:


2013-03-22 23:00:00;142400.0000000;142420.0000000;142190.0000000;142330.0000000;26677
2013-03-25 10:00:00;142380.0000000;144330.0000000;142380.0000000;144320.0000000;144849
2013-03-25 11:00:00;144320.0000000;144540.0000000;144060.0000000;144170.0000000;103285
2013-03-25 12:00:00;144170.0000000;144270.0000000;144030.0000000;144140.0000000;60550
2013-03-25 13:00:00;144150.0000000;144350.0000000;144110.0000000;144180.0000000;50046
2013-03-25 14:00:00;144200.0000000;144250.0000000;144070.0000000;144170.0000000;37167
2013-03-25 15:00:00;144160.0000000;144260.0000000;144140.0000000;144210.0000000;38820
2013-03-25 16:00:00;144220.0000000;144280.0000000;143480.0000000;143560.0000000;128877
2013-03-25 17:00:00;143560.0000000;143600.0000000;142480.0000000;142860.0000000;204686
2013-03-25 18:00:00;142850.0000000;142950.0000000;140870.0000000;140990.0000000;232113
2013-03-25 19:00:00;140950.0000000;140950.0000000;140050.0000000;140610.0000000;148234
2013-03-25 20:00:00;140610.0000000;140750.0000000;140220.0000000;140240.0000000;63169
2013-03-25 21:00:00;140260.0000000;140660.0000000;140140.0000000;140600.0000000;71381
2013-03-25 22:00:00;140620.0000000;140750.0000000;140510.0000000;140620.0000000;36455
2013-03-25 23:00:00;140620.0000000;140720.0000000;140350.0000000;140670.0000000;35747
2013-03-26 10:00:00;140740.0000000;141190.0000000;140460.0000000;140920.0000000;127852

по событию .WhenCandlesFinished() получаю свечки в таком виде:


           10:00:00;144330.0000000;144330.0000000;142380.0000000;144320.000000086911
2013/03/25 11:00:00;144320.0000000;144540.0000000;144060.0000000;144170.0000000103285
2013/03/25 12:00:00;144170.0000000;144270.0000000;144030.0000000;144140.000000060550
2013/03/25 13:00:00;144150.0000000;144350.0000000;144110.0000000;144180.000000050046
2013/03/25 14:00:00;144200.0000000;144250.0000000;144070.0000000;144170.000000037167
2013/03/25 15:00:00;144160.0000000;144260.0000000;144140.0000000;144210.000000038820
2013/03/25 16:00:00;144220.0000000;144280.0000000;143480.0000000;143560.0000000128877
2013/03/25 17:00:00;143560.0000000;143600.0000000;142480.0000000;142860.0000000204686
2013/03/25 18:00:00;142850.0000000;142850.0000000;142850.0000000;142850.000000092844
2013/03/25 19:00:00;142950.0000000;142950.0000000;140050.0000000;140610.0000000287503
2013/03/25 20:00:00;140610.0000000;140750.0000000;140220.0000000;140240.000000063169
2013/03/25 21:00:00;140260.0000000;140660.0000000;140140.0000000;140600.000000071381
2013/03/25 22:00:00;140620.0000000;140750.0000000;140510.0000000;140620.000000036455
2013/03/25 23:00:00;140620.0000000;140620.0000000;140620.0000000;140620.000000014298
2013/03/26 10:00:00;140720.0000000;140720.0000000;140350.0000000;140670.000000021449
2013/03/26 10:00:00;140740.0000000;141190.0000000;140460.0000000;140920.0000000127852


Как это можно исправить?
Может кто подскажет другой способ тестирования, используя готовые свечки?

profts
profts Автор

Так никто и не хочет помогать (( Дело в параметре WorkingTime исходя из которого series и формирует свечки.
для часовых свечек вручную задал:


series_1.WorkingTime.Times.ElementAt(1).Max = TimeSpan.FromHours(19);

лишняя свечка перед вечерним клирингом сразу пропала и свечка 18.00 - 19.00 стала получаться правильно...

теперь не могу понять какое значение выставить в :


series_1.WorkingTime.Times.ElementAt(2).Max = ???????

перепробовал кучу вариантов, все-равно последняя вечерняя свечка разбивается на 2.

profts
profts Автор

откопал на форуме тему с проблемой получения последней свечки за день: последняя свечка

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


 series_1.From = new DateTime(2001, 12, 3, 10, 0, 0);
                series_1.To = new DateTime(2015, 12, 3, 23, 50, 0);
                series_1.WorkingTime.Times[0].Min = new TimeSpan(10, 00, 0);
                series_1.WorkingTime.Times[0].Max = new TimeSpan(23, 50, 0);


2013/03/25 22:00:00.001|       21:00:00;140260.0000000;140660.0000000;140140.0000000;140600.000000071381
2013/03/25 23:00:00.001|       22:00:00;140620.0000000;140750.0000000;140510.0000000;140620.000000036455
2013/03/25 23:01:00.000|       23:00:00;140620.0000000;140620.0000000;140620.0000000;140620.000000014298
2013/03/26 10:00:00.001|       10:00:00;140720.0000000;140720.0000000;140350.0000000;140670.000000021449
2013/03/26 11:00:00.001|       10:00:00;140740.0000000;141190.0000000;140460.0000000;140920.0000000127852
2013/03/26 12:00:00.001|       11:00:00;140910.0000000;141580.0000000;140810.0000000;141410.0000000117363

profts
profts Автор

Как сделать, чтобы для последней свечки событие .WhenCandlesFinished() поднималось не во время начала новой свечки на след день, а по завершении сессии?

esper
esper
  1. При выводе данных вы используете CloseTime, а в Гидре используется OpenTime.
  2. Каким образом вы строите свечки у себя? По сделкам или загружаете именно свечки из хранилища?
  3. Как сделать, чтобы для последней свечки событие .WhenCandlesFinished() поднималось не во время начала новой свечки на след день, а по завершении сессии? Ссылку на подобное обсуждение вы сами привели. Только стоит подумать, имеет ли это смысл, т.к. после завершения последней свечки вы все-равно уже ничего не сделаете.

  4. Не думаю, что WorkingTime причина проблем. Проверил у себя, свечки точь в точь совпадают с теми, что вы выгрузили из Гидры. У меня используется подобный подход.
profts
profts Автор

Видел, что вы читаете тему и надеялся, что ответите )

  1. При выводе тоже пишу OpenTime:

series_1
                .WhenCandlesFinished()
                .Do(ProcessCandle_1)
                .Apply(this);
...
private void ProcessCandle_1(Candle candle)
        {
            var candle_string = candle.OpenTime.TimeOfDay.ToString();
                candle_string += ";";
                candle_string += candle.OpenPrice.ToString();
                candle_string += ";";
                candle_string += candle.HighPrice.ToString();
                candle_string += ";";
                candle_string += candle.LowPrice.ToString();
                candle_string += ";";
                candle_string += candle.ClosePrice.ToString();
                candle_string += candle.TotalVolume.ToString();
                this.AddInfoLog(candle_string);
}

получаю свечки такого вида:


2013/03/25 23:00:00.001|       22:00:00;140620.0000000;140750.0000000;140510.0000000;140620.000000036455
2013/03/26 10:00:00.000|       23:00:00;140620.0000000;140620.0000000;140620.0000000;140620.000000014298
2013/03/26 10:00:00.001|       10:00:00;140720.0000000;140720.0000000;140350.0000000;140670.000000021449
2013/03/26 11:00:00.001|       10:00:00;140740.0000000;141190.0000000;140460.0000000;140920.0000000127852
2013/03/26 12:00:00.001|       11:00:00;140910.0000000;141580.0000000;140810.0000000;141410.0000000117363
2013/03/26 13:00:00.001|       12:00:00;141410.0000000;141440.0000000;140350.0000000;141100.0000000189043

т.е. в начале каждой последующей свечки срабатывает событие .WhenCandlesFinished(). а для последней свечки оно срабатывает дважды - в начале торговой сессии, т.е. в 10.00 и когда начинает формироваться новая свечка, т.е. в 10.00.00.001.

2.Повторюсь. в данном случае я полностью использую шаблон SampleHistoryTesting. ну и естественно выставил UseCandleTimeFrame. т.е., насколько я понимаю, подгружаются уже готовые финамовские свечки из хранилища. т.е. ошибка возникает из-за WorkingTime. 3. да ссылку то привел ... )))) но моих познаний в программировании не хватило, чтобы осилить умную фразу Александра Муханчикова про какое-то переопределение и т.д. ))) После завершения свечки мне ничего делать и не нужно. Это просто тестер, который изначально считает необходимые параметры для нейронки на основе свечек и записывает их а базу, потом нейронка обучается по этой базе и затем уже на полученных знаниях я снова прогоняю тест уже с рисованием эквити и т.д. Т.е. нужны просто правильные свечки, чтобы все индикаторы и параметры рассчитывались корректно... 4. В вашей ссылке свечки строятся из тиков, с этим никогда не было проблем )

esper
esper

Выложите bin файлы часовиков для 25 и 26 числа.

profts
profts Автор

Сделал еще проще... Чтобы показать в чем проблема... Запускаю SampleHistoryTesting из 4.1.9. Все оставляю как есть, кроме: меняю таймфрейм на:


var timeFrame = TimeSpan.FromMinutes(60);

и в SmaStrategy.cs комментирую все, кроме строки:


this.AddInfoLog("Новая свеча {0}: {1};{2};{3};{4}; объем {5}".Put(candle.OpenTime, candle.OpenPrice, candle.HighPrice, candle.LowPrice, candle.ClosePrice, candle.TotalVolume));

на выходе получаю:


2012/10/30 21:00:00.001|       Новая свеча 30.10.2012 20:00:00: 142330.0000000;142440.0000000;142080.0000000;142080.0000000; объем 13765
2012/10/30 22:00:00.001|       Новая свеча 30.10.2012 21:00:00: 142090.0000000;142220.0000000;142030.0000000;142140.0000000; объем 10005
2012/10/30 23:00:00.001|       Новая свеча 30.10.2012 22:00:00: 142130.0000000;142150.0000000;141960.0000000;142150.0000000; объем 7250
2012/10/31 10:00:00.000|       Новая свеча 30.10.2012 23:00:00: 142150.0000000;142150.0000000;142150.0000000;142150.0000000; объем 3762
2012/10/31 10:00:00.001|       Новая свеча 30.10.2012 10:00:00: 142310.0000000;142310.0000000;142040.0000000;142270.0000000; объем 5643
2012/10/31 11:00:00.001|       Новая свеча 31.10.2012 10:00:00: 142210.0000000;143180.0000000;142060.0000000;143140.0000000; объем 112085
2012/10/31 12:00:00.001|       Новая свеча 31.10.2012 11:00:00: 143130.0000000;143490.0000000;142660.0000000;143420.0000000; объем 121099

)))

profts
profts Автор

"Выложите bin файлы часовиков для 25 и 26 числа.": http://rusfolder.com/35703295 http://rusfolder.com/35703296

profts
profts Автор

Собственно нашел частичное решение проблемы: на вход подавать готовые финамовские свечки 5 минутные, а в series уже указывать таймфрейм 60 мин:


var timeFrame = TimeSpan.FromMinutes(5);
var timeFrame2 = TimeSpan.FromMinutes(60);
...
UseCandleTimeFrame = timeFrame
...
var series = new CandleSeries(typeof(TimeFrameCandle), security, timeFrame2);

на выходе все отлично:


2013/03/25 22:00:00.001|       Новая свеча 25.03.2013 21:00:00: 140260.0000000;140660.0000000;140140.0000000;140600.0000000; объем 71381
2013/03/25 23:00:00.001|       Новая свеча 25.03.2013 22:00:00: 140620.0000000;140750.0000000;140510.0000000;140620.0000000; объем 36455
2013/03/26 10:00:00.001|       Новая свеча 25.03.2013 23:00:00: 140620.0000000;140720.0000000;140350.0000000;140670.0000000; объем 35747
2013/03/26 11:00:00.001|       Новая свеча 26.03.2013 10:00:00: 140740.0000000;141190.0000000;140460.0000000;140920.0000000; объем 127852
2013/03/26 12:00:00.001|       Новая свеча 26.03.2013 11:00:00: 140910.0000000;141580.0000000;140810.0000000;141410.0000000; объем 117363
2013/03/26 13:00:00.001|       Новая свеча 26.03.2013 12:00:00: 141410.0000000;141440.0000000;140350.0000000;141100.0000000; объем 189043

P.S. с подгрузкой готовых 15 минутных свечек такой вариант уже не прокатывает ))) т.е. опять же последняя 15 мин свечка 23.45 - 0.00. и также как и часовая разбивается на две )

esper
esper

Багу нашел. Связано с сохранением свечек с Финама.

profts