Если хотите получить ответ на вопрос, давайте максимум информации в понятной форме.
А не две картинки на которых вывод свечек реализован в "оригинальном" формате, в который сразу и не въедешь.
Фьючерс на индекс РТС, источник Финам. Собственно в гидре ничего не менял, все настройки по-умолчанию. Выбрал инструмент, период и все виды стандартных свечек.
P.S. Гидра из архива stocksharp-23281, т.е. одна из последних версий 4.1.9.
На скринах в первом посте вывод информации о свечках по событию .WhenCandlesFinished().
Хотел вручную все это исправить, т.е. уже в коде объединять две последние свечки за день в одну.
Объединить получилось... Но индикаторы не считаются, если я в них отправляю свою "public Candle Candle_15min;".
Вообщем, пытаясь решить одну проблему, натыкаюсь на вторую...
Вы бы лучше объяснили, как вы все это проверяете. Например, посмотрели что Гидра скачала с Финама. Что она построила. Потратьте час времени на анализ, и тогда наш ответ будет детальнее.
Как понимаю на данном этапе больше никаких настроек не существует, где-то выбрать что-то не то или поставить галочку где-то не там просто невозможно, особенно касательно формирования свечек.
Далее... Как проверить эти свечки... вижу только один способ. по событию окончания свечек вывести их на график или в файл. различий в графике или файле не вижу, графиком никогда не пользовался, поэтому вывожу тупо в файл. За основу взял 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);
На выходе имеем:
15 min
т.е. 1 лишняя свечка в конце каждого дня. причем если просуммировать объемы двух свечек с временем закрытия 23.45 и 10 , то получится реальный объем последней свечи.
а как посмотреть как рисуются в гидре свечки на основе сформированных этой же гидрой свечек?
в гидре как понял можно только посмотреть формирование свечек из тиков. с этим все нормально.
впрочем как и с формированием свечек из тиковых данных в самой программе...
решение проблемы действительно очень важно, т.к. реально три дня не могу ничего поделать... ((((
если затруднительно помочь с этим вопросом, то может подскажите почему не считаются индикаторы на основе :
profts:
а как посмотреть как рисуются в гидре свечки на основе сформированных этой же гидрой свечек?
Это описано в документации.
Я ваш вопрос тогда первоначально не понимаю. Где неправильно работает? Вы написали на форуме Гидра что она неправильно формирует свечки. Как вы это проверяете?
Михаил, при всем уважении...
стокшарпом пользуюсь уже 1,5 года. и к документации обращаюсь в первую очередь, если что-то непонятно, во-вторую - ищу по форуму все похожие темы...
в документации нет такого. есть только формирование и отображение свечек из тиковых данных, как и написал выше. так вот... если просто в гидре посмотреть формирование свечек из тиковых данных, то все ОК. также как и с формированием свечек из этих же тиковых данный в программе. с этим никогда не было проблем.
но при старте гидры, она криво пишет свечки в файл типа candles_TimeFrameCandle_00-15-00.bin. а как посмотреть правильно или неправильно сформированы свечки в этом файле? только запустив тестер на основе свечек... что я и делаю.
Ну это уже значительный прогресс. Еще постов 10 и думаю докопаемся до сути.🙂
я правда думал, что это гидра их формирует на основе тиковых данных, скачанных с финама ) поэтому изначально не так выразился )
Не, скачиваются готовые свечки с финама.
А теперь самый главный вопрос.
Откуда уверенность что их гидра криво сохраняет? Может они с финама такие приходят?
Поэтому, скачиваем готовые свечки с финама, выгружаем их в txt файл.
Скачиваем вручную свечки с сайта финама. Или берем txt файлы из **папка_куда_сохраняются_данные\TemporaryFiles**, что тоже самое, т.к. гидра скачивает их с финама.
Открываем эти файлы и сравниваем/проверяем проблемные места.
Как сделать это "скачиваем готовые свечки с финама, выгружаем их в txt файл. " - не совсем понимаю )
т.е. из bin файла можно как-то выгрузить в txt?
в TemporaryFiles посмотрел - свечки нормальные.
т.е. получается, что как раз гидра из txt криво записывает в bin файл...
тут посетила мысль )) может и в bin файл они сохраняются нормально. а глюк может возникать из-за параметра ExchangeBoard = ExchangeBoard.Forts...
и EmulationTrader уже криво обрабатывает их.
а вот какие свечки приходят в программе по событию .WhenCandlesFinished():
23.15 -23.3023.30-23.45
далее идет непонятная свечка :
23.45
еще одна такая же, но со временем 10.00:
10.00
и далее уже свечка следующего дня:
10.00-10.15
т.е. единственная цена первой кривой свечки совпадает с Open свечки из финама, а HLC второй кривой совпадают с HLC свечки из финама. Т.е. каким-то образом последняя свечка из финама 23.45-23.50 разбивается на две кривых.
собственно возникает вопрос... неужели только у меня такая проблема? ))) кто-нибудь вообще тестирует на основе готовых финамовских свечек?
откопал на форуме тему с проблемой получения последней свечки за день:
последняя свечка
как понимаю, моя проблема из этого же разряда...
последняя свечка не формируется пока не появится новая, а т.к. новая появляется с другой датой, то каким-то образом происходит деление последней свечки на две свечи с разными датами.
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);
Как сделать, чтобы для последней свечки событие .WhenCandlesFinished() поднималось не во время начала новой свечки на след день, а по завершении сессии?
При выводе данных вы используете CloseTime, а в Гидре используется OpenTime.
Каким образом вы строите свечки у себя? По сделкам или загружаете именно свечки из хранилища?
Как сделать, чтобы для последней свечки событие .WhenCandlesFinished() поднималось не во время начала новой свечки на след день, а по завершении сессии?
Ссылку на подобное обсуждение вы сами привели. Только стоит подумать, имеет ли это смысл, т.к. после завершения последней свечки вы все-равно уже ничего не сделаете.
Не думаю, что WorkingTime причина проблем. Проверил у себя, свечки точь в точь совпадают с теми, что вы выгрузили из Гидры. У меня используется подобный подход.
т.е. в начале каждой последующей свечки срабатывает событие .WhenCandlesFinished().
а для последней свечки оно срабатывает дважды - в начале торговой сессии, т.е. в 10.00 и когда начинает формироваться новая свечка, т.е. в 10.00.00.001.
2.Повторюсь. в данном случае я полностью использую шаблон SampleHistoryTesting. ну и естественно выставил UseCandleTimeFrame. т.е., насколько я понимаю, подгружаются уже готовые финамовские свечки из хранилища. т.е. ошибка возникает из-за WorkingTime.
3. да ссылку то привел ... )))) но моих познаний в программировании не хватило, чтобы осилить умную фразу Александра Муханчикова про какое-то переопределение и т.д. )))
После завершения свечки мне ничего делать и не нужно. Это просто тестер, который изначально считает необходимые параметры для нейронки на основе свечек и записывает их а базу, потом нейронка обучается по этой базе и затем уже на полученных знаниях я снова прогоняю тест уже с рисованием эквити и т.д. Т.е. нужны просто правильные свечки, чтобы все индикаторы и параметры рассчитывались корректно...
4. В вашей ссылке свечки строятся из тиков, с этим никогда не было проблем )
Собственно нашел частичное решение проблемы:
на вход подавать готовые финамовские свечки 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. и также как и часовая разбивается на две )
Comments (27)
Login or Create account, Log in or register to leave a comment
Инструмент? Источник?
Если хотите получить ответ на вопрос, давайте максимум информации в понятной форме. А не две картинки на которых вывод свечек реализован в "оригинальном" формате, в который сразу и не въедешь.
Фьючерс на индекс РТС, источник Финам. Собственно в гидре ничего не менял, все настройки по-умолчанию. Выбрал инструмент, период и все виды стандартных свечек.
P.S. Гидра из архива stocksharp-23281, т.е. одна из последних версий 4.1.9.
На скринах в первом посте вывод информации о свечках по событию .WhenCandlesFinished().
Неужели никто не сталкивался?
Хотел вручную все это исправить, т.е. уже в коде объединять две последние свечки за день в одну. Объединить получилось... Но индикаторы не считаются, если я в них отправляю свою "public Candle Candle_15min;". Вообщем, пытаясь решить одну проблему, натыкаюсь на вторую...
Вы бы лучше объяснили, как вы все это проверяете. Например, посмотрели что Гидра скачала с Финама. Что она построила. Потратьте час времени на анализ, и тогда наш ответ будет детальнее.
Хмм... Не совсем понял, что тут еще возможно проанализировать ))) я уже два дня сижу с этим )))
ну хорошо, постараюсь по порядку...
Включаю гидру, выбираю источник данных Финам, добавляю нужные инструменты, ставлю ON для формирования свечек всех доступных по умолчанию таймфреймов.
Настройки Гидры Настройки источника Настройки инструмента в настройках инструмента, кстати, так и не понял, какой шаг цены правильнее указывать, т.к. данные закачиваются с 2008-го .
Как понимаю на данном этапе больше никаких настроек не существует, где-то выбрать что-то не то или поставить галочку где-то не там просто невозможно, особенно касательно формирования свечек.
Закачиваются тиковые данные вместе с файлами готовых свечек: папка с готовыми данными
Далее... Как проверить эти свечки... вижу только один способ. по событию окончания свечек вывести их на график или в файл. различий в графике или файле не вижу, графиком никогда не пользовался, поэтому вывожу тупо в файл. За основу взял SampleHistoryTesting, оставив форму как есть, изменил инструмент, таймфрейм на 15 мин, в стратегии добавил правило и вывод в аксесс...
На выходе имеем: 15 min т.е. 1 лишняя свечка в конце каждого дня. причем если просуммировать объемы двух свечек с временем закрытия 23.45 и 10 , то получится реальный объем последней свечи.
1 час Для часовых все еще намного сложнее )))
Давайте начнем с того, что вы скажите, где именно рисуются неправильно свечки. В гидре или вашей программе.
а как посмотреть как рисуются в гидре свечки на основе сформированных этой же гидрой свечек? в гидре как понял можно только посмотреть формирование свечек из тиков. с этим все нормально.
впрочем как и с формированием свечек из тиковых данных в самой программе...
Свечки из тиков в гидре
решение проблемы действительно очень важно, т.к. реально три дня не могу ничего поделать... ((((
если затруднительно помочь с этим вопросом, то может подскажите почему не считаются индикаторы на основе :
Буду тогда исправлять свечки вручную.
Это описано в документации.
Я ваш вопрос тогда первоначально не понимаю. Где неправильно работает? Вы написали на форуме Гидра что она неправильно формирует свечки. Как вы это проверяете?
Михаил, при всем уважении... стокшарпом пользуюсь уже 1,5 года. и к документации обращаюсь в первую очередь, если что-то непонятно, во-вторую - ищу по форуму все похожие темы...
в документации нет такого. есть только формирование и отображение свечек из тиковых данных, как и написал выше. так вот... если просто в гидре посмотреть формирование свечек из тиковых данных, то все ОК. также как и с формированием свечек из этих же тиковых данный в программе. с этим никогда не было проблем. но при старте гидры, она криво пишет свечки в файл типа candles_TimeFrameCandle_00-15-00.bin. а как посмотреть правильно или неправильно сформированы свечки в этом файле? только запустив тестер на основе свечек... что я и делаю.
Я правильно понял что суть проблемы в том, что готовые свечки скачанные с финама кривые?
"Я правильно понял что суть проблемы в том, что готовые свечки скачанные с финама кривые?"
Именно!!!! )))) я правда думал, что это гидра их формирует на основе тиковых данных, скачанных с финама ) поэтому изначально не так выразился )
Ну это уже значительный прогресс. Еще постов 10 и думаю докопаемся до сути.🙂
А теперь самый главный вопрос. Откуда уверенность что их гидра криво сохраняет? Может они с финама такие приходят?
Поэтому, скачиваем готовые свечки с финама, выгружаем их в txt файл. Скачиваем вручную свечки с сайта финама. Или берем txt файлы из **папка_куда_сохраняются_данные\TemporaryFiles**, что тоже самое, т.к. гидра скачивает их с финама.
Открываем эти файлы и сравниваем/проверяем проблемные места.
Как сделать это "скачиваем готовые свечки с финама, выгружаем их в txt файл. " - не совсем понимаю )
т.е. из bin файла можно как-то выгрузить в txt?
в TemporaryFiles посмотрел - свечки нормальные.
т.е. получается, что как раз гидра из txt криво записывает в bin файл...
тут посетила мысль )) может и в bin файл они сохраняются нормально. а глюк может возникать из-за параметра ExchangeBoard = ExchangeBoard.Forts... и EmulationTrader уже криво обрабатывает их.
Вообще то это все есть в доке.
Даже в голову не пришло, что если в графе "Построить из:" выбрать "не строить", то гидра отобразит готовые свечки ))) ну да ладно.
сравнил. Свечки совпадают. вот как они отображаются в гидре: Финамовские свечки в Гидре
а вот какие свечки приходят в программе по событию .WhenCandlesFinished(): 23.15 -23.30 23.30-23.45 далее идет непонятная свечка : 23.45 еще одна такая же, но со временем 10.00: 10.00 и далее уже свечка следующего дня: 10.00-10.15
т.е. единственная цена первой кривой свечки совпадает с Open свечки из финама, а HLC второй кривой совпадают с HLC свечки из финама. Т.е. каким-то образом последняя свечка из финама 23.45-23.50 разбивается на две кривых.
собственно возникает вопрос... неужели только у меня такая проблема? ))) кто-нибудь вообще тестирует на основе готовых финамовских свечек?
Резюмируя все вышесказанное:
гидра финамовские готовые свечки отображает верно:
по событию .WhenCandlesFinished() получаю свечки в таком виде:
Как это можно исправить?
Может кто подскажет другой способ тестирования, используя готовые свечки?
Так никто и не хочет помогать (( Дело в параметре WorkingTime исходя из которого series и формирует свечки.
для часовых свечек вручную задал:
лишняя свечка перед вечерним клирингом сразу пропала и свечка 18.00 - 19.00 стала получаться правильно...
теперь не могу понять какое значение выставить в :
перепробовал кучу вариантов, все-равно последняя вечерняя свечка разбивается на 2.
откопал на форуме тему с проблемой получения последней свечки за день: последняя свечка
как понимаю, моя проблема из этого же разряда... последняя свечка не формируется пока не появится новая, а т.к. новая появляется с другой датой, то каким-то образом происходит деление последней свечки на две свечи с разными датами.
Как сделать, чтобы для последней свечки событие .WhenCandlesFinished() поднималось не во время начала новой свечки на след день, а по завершении сессии?
Видел, что вы читаете тему и надеялся, что ответите )
получаю свечки такого вида:
т.е. в начале каждой последующей свечки срабатывает событие .WhenCandlesFinished(). а для последней свечки оно срабатывает дважды - в начале торговой сессии, т.е. в 10.00 и когда начинает формироваться новая свечка, т.е. в 10.00.00.001.
2.Повторюсь. в данном случае я полностью использую шаблон SampleHistoryTesting. ну и естественно выставил UseCandleTimeFrame. т.е., насколько я понимаю, подгружаются уже готовые финамовские свечки из хранилища. т.е. ошибка возникает из-за WorkingTime. 3. да ссылку то привел ... )))) но моих познаний в программировании не хватило, чтобы осилить умную фразу Александра Муханчикова про какое-то переопределение и т.д. ))) После завершения свечки мне ничего делать и не нужно. Это просто тестер, который изначально считает необходимые параметры для нейронки на основе свечек и записывает их а базу, потом нейронка обучается по этой базе и затем уже на полученных знаниях я снова прогоняю тест уже с рисованием эквити и т.д. Т.е. нужны просто правильные свечки, чтобы все индикаторы и параметры рассчитывались корректно... 4. В вашей ссылке свечки строятся из тиков, с этим никогда не было проблем )
Выложите bin файлы часовиков для 25 и 26 числа.
Сделал еще проще... Чтобы показать в чем проблема... Запускаю SampleHistoryTesting из 4.1.9. Все оставляю как есть, кроме: меняю таймфрейм на:
и в SmaStrategy.cs комментирую все, кроме строки:
на выходе получаю:
)))
"Выложите bin файлы часовиков для 25 и 26 числа.": http://rusfolder.com/35703295 http://rusfolder.com/35703296
Собственно нашел частичное решение проблемы: на вход подавать готовые финамовские свечки 5 минутные, а в series уже указывать таймфрейм 60 мин:
на выходе все отлично:
P.S. с подгрузкой готовых 15 минутных свечек такой вариант уже не прокатывает ))) т.е. опять же последняя 15 мин свечка 23.45 - 0.00. и также как и часовая разбивается на две )
Багу нашел. Связано с сохранением свечек с Финама.