79 lines
3.3 KiB
Markdown
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 | |