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


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

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

часовые:

час

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

Теги:


Спасибо:




27 Ответов
1 2  >
Moadip

Фотография
Автор статей Программист
Дата: 26.03.2013
Ответить


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

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

profts

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


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

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

profts

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


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

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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 27.03.2013
Ответить


profts Перейти


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

profts

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


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

Включаю гидру, выбираю источник данных Финам, добавляю нужные инструменты, ставлю 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

Фотография
Автор статей Программист Трейдер
Дата: 27.03.2013
Ответить


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


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

profts

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


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

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

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

Код

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

Фотография
Автор статей Программист Трейдер
Дата: 27.03.2013
Ответить


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


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

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

profts

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


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

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

Moadip

Фотография
Автор статей Программист
Дата: 27.03.2013
Ответить


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

profts

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


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

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

Moadip

Фотография
Автор статей Программист
Дата: 27.03.2013
Ответить


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

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

Не, скачиваются готовые свечки с финама.

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

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

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

profts

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


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

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

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

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

Moadip

Фотография
Автор статей Программист
Дата: 27.03.2013
Ответить




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

Вообще то это все есть в доке.
Спасибо:

profts

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


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

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

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

profts

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


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

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

profts

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


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

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

Код

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

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


Так никто и не хочет помогать ((
Дело в параметре 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

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


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

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

Код

 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

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


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

esper

Фотография
Программист
Дата: 28.03.2013
Ответить


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

Ссылку на подобное обсуждение вы сами привели. Только стоит подумать, имеет ли это смысл, т.к. после завершения последней свечки вы все-равно уже ничего не сделаете.
4. Не думаю, что WorkingTime причина проблем. Проверил у себя, свечки точь в точь совпадают с теми, что вы выгрузили из Гидры. У меня используется подобный подход.
Спасибо:

profts

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


Видел, что вы читаете тему и надеялся, что ответите )
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

Фотография
Программист
Дата: 28.03.2013
Ответить


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

profts

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


Сделал еще проще... Чтобы показать в чем проблема...
Запускаю 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

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


"Выложите bin файлы часовиков для 25 и 26 числа.":
http://rusfolder.com/35703295
http://rusfolder.com/35703296
Автор топика
Спасибо:
1 2  >

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

loading
clippy