<jupyter_start><jupyter_text>Подготовка данных<jupyter_code>df = pd.read_csv('../csv/SBER_101001_201001_1d.csv',
		delimiter=',',
		parse_dates=[[0,1]],
		index_col=0,
		names=['Date','Time','Open', 'High', 'Low', 'Close', 'Volume'],
		header=0,
		encoding='utf-8'
	)
df['Buy'] = (df['Close']-df['Open'])/df['Open']
df['Sell'] = (df['Open']-df['Close'])/df['Open']<jupyter_output><empty_output><jupyter_text>Вспомогательные функции<jupyter_code>def calc_n_days(values, n):
    """Проверяет есть ли n дней подряд открытия или закрытия для покупок или продаж.

    Args:
		values [list of float]: массив разницы в % между открытием и закрытие за n предыдущих дней
        n [int]: количество дней, за которые нужно проверять

	Returns:
		[float]: разница в % между открытием и закрытием за текущий день (или NaN)
    """
    if (values[:n] < 0).all():
        return values[-1]
    else:
        return np.nan
def calc_n_days_buysell(values, n):
    """Проверяет есть ли n дней подряд открытия или закрытия для покупок и продаж вместе.

    Args:
		values [list of float]: массив разницы в % между открытием и закрытие за n предыдущих дней
        n [int]: количество дней, за которые нужно проверять

	Returns:
		[float]: разница в % между открытием и закрытием за текущий день c учетом покупки или продажи (или NaN)
    """

    if (values[:n] < 0).all():
        return values[-1]
    elif (values[:n] > 0).all():
        return -1*values[-1]
    else:
        return np.nan<jupyter_output><empty_output><jupyter_text>Основной цикл для рассчёта<jupyter_code># n - количество дней, цикл считает до n-1
for n in tqdm(range(1,6)):
    buy_n_days = 'Buy_'+str(n)+'_Days'
    sell_n_days = 'Sell_'+str(n)+'_Days'
    buysell_n_days = 'Buysell_'+str(n)+'_Days'
    equity_buy = 'Equity_'+buy_n_days    
    equity_sell = 'Equity_'+sell_n_days    
    equity_buysell = 'Equity_'+buysell_n_days

    df[buy_n_days] = df['Buy'].rolling(n+1).apply(calc_n_days, args=(n,))
    df[equity_buy] = df[buy_n_days].cumsum().apply(np.exp)

    df[sell_n_days] = df['Sell'].rolling(n+1).apply(calc_n_days, args=(n,))
    df[equity_sell] = df[sell_n_days].cumsum().apply(np.exp)

    df[buysell_n_days] = df['Buy'].rolling(n+1).apply(calc_n_days_buysell, args=(n,))
    df[equity_buysell] = df[buysell_n_days].cumsum().apply(np.exp)<jupyter_output>100%|██████████| 5/5 [01:30<00:00, 18.16s/it]<jupyter_text>Графики<jupyter_code>df[[
    'Equity_Buy_1_Days',
    'Equity_Buy_2_Days',
    'Equity_Buy_3_Days',
    'Equity_Buy_4_Days',
    'Equity_Buy_5_Days'
]].interpolate(method='index').plot(figsize=(10,7))

df[[
    'Equity_Buy_1_Days',
    'Equity_Buy_2_Days',
    'Equity_Buy_3_Days',
    'Equity_Buy_4_Days',
    'Equity_Buy_5_Days'
]].count()
df[[
    'Equity_Sell_1_Days',
    'Equity_Sell_2_Days',
    'Equity_Sell_3_Days',
    'Equity_Sell_4_Days',
    'Equity_Sell_5_Days'
]].interpolate(method='index').plot(figsize=(10,7))

df[[
    'Equity_Sell_1_Days',
    'Equity_Sell_2_Days',
    'Equity_Sell_3_Days',
    'Equity_Sell_4_Days',
    'Equity_Sell_5_Days'
]].count()
df[[
    'Equity_Buysell_1_Days',
    'Equity_Buysell_2_Days',
    'Equity_Buysell_3_Days',
    'Equity_Buysell_4_Days',
    'Equity_Buysell_5_Days'
]].interpolate(method='index').plot(figsize=(10,7))

df[[
    'Equity_Buysell_1_Days',
    'Equity_Buysell_2_Days',
    'Equity_Buysell_3_Days',
    'Equity_Buysell_4_Days',
    'Equity_Buysell_5_Days'
]].count()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.15894614939200927, 'fraction_numerical': 0.025188187608569775, 'mean_word_length': 4.554662379421222, 'pattern_counts': {'":': 0, '<': 19, '<?xml version=': 0, '>': 17, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '469681', 'license': 'MIT', 'n_tokens_mistral': 1616, 'n_tokens_neox': 1595, 'n_words': 235, 'path': 'assets/images/2020/11/very-simple-trading-strategy-2.ipynb', 'repo_name': 'pieceofdata/pieceofdata.github.io', 'size': '3454'}