Код скрининга акций не обнаруживает бычьи паттерны поглощения
Я пытался следовать коду на видео на YouTube (https://www.youtube.com/watch?v=nPD_hZgwS00), который демонстрирует, как создать скринер акций. Я просмотрел видео по ссылке выше, а также три предыдущих видео. После этих видеороликов я смог обнаружить бычью модель поглощения на одной акции (тикер PZZA). Однако при вставке этой функции в блок кода ниже, как это сделал создатель контента из видео, он не смог обнаружить бычьих моделей поглощения. Результатом кода было:
- AMCR = 12.06.2020 - бычье поглощение
- HBAN = 12.06.2020 - бычье поглощение
- UAA = 2020-06-12 - бычье поглощение
Однако эти результаты кажутся неверными, если посмотреть на графики в tradingview или другой платформе или на файлы csv, которые были сгенерированы создателем контента в предыдущей части серии. Вот значения открытия и закрытия для трех акций, обозначенных кодом:
AMCR 2020-06-11 Открыто: 9.57, Закрыто: 9.19 AMCR 2020-06-12 Открыто: 10, Закрыто: 9.81
HBAN 2020-06-11 Открыто: 9,82, Закрыто: 9,48 HBAN 2020-06-12 Открыто: 10,03, Закрыто: 9,89
UAA 2020-06-11 Открыто: 9.6, Конец: 9.47 UAA 2020-06-12 Открыто: 10.01, Конец: 9.7
Здесь вы можете видеть, что цена открытия текущего дня (2020-06-12) для каждого из них выше, чем цена закрытия предыдущего дня (2020-06-11), хотя в моем коде указано, что я хочу, чтобы цена открытия текущего дня была быть меньше, чем закрытие предыдущего дня.
После целого дня попыток я не могу определить, где я ошибся. Любая помощь будет оценена. Я планирую использовать этот код, чтобы проверить, эффективен ли он на моем бумажном торговом счете, в качестве забавного упражнения по использованию кода вместо поиска акций для ручной торговли на веб-сайтах.
С уважением,
wdg
import csv
def is_bullish_candlestick(candle):
return candle['Close'] > candle['Open']
def is_bearish_candlestick(candle):
return candle['Close'] < candle['Open']
def is_bullish_engulfing(candles, index):
current_day = candles[index]
previous_day = candles[index-1]
if is_bearish_candlestick(previous_day)\
and current_day['Close'] > previous_day['Open']\
and current_day['Open'] < previous_day['Close']:
return True
return False
def is_bearish_engulfing(candles, index):
current_day = candles[index]
previous_day = candles[index-1]
if is_bullish_candlestick(previous_day)\
and current_day['Open'] > previous_day['Close']\
and current_day['Close'] < previous_day['Open']:
return True
return False
sp500_file = open('C:/Users/William/Desktop/Detecting Candlestick Patterns in Python/sp500_companies.csv')
sp500_companies = csv.reader(sp500_file)
for company in sp500_companies:
ticker, company_name = company
history_file = open('C:/Users/William/Desktop/Detecting Candlestick Patterns in Python/SP500_history/{}.csv'.format(ticker))
reader = csv.DictReader(history_file)
candles = list(reader)
#now to get most recent date
candles = candles[-2:]
if len(candles) > 1:
if is_bullish_engulfing(candles, 1):
print("{} = {} is bullish engulfing".format(ticker, candles[1]['Date']))
2 ответа
Проблема, вероятно, заключается в этой строке: предыдущий_день = Candles[index-1]
Если вы хотите сместить один день в кадре данных временного ряда, используйте:
предыдущий_день = свечи.DateOffset(дни=1)
Или самый простой способ переместить данные предыдущего дня в сегодняшнюю позицию для удобства расчета: предыдущий_день = Candles.shift(1)
Пожалуйста, обратитесь к DateOffsetShift
Попробуйте https://github.com/mrjbq7/ta-lib
Этот модуль обеспечивает распознавание множества свечных паттернов, а также других параметров, необходимых для технического анализа.