Python'pandas'在0.23.0版本上没有属性'ewm',但在0.18.0版本上可以

时间:2018-08-10 11:10:10

标签: python pandas

以下代码当前适用于Pandas 0.18.0及更低版本,但不适用于Pandas 0.23.0等较新版本的Pandas。请告知我如何在最新的Pandas 0.23.0版本上运行它。

from binance.client import Client
import numpy as np
import pandas as pd
import smtplib
import time
import yaml

CONFIG = yaml.load(open('./CONFIG.yml'))

API_KEY = CONFIG['binance_api']['key']
API_SECRET = CONFIG['binance_api']['secret']
user = CONFIG['gmail']['user']
passwd = CONFIG['gmail']['password']

client = Client(API_KEY, API_SECRET)

# against ETH
SYMBOLS = ('ADA', 'ADX', 'BAT', 'BCC', 'DASH', 'EOS', 'IOTA',
        'LTC', 'NEO', 'OMG', 'STORJ', 'XLM', 'NANO', 'XRP', 'XVG', 'ZEC')
RSI_N = 14
RSI_THRESHOLD = 8
RUN_INTERVAL_MINS = 30

def send_email(rsi_values):
    if len(rsi_values) > 0:

        message = '\n'.join('{0:>8} {1:.2f}'.format(symbol, rsi) for (symbol, rsi) in rsi_values)
        email_text = 'From: {0}\nTo: {1}\nSubject: Stock Recommendations\n\n{2}'.format(user, user, message)
        try:
            server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
            server.ehlo()
            server.login(user, passwd)
            server.sendmail(user, user, email_text)
            server.close()
        except:
            pass


while True:
    rsi_values = []
    for SYMBOL in SYMBOLS:
        klines = client.get_historical_klines(SYMBOL + 'ETH', Client.KLINE_INTERVAL_30MINUTE, '{} hours ago UTC'.format((RSI_N + 3) // 2))
        closings = np.asarray(klines, dtype=np.float)[-RSI_N - 1:, 4]

        diffs = np.diff(closings)
        ups = diffs.clip(min=0)
        downs = diffs.clip(max=0)
        ups_avg = pd.ewma(ups, span=RSI_N)[-1]
        downs_avg = -pd.ewma(downs, span=RSI_N)[-1]
        rs = ups_avg / downs_avg
        rsi = 100 - 100 / (1 + rs)

        rsi_values.append((SYMBOL, rsi))

    print('\n'.join('{0:>8} {1:.2f}'.format(symbol, rsi) for (symbol, rsi) in rsi_values))
    rsi_values = list(filter(lambda x: x[1] < RSI_THRESHOLD, rsi_values))

    send_email(rsi_values)

    time.sleep(60 * RUN_INTERVAL_MINS)

我在使用Pandas 0.18.0时收到警告消息,但它正在起作用:

min_candle.py:73: FutureWarning: pd.ewm_mean is deprecated for ndarrays and will be removed in a future version
  downs_avg = -pd.ewma(downs, span=RSI_N)[-1]

在Pandas 0.23.0上运行时出错

line 43, in <module>
    ups_avg = pd.ewm(ups, span=RSI_N)[-1]
AttributeError: module 'pandas' has no attribute 'ewm'

我尝试过等等。但是没有运气:

    ups_avg = pd.DataFrame.ewm(ups, span=RSI_N)[-1]
downs_avg = -pd.DataFrame.ewm(downs, span=RSI_N)[-1]

我也尝试过:

 ups = diffs.clip(min=0)
     downs = diffs.clip(min=0)
     df_ups = pd.DataFrame(ups)
     df_downs = pd.DataFrame(downs)
     ups_avg = df_ups.ewm(span=RSI_N)
     downs_avg = df_downs.ewm(span=RSI_N)


Traceback (most recent call last):
  File "C:/Users/xx/PycharmProjects/rsi/rsi_1min_candle.py", line 140, in <module>
    main_run()
  File "C:/Users/xx/PycharmProjects/rsi/rsi_1min_candle.py", line 132, in main_run
    if check_rsi(BASE_ASSET) >= 72:
  File "C:/Users/xx/PycharmProjects/rsi/rsi_1min_candle.py", line 86, in check_rsi
    rs = ups_avg / downs_avg
TypeError: unsupported operand type(s) for /: 'EWM' and 'EWM'

0 个答案:

没有答案