Tuneta
Intelligently optimizes technical indicators and optionally selects the least intercorrelated for use in machine learning models
Install / Use
npx skills add jmrichardson/tunetaInstalls into whichever agent you are using.
README
TuneTA optimizes technical indicators using a distance correlation measure to a user defined target feature such as next day return. Indicator parameter(s) are selected using clustering techniques to avoid "peak" or "lucky" values. The set of tuned indicators can be pruned by choosing the most correlated with the target while minimizing correlation with each other (based on user defined maximum correlation). TuneTA maintains its state to add all tuned indicators to multiple data sets (train, validation, test).
Features
- Given financial prices (OHLCV) and a target feature such as return, TuneTA optimizes the parameter(s) of technical indicator(s) using distance correlation to the target feature. Distance correlation captures both linear and non-linear strength and provides significant benefit over the popular Pearson correlation.
- Optimal indicator parameters are selected in a multi-step clustering process to avoid values which are not consistent with neighboring values, providing a more robust parameter selection.
- Prune indicators with a maximum correlation to each other. This is helpful for machine learning models which generally perform better with lower feature intercorrelation.
- Supports tuning indicator(s) for single or multiple equities. Multiple equities can be combined into a market basket where indicator parameters are optimized across the entire basket of equities.
- Multiple time ranges (ie: short, medium and long)
- Supports pruning preexisting features
- Persists state to generate identical indicators on multiple datasets (train, validation, test)
- Parallel processing for technical indicator optimization as well as correlation pruning
- Supports technical indicators produced from the following packages:
- Correlation report of target and features
- Early stopping
Overview
TuneTA simplifies the process of optimizing many technical indicators while avoiding "peak" values, and selecting the best indicators with minimal correlation between each other (optional). At a high level, TuneTA performs the following steps:
-
For each indicator, Optuna searches for parameter(s) which maximize its correlation to a user defined target (for example, next day return).
-
After the specified Optuna trials are complete, a 3-step KMeans clustering method is used to select the optimal parameter(s):
- Each trial is placed in its nearest neighbor cluster based on its distance correlation to the target. The optimal number of clusters is determined using the elbow method. The cluster with the highest average correlation is selected with respect to its membership. In other words, a weighted score is used to select the cluster with highest correlation but also with the most trials.
- After the best correlation cluster is selected, the parameters of the trials within the cluster are also clustered. Again, the best cluster of indicator parameter(s) are selected with respect to its membership.
- Finally, the centered best trial is selected from the best parameter cluster.
-
Optionally, the tuned indicators can be pruned by selecting the indicators with a maximum correlation to the all other indicators.
-
Finally, TuneTA generates all optimized indicators.
Installation
Note: Forcing re-installation of TA-Lib as last step to ensure it's compiled correctly with environment.
pip install -U git+https://github.com/jmrichardson/tuneta
pip install --force-reinstall --no-cache-dir --no-deps TA-Lib
Install the latest release:
pip install -U tuneta
pip install --force-reinstall --no-cache-dir --no-deps TA-Lib
Install using Colab:
!wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz
!tar -xzvf ta-lib-0.4.0-src.tar.gz
%cd ta-lib
!./configure --prefix=/usr
!make
!make install
!pip install Ta-Lib
!pip install -U git+https://github.com/jmrichardson/tuneta
!pip install -U git+https://github.com/DistrictDataLabs/yellowbrick.git
!pip install numpy==1.20.3
!pip install numba==0.54.1
!pip install pandas==1.3.4
!pip install scikit-learn==1.0.1
Examples
- Tune RSI Indicator
- Tune Multiple Indicators
- Tune and Prune all Indicators
- TuneTA fit usage
- Tune Market
- Prune Existing Features
Tune RSI Indicator
For simplicity, lets optimize a single indicator:
- RSI Indicator
- Two time periods (short and long term): 4-30 and 31-180
- Maximum of 100 trials per time period to search for the best indicator parameter
- Stop after 20 trials per time period without improvement
The following is a snippet of the complete example found in the examples directory:
tt = TuneTA(n_jobs=4, verbose=True)
tt.fit(X_train, y_train,
indicators=['tta.RSI'],
ranges=[(4, 30), (31, 180)],
trials=100,
early_stop=20,
)
Two studies are created for each time period with up to 100 trials to test different indicator length values. The correlation values are displayed based on the trial parameter. The best trial with its respective parameter value is saved for both time ranges.
To view the correlation of both indicators to the target return as well as each other:
tt.report(target_corr=True, features_corr=True)
Indicator Correlation to Target:
Correlation
--------------------- -------------
tta_RSI_timeperiod_19 0.23393
tta_RSI_timeperiod_36 0.227434
Indicator Correlation to Each Other:
tta_RSI_timeperiod_19 tta_RSI_timeperiod_36
--------------------- ----------------------- -----------------------
tta_RSI_timeperiod_19 0 0.93175
tta_RSI_timeperiod_36 0.93175 0
To generate both RSI indicators on a data set:
features = tt.transform(X_train)
tta_RSI_timeperiod_19 tta_RSI_timeperiod_36
Date
2011-10-03 NaN NaN
2011-10-04 NaN NaN
2011-10-05 NaN NaN
2011-10-06 NaN NaN
2011-10-07 NaN NaN
... ... ...
2018-09-25 62.173261 60.713051
2018-09-26 59.185666 59.362731
2018-09-27 61.026238 60.210235
2018-09-28 61.094793 60.241806
2018-10-01 63.384824 61.305540
Tune Multiple Indicators
Building from the previous example, lets optimize a handful of indicators:
tt.fit(X_train, y_train,
indicators=['pta.slope', 'pta.stoch', 'tta.MACD', 'tta.MOM', 'fta.SMA'],
ranges=[(4, 60)],
trials=100,
early_stop=20,
)
You can view how long it took to optimize each indicator:
tt.fit_times()
Indicator Times
-- ----------- -------
1 pta.stoch 23.56
0 tta.MACD 12.03
2 pta.slope 6.82
4 fta.SMA 6.42
3 tta.MOM 5.7
Let's have a look at each indicator's distance correlation to target as well as each other:
tt.report(target_corr=True, features_corr=True)
Indicator Correlation to Target:
Correlation
--------------------------------------------------- -------------
tta_MACD_fastperiod_43_slowperiod_4_signalperiod_52 0.236575
pta_stoch_k_57_d_29_smooth_k_2 0.231091
pta_slope_length_15 0.215603
tta_MOM_timeperiod_15 0.215603
fta_SMA_period_30 0.080596
Indicator Correlation to Each Other:
tta_MACD_fastperiod_43_slowperiod_4_signalperiod_52 pta_stoch_k_57_d_29_smooth_k_2 pta_slope_length_15 tta_MOM_timeperiod_15 fta_SMA_period_30
--------------------------------------------------- ----------------------------------------------------- -------------------------------- --------------------- ----------------------- -------------------
tta_MACD_fastperiod_43_slowperiod_4_signalperiod_52 0 0.886265 0.779794 0.779794 0.2209
pta_stoch_k_57_d_29_smooth_k_2 0.886265 0 0.678311 0.678311 0.110129
pta_slope_length_15 0.779794 0.678311 0 1 0.167069
tta_MOM_timeperiod_15 0.779794 0.678311 1 0 0.167069
fta_SMA_period_30
Related Skills
valuecell
11.0kValueCell is a community-driven, multi-agent platform for financial applications.
QuantDinger
10.4kAI quantitative trading platform for crypto, stocks, and forex with backtesting, live trading, market data, and multi-agent research.vibe-trading ,trading-agents,ai-trader,ai-trading
beanquery-mcp
50Beancount MCP Server is an experimental implementation that utilizes the Model Context Protocol (MCP) to enable AI assistants to query and analyze Beancount ledger files using Beancount Query Language (BQL) and the beanquery tool.
finance-skills
3.1kA collection of skills for AI financial analysis.
