Добрый день! Разъясните, пожалуйста, как работать со свечами из хранилища. В ниже указанном коде идет работа с тиковыми данными? А как обратиться к данным с сформиррванными свечами разного таймфрейма?
// хранилище, через которое будет производиться доступ к тиковой и котировочной базе
var storageRegistry = new StorageRegistry();
// изменяем путь, используемый по умолчанию
((LocalMarketDataDrive)storageRegistry.DefaultDrive).Path = HistoryPath.Text;
// используем алфавитное хранилище
((LocalMarketDataDrive) storageRegistry.DefaultDrive).UseAlphabeticPath = true;
Печать
// создаем тестовый инструмент, на котором будет производится тестирование
var security = new Security
{
Id = "RIZ2@FORTS", // по идентификатору инструмента будет искаться папка с историческими маркет данными
Code = "RIZ2",
Name = "RTS-12.12",
MinStepSize = 10,
MinStepPrice = 2,
ExchangeBoard = ExchangeBoard.Forts,
}
// тестовый портфель
var portfolio = new Portfolio { Name = "test account", BeginValue = 1000000m };
Комментарии (9)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
// хранилище, через которое будет производиться доступ к тиковой и котировочной базе var storageRegistry = new StorageRegistry();
// изменяем путь, используемый по умолчанию ((LocalMarketDataDrive)storageRegistry.DefaultDrive).Path = HistoryPath.Text;
// используем алфавитное хранилище ((LocalMarketDataDrive) storageRegistry.DefaultDrive).UseAlphabeticPath = true;
Приведенный код задает хранилище, торговый инструмент и портфель, и никак не определяет какие элементы используются (стаканы, свечи,...). Чтобы получить данные из хранилища, нужно воспользоваться классом EmulationTrader, и в нем указываем свойство UseCandlesTimeFrame, если хотим получать свечи из хранилища. Надеюсь, я правильно понял вопрос.
// хранилище, через которое будет производиться доступ к тиковой и котировочной базе var storageRegistry = new StorageRegistry();
// изменяем путь, используемый по умолчанию ((LocalMarketDataDrive)storageRegistry.DefaultDrive).Path = HistoryPath.Text;
// используем алфавитное хранилище ((LocalMarketDataDrive) storageRegistry.DefaultDrive).UseAlphabeticPath = true;
Спасибо, Иван, за ответ. А есть какой-нибудь пример? Ведь это основные данными с которыми приходится работать! Как указать, чтобы брались свечи заданного таймфрейма?
Пожалуйста. Есть пример SampleHistoryTesting, который находится в папке Testing в примерах S#. Выбор таймфрейма делается через свойство UseCandlesTimeFrame эмулятора трейдера (EmulationTrader).
EmulationTrader.UseCandlesTimeFrame - Если таймфрейм указан, то будут загружаться свечки указанного таймфрейма (вместо трейдов). Далее по свечкам будут генерироваться набор из 5 тиковых сделок O, X, H, L, C (не обязательно в таком порядке), соответствующих точкам в свечке. Точка X выбирается рядом с точкой O, чтобы изменение цены шло по цене X строго внутри диапазона L<X<H (нужно для того чтобы сделки были более реалистичными - по цене близкой к O, а не H или L).
Я что-то не понимаю к чему такие манипуляции? Мы делаем из сделок свечки заданного таймфрейма(например, в Гидре), а потом из этих свечек пытаемся обратно сэмулировать тиковые сделки. Зачем? Мне просто нужно по данным предыдущей свечки O, H, L, C, V выставлять заявки, тики не нужны. И почему объем сделок в свечке нигде не фигурирет? Гидра не формирует свечки заданного таймфрейма с объемом сделок?
P.s. если вам надо просто получить свечки без эмуляции, то можно использовать метод StorageRegistry.GetCandleStorage
Спасибо за подробный ответ!!!
Попробовал разобраться. Но в кучу все собрать не получилось. Прошу привести пример простейшего кода, который возьмет свечи заданного таймфрейма из хранилища и просто отрисует их на графике за указанный период времени(странно, что нет такого примера в обучении). Желательно рабочий код потому, что опыта мало и путаюсь в мелочах.
В документации в качестве примера используется TimeFrameCandleBuilder(что это?): http://stocksharp.com/doc/html/f71010d3-135c-4fe9-a573-abf0245b3f5d.htm
Иван предлагает использовать UseCandlesTimeFrame,пользователь esper предлагает через StorageRegistry.GetCandleStorage. Плюс как правильно вывести все это на график? Во всех примерах Sample, в том числе и в уроках это все реализуется как-то по разному.
Заранее спасибо за помощь.
Предлагаю рассмотреть следующий проект: $/StockSharp Lessons/StockSharp.Edu/Additional/GetCandles/GetCandles в этом проекте демонстрируется как получить свечи напрямую из хранилища в коллекцию, и вариант с эмулятором трейдера, оба варианта о которых говорилось в этой ветке форума.
Иван, спасибо за пример! К сожалению, только сейчас дошли руки его разобрать. Очевидно, что получение свечей напрямую из хранилища быстрее в несколько раз, чем через эмулятор.
В своем коде я решил использовать эту конструкцию. При этом использование готовых свечей также в несколько раз ускоряет работу: