HorizontalSMAModel
- the model applies a simple moving average on horizontal time series - refactor `db.Forecast.from_dataframe()` to correctly convert `float('NaN')` values into `None`; otherwise, SQLAlchemy complains
Grid.gridify()
Forecast.from_dataframe()
OrderHistory.choose_tactical_model()