#conda envs:vectorbt_env import warnings import vectorbt as vbt import numpy as np import pandas as pd from datetime import datetime, timedelta import pytz from dateutil.parser import parse import ipywidgets as widgets from copy import deepcopy from tqdm import tqdm import imageio from IPython import display import plotly.graph_objects as go import itertools import dateparser import gc import math from tools import dbtools
# Enter your parameters here seed = 42 symbol = '002594.XSHE' metric = 'total_return'
start_date = datetime(2020, 1, 1, tzinfo=pytz.utc) # time period for analysis, must be timezone-aware end_date = datetime(2023,1,1, tzinfo=pytz.utc) time_buffer = timedelta(days=100) # buffer before to pre-calculate SMA/EMA, best to set to max window freq = '1D'
# We perform the same steps, but now we have 4851 columns instead of 1 # Each column corresponds to a pair of fast and slow windows # Generate crossover signals dmac_entries = fast_ma.ma_crossed_above(slow_ma) dmac_exits = fast_ma.ma_crossed_below(slow_ma) print(dmac_entries.columns) # the same for dmac_exits
# Convert this array into a matrix of shape (99, 99): 99 fast windows x 99 slow windows dmac_perf_matrix = dmac_perf.vbt.unstack_to_df(symmetric=True, index_levels='fast_ma_window', column_levels='slow_ma_window') print("dmac_perf_matrix.shape") print(dmac_perf_matrix.shape)
dmac_perf_matrix.vbt.heatmap( xaxis_title='Slow window', yaxis_title='Fast window').show_svg() # remove show_svg() for interactivity