1

我试图遵循 YouTube 视频 ( https://www.youtube.com/watch?v=nPD_hZgwS00 ) 上的代码,该视频演示了如何制作股票筛选器。我观看了上面链接的视频以及之前的三个视频。在这些视频之后,我能够在单个股票(股票代码 PZZA)中检测到看涨吞没模式。然而,正如视频中的内容创建者所做的那样,将该函数插入到下面的代码块中时,它未能检测到看涨吞没模式。代码的输出是:

  1. AMCR = 2020-06-12 看涨吞没
  2. HBAN = 2020-06-12 看涨吞没
  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']))
4

2 回答 2

0

问题可能出在这一行:previous_day=candles[index-1]

如果要在时间序列数据框中偏移一天,请使用:

previous_day = 蜡烛.DateOffset(days=1)

或者将前一天的数据移动到今天的位置以便于计算的最简单方法:previous_day = candles.shift(1)

请参考 DateOffset 移位

于 2022-02-28T13:08:30.820 回答
-1

试试https://github.com/mrjbq7/ta-lib

该模块提供了大量烛台模式识别以及技术分析所需的其他参数。

于 2021-05-13T04:32:23.140 回答