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

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

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

При помощи какого паттерна лучше оформить подобную дифференциацию, чтобы код был читаемым и структурированным?
  • Вопрос задан
  • 438 просмотров
Пригласить эксперта
Ответы на вопрос 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", поля таблицы и индексы для быстрого поиска по значению, но не описывается что нужно сделать, чтобы создать такую таблицу.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
22 нояб. 2024, в 22:26
3500 руб./за проект
22 нояб. 2024, в 21:47
3000 руб./за проект
22 нояб. 2024, в 21:44
50000 руб./за проект