Не уверен насчет Candlestick
, но в pandas вы можете попробовать что-то вроде этого. Примечание: я предполагаю, что данные имеют по 1 строке для каждого рабочего дня уже и отсортированы. Первое, что нужно сделать, это создать столбец с красным с True, где условие для красной свечи, как описано в вашем вопросе, - True :
df['red'] = df['close'].lt(df['open'])&df['close'].lt(df['close'].shift())
Затем вы хотите увидеть, происходит ли это 4 дня подряд, и, предполагая, что данные сортируются по возрастанию (обычно), идея состоит в том, чтобы перевернуть кадр данных с помощью [:: - 1], используйте rolling
с окном 4, sum
столбец красного цвета, созданный чуть выше, и проверьте, где он равен 4.
df['next_4days_red'] = df[::-1].rolling(4)['red'].sum().eq(4)
, а затем, если вы хотите, чтобы дни были в начале 4 последовательных красные торговые дни, которые вы делаете loc
:
df.loc[df['next_4days_red'], 'datetime'].tolist()
Вот небольшой пример с фиктивными переменными:
df = pd.DataFrame({'close': [10,12,11,10,9,8,7,10,9,10],
'datetime':pd.bdate_range('2020-04-01', periods=10 )})\
.assign(open=lambda x: x['close']+0.5)
df['red'] = df['close'].lt(df['open'])&df['close'].lt(df['close'].shift())
df['next_4days_red'] = df[::-1].rolling(4)['red'].sum().eq(4)
print (df.loc[df['next_4days_red'], 'datetime'].tolist())
[Timestamp('2020-04-03 00:00:00'), Timestamp('2020-04-06 00:00:00')]
Примечание: он фиксирует две последовательные даты, потому что это 5 дней подряд уменьшить, не уверен, что в этом случае вы хотели две даты