【问题标题】:I keep getting AttributeError: 'NoneType' and I don't know how to fix it [duplicate]我不断收到AttributeError:'NoneType',我不知道如何解决它[重复]
【发布时间】:2021-11-30 17:37:06
【问题描述】:

我对 Python 编码比较陌生,但我一直在关注视频来制作一个原始的加密交易机器人。我不断收到这个错误:

  File "c:\Users\jate1\Desktop\Binance Bot.py", line 57, in <module>
    strategyTest('BTCUSDT', 0.0003)
  File "c:\Users\jate1\Desktop\Binance Bot.py", line 37, in strategyTest
    cumulRet = (df.Open.pct_change() + 1).cumprod() -1
AttributeError: 'NoneType' object has no attribute 'Open'

我认为我的变量显示累积收益存在一些错误,但我不确定如何修复它。我确保这与视频中的完全相同,但错误仍然存​​在。如果有人知道如何解决它,帮助我将不胜感激。如果您需要更多信息,请询问。下面我会附上我的代码,别担心,我在代码中有API密钥,只是这里没有。

from binance import *
import pandas as pd
from pandas.core import frame, indexing
import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np

# Get account information
client = Client(api_key, api__secret, tld='us')
print(client.get_account())

# Datastream via websocket

def getMinuteData(symbol, interval, lookback):
    frame = pd.DataFrame(client.get_historical_klines(symbol, interval, lookback+' min ago EST'))
    frame = frame.iloc[:, :6]
    frame.columns = ['Time', 'Open', 'High', 'Low', 'Close', 'Volume']
    frame = frame.set_index('Time')
    frame.index = pd.to_datetime(frame.index, unit='ms')
    frame = frame.astype(float)
    print(frame)

test = getMinuteData('BTCUSDT', '1m', '30')

# Trading Strategy - Buy if asset fell by more than 0.2% withint the last 30 min
# Sell if asset rises by more than 0.15% or falls further by 0.15%

def strategyTest(symbol, qty, entered=False):
    df = getMinuteData(symbol, '1m', '30')
    cumulRet = (df.Open.pct_change() + 1).cumprod() -1
    if not entered:
        if cumulRet [-1] < -0.002:
            order = client.create_order(symbol=symbol, side='BUY', type = 'MARKET', quantity=qty)
            print(order)
            entered = True
        else:
            print("No trade executed")
    
    if entered:
        while True:
            df = getMinuteData(symbol, '1m', '30')
            sinceBuy = df.loc[df.index > pd.to_datetime(order['transactTime'], unit='ms')]
            if len(sinceBuy) > 0:
                sinceBuyReturns = (sinceBuy.Open.pct_change() + 1).cumprod() -1
                if sinceBuyReturns[-1] > 0.0015 or sinceBuyReturns[-1] < -0.0015:
                    order = client.create_order(symbol=symbol, side='SELL', type = 'MARKET', quantity=qty)
                    print(order)
                    break

strategyTest('BTCUSDT', 0.0003)```

【问题讨论】:

  • getMinuteData 函数的末尾添加 return frame。你没有从那个函数返回任何东西

标签: python pandas attributeerror binance cryptocurrency


【解决方案1】:

代替:

    print(frame)

用途:

    return frame

getMinuteData函数的最后一行,

【讨论】:

    猜你喜欢
    • 2015-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 2021-06-06
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多