为什么会发生这个 AttributeError?
Why does this AttributeError happen?
下午好,
我是一名学生,我正在尝试在 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)
下午好,
我是一名学生,我正在尝试在 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)