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
|
Дата: 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
|
Дата: 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,
|
|
Спасибо:
|
|
|
|