IvanB
|
Дата: 22.10.2013
|
|
|
|
|
Bond:
Не простые вопросы на сложные темы:
- Вопрос к процессам протекающим в S#. Могу ли я создать несколько потоков для расчета стратегии во время цикла перебора параметров? Для каждой стратегии нам нужно свое хранилище исторических данных, трейдер, секьюрити и портфолио. Чтобы не клонировать их каждый раз, я могу создать для одного потока одно хранилище, копию одного трейдера, один секьюрити и один портфолио, чтобы внутри этого потока итерировать только стратегию с новыми параметрами? А потом копировать эти потоки, например, до 4 для загрузки всех ядер процессора и максимального распараллеливания. Это я к тому, чтобы не плодить одинаковые данные лишний раз. А в каждую новую стратегию передавать новые параметры. Возможно ли это?
Вообще распараллеливание тестирования может быть сделано в разных направлениях, где-то я об этом писал на форуме.
Идеальный вариант, когда все параллельные потоки не зависимы по обработке, в том числе и по всем используемым ресурсам.
Если объект используется в разных потоках, при этом не изменяется, то думаю, можно его использовать во всех потоках (например хранилище данных), другое дело, если объект подвергается изменениям в потоках, например трейдер (генерируются события, на разные сигналы - новая свеча и т.д.), то такой объект должен быть индивидуален для каждого потока.
Bond:
- Как вывести свои данные на график? Например, я беру текущее значение индикатора MA умножаю его на 2 и получаю какое-то значение.
Полагаю, надо создавать свой индикатор.
Bond:
Как мне сохранить это значение? В каком формате сохранять (в файл txt, xaml, в коллекцию или как-то еще)?
Самый быстрый вариант по производительности и затратам сил, сохранение в коллекцию, но коллекции тоже разные есть, в плане производительности, выбор зависит от потребностей, Думаю, самый выгодный вариант, хранить значения в списке List<>.
Сохранять через сериализацию:
http://msdn.microsoft.com/ru-ru/library/ms233843.aspx
http://msdn.microsoft.com/ru-ru/library/szzyf24s.aspx
Bond:
Как мне его потом вывести на график из хранилаща?
Десериализовать данные и пробегая по всем значениям, стандартным образом выводить на график, где на каждой итерации:
var chartValueMy = new ChartIndicatorValue(_indicatorMy, <одно значение из десериализованных данных>);
Chart.ProcessValues(candle.OpenTime, new Dictionary<IChartElement, object>
{
{_chartIndicatorMyElement, chartValueMy}
})
|