pythonerror-handlingattributeerrorquantitative-financequantopian

Why does this AttributeError happen?


Good afternoon,

I am a student and I was trying to implement the WaveTrend Oscillator strategy on the Quantopian Platform: https://www.tradingview.com/script/2KE8wTuF-Indicator-WaveTrend-Oscillator-WT/ what I wanted to do is selling AAPL when the indicator is high and buying it when is low.

It keeps giving me this error:

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

Can anyone help me?

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)

Solution

  • ok, I think I made it work properly:

        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)