2022-03-20 17:11:00 +01:00 | | | import pytest
|
| | | import numpy.testing as npt
|
| | |
|
| | | from common.utils import *
|
2023-12-10 11:47:25 +01:00 | | | from common.gen_signals import *
|
| | | from common.gen_labels_topbot import *
|
2022-03-20 17:11:00 +01:00 | | |
|
| | |
|
| | | def test_extremum_labels():
|
| | | data = [10, 30, 50, 70, 90, 70, 50, 30, 9]
|
| | | data = [10, 40, 30, 70, 90, 50, 60, 30, 9]
|
| | | sr = pd.Series(data)
|
| | | sr = pd.Series(data * 2)
|
| | | level_frac = 0.5
|
| | | tolerance_frac = 0.1
|
| | |
|
| | | maximums = find_all_extremums(sr, True, level_frac, tolerance_frac)
|
| | | minimums = find_all_extremums(sr, False, level_frac, tolerance_frac)
|
| | |
|
| | | # Merge into a sequence of interleaving minimums and maximums
|
| | | all = list()
|
| | | all.extend(maximums)
|
| | | all.extend(minimums)
|
| | |
|
| | | all.sort(key=lambda x: x[1])
|
| | |
|
| | | # We have indexes (x coordinates) and need to find their y values
|
| | | extr_x = [x[1] for x in all]
|
| | | extr_y = [sr[x] for x in extr_x]
|
| | | extr_df = pd.DataFrame({'x': extr_x, 'y': extr_y})
|
| | |
|
| | | import seaborn as sns
|
| | | # https://matplotlib.org/stable/api/markers_api.html
|
| | | # '-', '--', '-.', ':', 'None', ' ', '', 'solid', 'dashed', 'dashdot', 'dotted'
|
| | | sns.lineplot(data=sr)
|
| | | sns.lineplot(data=extr_df, x="x", y="y", marker="o", markersize=10, linestyle='dotted') # "^" 'v'
|
| | |
|
| | | pass
|
| | |
|
| | |
|
| | | def test_interval_and_aggregation():
|
| | | data = [10, 40, 30, 70, 90, 50, 60, 30, 9]
|
| | | sr = pd.Series(data * 2)
|
| | |
|
| | | df = pd.DataFrame(data={'close': sr, 'score': sr / 10})
|
| | |
|
| | | level_frac = 0.5
|
| | | tolerance_frac = 0.1
|
| | |
|
| | | # For debugging
|
| | | maximums = find_all_extremums(sr, True, level_frac, tolerance_frac)
|
| | |
|
| | | # Add label
|
2022-12-18 10:52:17 +01:00 | | | df, _ = add_extremum_features(df, column_name='close', level_fracs=[level_frac], tolerance_frac=tolerance_frac, out_names=['is_close_top'])
|
2022-03-20 17:11:00 +01:00 | | |
|
| | | # Aggregate score with chosen parameters
|
2023-02-04 19:35:54 +01:00 | | | aggregate_scores(df, 'score_agg', ['score'], None, 2)
|
2022-03-20 17:11:00 +01:00 | | |
|
| | | threshold = 6
|
2023-02-03 19:52:07 +01:00 | | | interval_df = find_interval_precision(df, label_column='is_close_top', score_column='score_agg', threshold=threshold)
|
2022-03-20 17:11:00 +01:00 | | |
|
| | | pass
|