Trading Decision Helper
FastAPI • Yahoo Finance • Indicators • Similarity
Wiki
Indicator definitions, formulas, and how we compute them in this project.
Prices
open, high, low, close: daily OHLC prices.
Definition: \( Open_t,\ High_t,\ Low_t,\ Close_t \)
daily: same as close.
\( daily_t = Close_t \)
Volume
tick_volume and volume: daily traded volume from the provider.
\( tick\_volume_t = Volume_t,\ \ \ volume_t = tick\_volume_t \)
Spread / Filling / Candle way
spread:
\( spread_t = High_t - Low_t \)
filling:
\( filling_t = \frac{Close_t - Open_t}{High_t - Low_t} \)
candle_way:
\( candle\_way_t = \begin{cases} \text{up} & \text{if } Close_t - Open_t > 0 \\ \text{down} & \text{if } Close_t - Open_t < 0 \\ \text{flat} & \text{otherwise} \end{cases} \)
Moving averages (SMA)
ma5, ma20, ma50, ma100, ma200
\( ma_N(t) = \frac{1}{N}\sum_{i=0}^{N-1} Close_{t-i} \)
Log returns
ret_log_1, ret_log_5, ret_log_10, ret_log_50:
\( ret\_log_n(t) = \ln\left(\frac{Close_t}{Close_{t-n}}\right) \)
vol (volatility)
Rolling 20-day standard deviation of ret_log_1.
\( vol(t) = Std_{20}(ret\_log_1(t)) \)
Z factor
Z-score of close vs 20-day rolling mean/std:
\( Z(t) = \frac{Close_t - Mean_{20}(Close)_t}{Std_{20}(Close)_t} \)
In CSV the column name is Z factor.
Bollinger bands
Using 20-day mean and std of close:
\( Bollinger\_Top(t) = Mean_{20}(Close)_t + 2\cdot Std_{20}(Close)_t \)
\( Bollinger\_Bottom(t) = Mean_{20}(Close)_t - 2\cdot Std_{20}(Close)_t \)
Volume average
Volume_Avg_50:
\( Volume\_Avg\_{50}(t) = Mean_{50}(tick\_volume)_t \)
RSI (14, Wilder)
Define daily change: \( \Delta_t = Close_t - Close_{t-1} \).
\( Gain_t=\max(\Delta_t,0),\ \ Loss_t=\max(-\Delta_t,0) \)
Using Wilder smoothing (EMA-like):
\( AvgGain_t,\ AvgLoss_t \)
\( RS_t = \frac{AvgGain_t}{AvgLoss_t} \)
\( RSI_t = 100 - \frac{100}{1+RS_t} \)
Autocorrelation (window=50)
For \( r_t = ret\_log_1(t) \), and lag \(k\in\{1,2,5,20\}\):
\( autocorr_k(t) = Corr\left(\{r_{t-49},...,r_t\},\{r_{t-49-k},...,r_{t-k}\}\right) \)
Columns: autocorr_1, autocorr_2, autocorr_5, autocorr_20.
KAMA (Kaufman Adaptive Moving Average)
Parameters used: \(n=10\), \(fast=2\), \(slow=30\).
Efficiency ratio: \( ER_t = \frac{|Close_t - Close_{t-n}|}{\sum_{i=0}^{n-1} |Close_{t-i} - Close_{t-i-1}|} \)
\( SC_t = \left( ER_t\cdot\left(\frac{2}{fast+1}-\frac{2}{slow+1}\right) + \frac{2}{slow+1} \right)^2 \)
Recurrence: \( KAMA_t = KAMA_{t-1} + SC_t\cdot(Close_t - KAMA_{t-1}) \)
Derived features:
\( kama\_diff_t = Close_t - KAMA_t \)
\( kama\_trend_t = KAMA_t - KAMA_{t-1} \)
Previsions (future MA vs today close)
Added by prevision.py. For \(N\in\{5,20,50,100\}\):
\( maN\_prev(t) = \frac{maN(t+N) - Close_t}{Close_t} \)
Columns: ma5_prev, ma20_prev, ma50_prev, ma100_prev.
Scaling (normaliser.py)
In data/*_scaled.csv we z-score each numeric column per ticker:
\( x_{scaled} = \frac{x - \mu}{\sigma} \)
Unscale: \( x = x_{scaled}\cdot\sigma + \mu \)
Scaling factors are stored in scaling/<TICKER>.csv.
Note: These formulas reflect how this project computes features. They are for education/analysis only.