Работа со StorageRegistry


Работа со StorageRegistry
Atom
9/9/2013


Добрый день! Разъясните, пожалуйста, как работать со свечами из хранилища. В ниже указанном коде идет работа с тиковыми данными? А как обратиться к данным с сформиррванными свечами разного таймфрейма?
Code

// хранилище, через которое будет производиться доступ к тиковой и котировочной базе 
var storageRegistry = new StorageRegistry();

// изменяем путь, используемый по умолчанию
((LocalMarketDataDrive)storageRegistry.DefaultDrive).Path = HistoryPath.Text;

// используем алфавитное хранилище
((LocalMarketDataDrive) storageRegistry.DefaultDrive).UseAlphabeticPath = true;


Code

Печать
// создаем тестовый инструмент, на котором будет производится тестирование 
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 };



Thanks:


IvanB

Avatar
Date: 9/9/2013
Reply


Bond Go to
Добрый день! Разъясните, пожалуйста, как работать со свечами из хранилища. В ниже указанном коде идет работа с тиковыми данными? А как обратиться к данным с сформиррванными свечами разного таймфрейма?
Code

// хранилище, через которое будет производиться доступ к тиковой и котировочной базе 
var storageRegistry = new StorageRegistry();

// изменяем путь, используемый по умолчанию
((LocalMarketDataDrive)storageRegistry.DefaultDrive).Path = HistoryPath.Text;

// используем алфавитное хранилище
((LocalMarketDataDrive) storageRegistry.DefaultDrive).UseAlphabeticPath = true;


Code

Печать
// создаем тестовый инструмент, на котором будет производится тестирование 
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 };


Приведенный код задает хранилище, торговый инструмент и портфель, и никак не определяет какие элементы используются (стаканы, свечи,...).
Чтобы получить данные из хранилища, нужно воспользоваться классом EmulationTrader, и в нем указываем свойство UseCandlesTimeFrame, если хотим получать свечи из хранилища.
Надеюсь, я правильно понял вопрос.
Thanks:

Bond

Avatar
Date: 9/10/2013
Reply


IvanB Go to
Bond Go to
Добрый день! Разъясните, пожалуйста, как работать со свечами из хранилища. В ниже указанном коде идет работа с тиковыми данными? А как обратиться к данным с сформиррванными свечами разного таймфрейма?
Code

// хранилище, через которое будет производиться доступ к тиковой и котировочной базе 
var storageRegistry = new StorageRegistry();

// изменяем путь, используемый по умолчанию
((LocalMarketDataDrive)storageRegistry.DefaultDrive).Path = HistoryPath.Text;

// используем алфавитное хранилище
((LocalMarketDataDrive) storageRegistry.DefaultDrive).UseAlphabeticPath = true;


Code

Печать
// создаем тестовый инструмент, на котором будет производится тестирование 
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 };


Приведенный код задает хранилище, торговый инструмент и портфель, и никак не определяет какие элементы используются (стаканы, свечи,...).
Чтобы получить данные из хранилища, нужно воспользоваться классом EmulationTrader, и в нем указываем свойство UseCandlesTimeFrame, если хотим получать свечи из хранилища.
Надеюсь, я правильно понял вопрос.


Спасибо, Иван, за ответ.
А есть какой-нибудь пример? Ведь это основные данными с которыми приходится работать! Как указать, чтобы брались свечи заданного таймфрейма?

Thanks:

IvanB

Avatar
Date: 9/10/2013
Reply


Bond Go to

Спасибо, Иван, за ответ.
А есть какой-нибудь пример? Ведь это основные данными с которыми приходится работать! Как указать, чтобы брались свечи заданного таймфрейма?


Пожалуйста.
Есть пример SampleHistoryTesting, который находится в папке Testing в примерах S#.
Выбор таймфрейма делается через свойство UseCandlesTimeFrame эмулятора трейдера (EmulationTrader).
Thanks:

Bond

Avatar
Date: 9/10/2013
Reply


IvanB Go to
Bond Go to

Спасибо, Иван, за ответ.
А есть какой-нибудь пример? Ведь это основные данными с которыми приходится работать! Как указать, чтобы брались свечи заданного таймфрейма?


Пожалуйста.
Есть пример 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 выставлять заявки, тики не нужны. И почему объем сделок в свечке нигде не фигурирет? Гидра не формирует свечки заданного таймфрейма с объемом сделок?
Thanks:

esper

Avatar
Date: 9/10/2013
Reply


Bond Go to
Я что-то не понимаю к чему такие манипуляции? Мы делаем из сделок свечки заданного таймфрейма(например, в Гидре), а потом из этих свечек пытаемся обратно сэмулировать тиковые сделки. Зачем? Мне просто нужно по данным предыдущей свечки O, H, L, C, V выставлять заявки, тики не нужны.

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

Bond Go to
И почему объем сделок в свечке нигде не фигурирет? Гидра не формирует свечки заданного таймфрейма с объемом сделок?

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

P.s. если вам надо просто получить свечки без эмуляции, то можно использовать метод StorageRegistry.GetCandleStorage
Thanks: Bond

Bond

Avatar
Date: 9/10/2013
Reply


esper Go to
Bond Go to
Я что-то не понимаю к чему такие манипуляции? Мы делаем из сделок свечки заданного таймфрейма(например, в Гидре), а потом из этих свечек пытаемся обратно сэмулировать тиковые сделки. Зачем? Мне просто нужно по данным предыдущей свечки O, H, L, C, V выставлять заявки, тики не нужны.

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

Bond Go to
И почему объем сделок в свечке нигде не фигурирет? Гидра не формирует свечки заданного таймфрейма с объемом сделок?

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

P.s. если вам надо просто получить свечки без эмуляции, то можно использовать метод StorageRegistry.GetCandleStorage


Спасибо за подробный ответ!!!
Thanks:

Bond

Avatar
Date: 9/11/2013
Reply


Попробовал разобраться. Но в кучу все собрать не получилось.
Прошу привести пример простейшего кода, который возьмет свечи заданного таймфрейма из хранилища и просто отрисует их на графике за указанный период времени(странно, что нет такого примера в обучении). Желательно рабочий код потому, что опыта мало и путаюсь в мелочах.

В документации в качестве примера используется TimeFrameCandleBuilder(что это?):
http://stocksharp.com/doc/html/...e9-a573-abf0245b3f5d.htm

Иван предлагает использовать UseCandlesTimeFrame,пользователь esper предлагает через StorageRegistry.GetCandleStorage. Плюс как правильно вывести все это на график?
Во всех примерах Sample, в том числе и в уроках это все реализуется как-то по разному.

Заранее спасибо за помощь.


Thanks:

IvanB

Avatar
Date: 9/16/2013
Reply


Bond Go to
Попробовал разобраться. Но в кучу все собрать не получилось.
Прошу привести пример простейшего кода, который возьмет свечи заданного таймфрейма из хранилища и просто отрисует их на графике за указанный период времени(странно, что нет такого примера в обучении). Желательно рабочий код потому, что опыта мало и путаюсь в мелочах.

В документации в качестве примера используется TimeFrameCandleBuilder(что это?):
http://stocksharp.com/doc/html/...e9-a573-abf0245b3f5d.htm

Иван предлагает использовать UseCandlesTimeFrame,пользователь esper предлагает через StorageRegistry.GetCandleStorage. Плюс как правильно вывести все это на график?
Во всех примерах Sample, в том числе и в уроках это все реализуется как-то по разному.

Заранее спасибо за помощь.




Предлагаю рассмотреть следующий проект:
$/StockSharp Lessons/StockSharp.Edu/Additional/GetCandles/GetCandles
в этом проекте демонстрируется как получить свечи напрямую из хранилища в коллекцию, и вариант с эмулятором трейдера, оба варианта о которых говорилось в этой ветке форума.
Thanks: Bond

Bond

Avatar
Date: 9/22/2013
Reply


IvanB Go to
Bond Go to
Попробовал разобраться. Но в кучу все собрать не получилось.
Прошу привести пример простейшего кода, который возьмет свечи заданного таймфрейма из хранилища и просто отрисует их на графике за указанный период времени(странно, что нет такого примера в обучении). Желательно рабочий код потому, что опыта мало и путаюсь в мелочах.

В документации в качестве примера используется TimeFrameCandleBuilder(что это?):
http://stocksharp.com/doc/html/...e9-a573-abf0245b3f5d.htm

Иван предлагает использовать UseCandlesTimeFrame,пользователь esper предлагает через StorageRegistry.GetCandleStorage. Плюс как правильно вывести все это на график?
Во всех примерах Sample, в том числе и в уроках это все реализуется как-то по разному.

Заранее спасибо за помощь.




Предлагаю рассмотреть следующий проект:
$/StockSharp Lessons/StockSharp.Edu/Additional/GetCandles/GetCandles
в этом проекте демонстрируется как получить свечи напрямую из хранилища в коллекцию, и вариант с эмулятором трейдера, оба варианта о которых говорилось в этой ветке форума.


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

var candles = storageRegistry.GetCandleStorage(typeof (TimeFrameCandle), _security, timeFrame)
                    .Load(fromDate.SelectedDate.Value, toDate.SelectedDate.Value+TimeSpan.FromDays(1));
                
                foreach (var candle in candles)
                {
                    Draw(candle, _chartCandleElementFromCollection);
                }

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

   // использовать свечки
   UseCandlesTimeFrame = timeFrame,
Thanks:


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

loading
clippy