Фундаментальные вопросы на злободневные темы
Atom Ответить
22.10.2013


Не простые вопросы на сложные темы:

- Вопрос к процессам протекающим в S#. Могу ли я создать несколько потоков для расчета стратегии во время цикла перебора параметров? Для каждой стратегии нам нужно свое хранилище исторических данных, трейдер, секьюрити и портфолио. Чтобы не клонировать их каждый раз, я могу создать для одного потока одно хранилище, копию одного трейдера, один секьюрити и один портфолио, чтобы внутри этого потока итерировать только стратегию с новыми параметрами? А потом копировать эти потоки, например, до 4 для загрузки всех ядер процессора и максимального распараллеливания. Это я к тому, чтобы не плодить одинаковые данные лишний раз. А в каждую новую стратегию передавать новые параметры. Возможно ли это?

- Как вывести свои данные на график? Например, я беру текущее значение индикатора MA умножаю его на 2 и получаю какое-то значение. Как мне сохранить это значение? В каком формате сохранять (в файл txt, xaml, в коллекцию или как-то еще)? Как мне его потом вывести на график из хранилаща? Интересуют самые производительные варианты.

Теги:


Спасибо:




1 Ответов
IvanB

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


Bond Перейти
Не простые вопросы на сложные темы:

- Вопрос к процессам протекающим в S#. Могу ли я создать несколько потоков для расчета стратегии во время цикла перебора параметров? Для каждой стратегии нам нужно свое хранилище исторических данных, трейдер, секьюрити и портфолио. Чтобы не клонировать их каждый раз, я могу создать для одного потока одно хранилище, копию одного трейдера, один секьюрити и один портфолио, чтобы внутри этого потока итерировать только стратегию с новыми параметрами? А потом копировать эти потоки, например, до 4 для загрузки всех ядер процессора и максимального распараллеливания. Это я к тому, чтобы не плодить одинаковые данные лишний раз. А в каждую новую стратегию передавать новые параметры. Возможно ли это?

Вообще распараллеливание тестирования может быть сделано в разных направлениях, где-то я об этом писал на форуме.
Идеальный вариант, когда все параллельные потоки не зависимы по обработке, в том числе и по всем используемым ресурсам.
Если объект используется в разных потоках, при этом не изменяется, то думаю, можно его использовать во всех потоках (например хранилище данных), другое дело, если объект подвергается изменениям в потоках, например трейдер (генерируются события, на разные сигналы - новая свеча и т.д.), то такой объект должен быть индивидуален для каждого потока.

Bond Перейти
- Как вывести свои данные на график? Например, я беру текущее значение индикатора MA умножаю его на 2 и получаю какое-то значение.

Полагаю, надо создавать свой индикатор.

Bond Перейти
Как мне сохранить это значение? В каком формате сохранять (в файл txt, xaml, в коллекцию или как-то еще)?

Самый быстрый вариант по производительности и затратам сил, сохранение в коллекцию, но коллекции тоже разные есть, в плане производительности, выбор зависит от потребностей, Думаю, самый выгодный вариант, хранить значения в списке List<>.
Сохранять через сериализацию:
http://msdn.microsoft.co...ru/library/ms233843.aspx
http://msdn.microsoft.co...ru/library/szzyf24s.aspx

Bond Перейти
Как мне его потом вывести на график из хранилаща?

Десериализовать данные и пробегая по всем значениям, стандартным образом выводить на график, где на каждой итерации:
Код
var chartValueMy = new ChartIndicatorValue(_indicatorMy, <одно значение из десериализованных данных>);
Chart.ProcessValues(candle.OpenTime, new Dictionary<IChartElement, object>
                    {
                        {_chartIndicatorMyElement, chartValueMy}
                    })
Спасибо: Bond pft_man


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

loading
clippy