Код скрининга акций не обнаруживает бычьи паттерны поглощения

Я пытался следовать коду на видео на YouTube (https://www.youtube.com/watch?v=nPD_hZgwS00), который демонстрирует, как создать скринер акций. Я просмотрел видео по ссылке выше, а также три предыдущих видео. После этих видеороликов я смог обнаружить бычью модель поглощения на одной акции (тикер PZZA). Однако при вставке этой функции в блок кода ниже, как это сделал создатель контента из видео, он не смог обнаружить бычьих моделей поглощения. Результатом кода было:

  1. AMCR = 12.06.2020 - бычье поглощение
  2. HBAN = 12.06.2020 - бычье поглощение
  3. 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

Этот модуль обеспечивает распознавание множества свечных паттернов, а также других параметров, необходимых для технического анализа.

Другие вопросы по тегам