Работа со StorageRegistry
Atom
09.09.2013
Bond


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

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

Теги:


Спасибо:


IvanB

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


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

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


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

Bond

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


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

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


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


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

Спасибо:

IvanB

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


Bond

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


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

Bond

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


IvanB
Bond

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


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

esper

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


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

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

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

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

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

Bond

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


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

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

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

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

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


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

Bond

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


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

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

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

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


Спасибо:

IvanB

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


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

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

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

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




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

Bond

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


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

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

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

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




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


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

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);
                }

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

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


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

loading
clippy