Для вашей задачи лучшим описанием индикаторов будет
декларативный подход как
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", поля таблицы и индексы для быстрого поиска по значению, но не описывается что нужно сделать, чтобы создать такую таблицу.