Я работал над программой для имитации рыночных сделок и портфелем на основе ежедневных рыночных данных, которые я собрал. Я борюсь с лучшей OOP практикой по включению индикаторов в программу. Прямо сейчас у меня есть индикаторы в моем классе акций. Класс акций - это моментальный снимок времени (дня) для Акции, который имеет следующие свойства:
#nullable enable
public StockNode? _prev;
public StockNode? _next;
#nullable disable
protected string _symbol;
protected int _date;
protected double _open;
protected double _close;
protected double _high;
protected double _low;
protected double _volume;
В настоящее время у меня есть методы индикаторов в самом классе акций. Приятно иметь возможность вызывать методы для каждого фондового дня следующим образом:
var movingAverage20Day = stock.ma(20); //This would return a double
Кроме того, он хорошо работает со ссылками на узлы, на которые я полагаюсь, между объектами Stock, чтобы идти вперед и назад в время собирать данные об этом запасе для индикатора. Мой класс Stock слишком длинный, становится сложным для редактирования и часто создает каскад ошибок при внесении изменений в метод; некоторые показатели зависят от других. Как мне правильно управлять всеми своими индикаторами OOP? Я не думаю, что я следую принципу единой ответственности.