Задать вопрос

Какой паттерн проектирования лучше использовать при расчете финансовых индикаторов?

Пишу робота для игры на бирже (просто pet-проект, изучаю C#), хочу корректно оформить работу с индикаторами технического анализа (скользящее среднее, стохастический осциллятор и пр.).

Упрощая, можно сказать, что каждый индикатор принимает на входе некоторую порцию обязательной информации (скажем, массив decimal), отображающей цены рассматриваемого инструмента за некоторый период времени. И каждый индикатор обязательно выдает выходной массив со значениями индикатора за этот же период времени. Но - у индикаторов есть различающиеся входные параметры; кому-то нужен дополнительный параметр типа int, кому-то - три дополнительных параметра типа double и т. д.

При помощи какого паттерна лучше оформить подобную дифференциацию, чтобы код был читаемым и структурированным?
  • Вопрос задан
  • 438 просмотров
Подписаться 2 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 1
Lucian
@Lucian
https://t.me/MakeFreelance
Для вашей задачи лучшим описанием индикаторов будет декларативный подход как SQL, не императивный как C#, именованные аргументы и конфиг, т.е. когда вы описываете индикатор в конфиге, но не описываете для него тонкости реализации.

Такой подход позволит создавать неограниченное кол-во индикаторов , без описания бизнес логики для каждого.
Вот пример декларативного подхода у сервера nginx, где описывается что сервер должен слушать 80 порт и обслуживать запросы поступающие на адрес /api и по какому пути искать страницу, но не описывается как должен работать сервер.
server {
        listen 80;

        root /var/www/example.com/html;
        index index.html index.htm index.nginx-debian.html;

        server_name example.com www.example.com;

        location /api {
                try_files $uri $uri/ =404;
        }
}


Вот еще пример декларативного подхода:
space({
    name = 'bitcoin',
    fields = {
        { name = 'tx_id', type = 'string' },
        { name = 'block_hash', type = 'string' },
        { name = 'prev_block', type = 'string' },
        { name = 'address', type = 'string' },
        { name = 'value', type = 'string' },
        { name = 'type', type = 'string' }, 
        { name = 'block', type = 'unsigned' },
        { name = 'created', type = 'unsigned' },
        { name = 'expires', type = 'unsigned' },
    },
    indexes = {
        { name = 'primary', type = 'tree', unique = true, parts = { 'tx_id' } },
        { name = 'address', type = 'tree', unique = false, parts = { 'address' } },
        { name = 'block', type = 'tree', unique = false, parts = { 'block' } },
        { name = 'expires', type = 'tree', unique = true, parts = { 'expires' } },
    }
})

Здесь описывается название таблицы "bitcoin", поля таблицы и индексы для быстрого поиска по значению, но не описывается что нужно сделать, чтобы создать такую таблицу.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы