python - 为什么会出现这个属性错误呢?

标签 python error-handling attributeerror quantitative-finance quantopian

下午好,

我是一名学生,我试图在 Quantopian 平台上实现 WaveTrend 振荡器策略:https://www.tradingview.com/script/2KE8wTuF-Indicator-WaveTrend-Oscillator-WT/ 我想做的是在指标高时卖出 AAPL,在指标低时买入。

它一直给我这个错误:

AttributeError: 'zipline.assets._assets.Equity' object has no attribute 'history'

有人可以帮助我吗?

import talib
import pandas

# ---------------------------------------------------  
n1, n2, period, stock = 10, 21, 12, sid(24)
# --------------------------------------------------- 
def initialize(context): 
    schedule_function(open_positions, date_rules.week_start(), time_rules.market_open())

def handle_data(context, data):
    if get_open_orders(): return
    close = stock.history(stock, 'close', period + 1, '1d')
    low = stock.history(stock, 'low', period + 1, '1d') 
    high = stock.history(stock, 'high', period + 1, '1d') 
    ap = (high+low+close)/3
    esa = talib.EMA(ap, timeperiod=n1)
    d = talib.EMA(abs(ap - esa), timeperiod=n1)
    ci = (ap - esa) / (0.015 * d)    
    wt1 = talib.EMA(ci, timeperiod=n2)
    wt1 = wt1.dropna()
    wt2 = talib.SMA(wt1, timeperiod=4)
    wt2 = wt2.dropna()

def open_positions(context, data):
    if data.can_trade(stock <  wt1):
        order_target_percent(stock, 2)
    elif data.can_trade(stock > wt2):
        order_target_percent(stock, -1)

最佳答案

好的,我想我已经让它正常工作了:

    import talib

# ---------------------------------------------------
n1, n2, period, stock = 10, 21, 60, sid(24)
# ---------------------------------------------------
def initialize(context):
    schedule_function(trade, date_rules.week_start(), time_rules.market_open())

def trade(context, data):
    ob = 80 #"Over Bought Level"  
    os = -80 #"Over Sold Level"
    if get_open_orders(): return
    close = data.history(stock, 'close', period + 1, '1d').dropna()
    low = data.history(stock, 'low', period + 1, '1d').dropna()
    high = data.history(stock, 'high', period + 1, '1d').dropna()
    ap = (high + low + close) / 3
    esa = talib.EMA(ap, timeperiod=n1)
    d = talib.EMA(abs(ap - esa), timeperiod=n1)
    ci = (ap - esa) / (0.015 * d)
    wt1 = talib.EMA(ci, timeperiod=n2)
    record(wt1 = wt1[-1], ob = ob,os = os)
    if data.can_trade(stock):
        if  wt1[-1] > os:
            order_target_percent(stock, 2)
        elif wt1[-1] < ob:
            order_target_percent(stock, 0)

关于python - 为什么会出现这个属性错误呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47451885/

相关文章:

error-handling - NServiceBus 的一个或多个错误队列?

python - AttributeError: 'Start' 对象没有属性 'draw'

Python pandas dataframe pivot 仅适用于 pivot_table() 但不适用于 set_index() 和 unstack()

Python - 如何在字典中添加多个键和值

python - 如何使用 BeautifulSoup 在网页中找到具有特定类的元素?

php - 如何从 PDO 中挤出错误消息?

python - 为什么会出现 AttributeError : module 'networkx' has no attribute 'average_neighbor_in_degree' ?

python - 与导入的模块共享调用者的命名空间

python - 在 Pandas 中使用 .loc 和 MultiIndex

worker 中的 Python 多处理和处理异常