Files
mt5-correlation/README.md
T

79 lines
3.3 KiB
Markdown

# mt5-correlation
Calculates correlation coefficient between all symbols in MetaTrader5 Market Watch.
# Setup
1) Set up your MetaTrader 5 environment ensuring that all symbols that you would like to assess for correlation are shown in your Market Watch window;
2) Set up your python environment; and
3) Install the required libraries.
```
pip install -r mt5-correlation/requirements.txt
```
# Usage
If you set up a virtual environment in the Setup step, ensure this is activated. Then run the script.
```
python -m mt5_correlations/get_correlations.py
```
A .csv file containing the correlation coefficient for all combinations of sybmols from the MetaTrader market watch will be produced in the current directory.
|Symbol 1 |Symbol 2 |Coefficient|UTC Date From |UTC Date To |Timeframe|
|------------|------------|-----------|-------------------|-------------------|---------|
|OIL-MAR21 |OILMn-MAR21 |1.0 |2021-01-29 11:54:29|2021-02-05 11:54:29|15 |
|EURUSD |EURHKD |0.99980 |2021-01-29 11:54:29|2021-02-05 11:54:29|15 |
|OILMn-MAR21 |BRENT-APR21 |0.99894 |2021-01-29 11:54:29|2021-02-05 11:54:29|15 |
|OIL-MAR21 |BRENT-APR21 |0.99894 |2021-01-29 11:54:29|2021-02-05 11:54:29|15 |
|GSOIL-FEB21 |BRENT-APR21 |0.99605 |2021-01-29 11:54:29|2021-02-05 11:54:29|15 |
|GSOIL-FEB21 |OILMn-MAR21 |0.99543 |2021-01-29 11:54:29|2021-02-05 11:54:29|15 |
|GSOIL-FEB21 |OIL-MAR21 |0.99543 |2021-01-29 11:54:29|2021-02-05 11:54:29|15 |
|EU50Cash |FRA40Cash |0.99072 |2021-01-29 11:54:29|2021-02-05 11:54:29|15 |
# Customising
Edit get_correlations.py to customise.
The coefficients are calculated only if:
* The smallest set of price data is no less than 90% of the size of the largest set;
* The overlapping prices between both sets of price data contains no less than 90% of the prices in the smallest set;
* The pearsonr p-value for the calculated coefficient is less than 0.05.
These settings can all be changed in the call to Correlation.calculate_coefficient by passing values for max_set_size_diff_pct; overlap_pct; or max_p_value.
```
coefficient = Correlation.calculate_coefficient(symbol1_prices=symbol1_price_data,
symbol2_prices=symbol2_price_data, max_set_size_diff_pct=90,
overlap_pct=90, max_p_value=0.05)
```
The price data compared is 15 minute price data for the last 7 days. This can be changed by changing the values for the following variables:
```
utc_to = datetime.now(tz=timezone)
utc_from = utc_to - timedelta(days=7)
timeframe = mt5.TIMEFRAME_M15
```
The possible values for timeframe are:
|Timeframe|Description|
|--------------|-----------|
|TIMEFRAME_M1 |1 minute |
|TIMEFRAME_M2 |2 minutes |
|TIMEFRAME_M3 |3 minutes |
|TIMEFRAME_M4 |4 minutes |
|TIMEFRAME_M5 |5 minutes |
|TIMEFRAME_M6 |6 minutes |
|TIMEFRAME_M10 |10 minutes |
|TIMEFRAME_M12 |12 minutes |
|TIMEFRAME_M12 |15 minutes |
|TIMEFRAME_M20 |20 minutes |
|TIMEFRAME_M30 |30 minutes |
|TIMEFRAME_H1 |1 hour |
|TIMEFRAME_H2 |2 hours |
|TIMEFRAME_H3 |3 hours |
|TIMEFRAME_H4 |4 hours |
|TIMEFRAME_H6 |6 hours |
|TIMEFRAME_H8 |8 hours |
|TIMEFRAME_H12 |12 hours |
|TIMEFRAME_D1 |1 day |
|TIMEFRAME_W1 |1 week |
|TIMEFRAME_MN1 |1 month |