'NoneType' object has no attribute 'set_current'
时间: 2023-10-28 13:05:12 浏览: 98
这个错误通常表示你在试图使用 NoneType 对象的一个方法或属性,但是该对象并没有被正确地初始化或赋值。可能的原因包括:
1. 对象没有被正确地创建或初始化。
2. 对象被删除或已经被销毁。
3. 对象的值被设置为 None。
要解决这个问题,你需要检查代码中的变量和对象,确保它们被正确地初始化和赋值。如果你使用了一个函数或方法,你需要确保该函数或方法返回一个正确的对象,而不是 None 或其他无效值。你还可以使用断言或其他调试技术来检查代码中的变量和对象。
相关问题
import jqdata # 初始化聚宽账号密码 def initialize(context): # 设置回测日期区间 set_benchmark('000300.XSHG') set_option('use_real_price', True) # 设置买入的股票数量上限 g.max_stock_count = 5 def handle_data(context, data): # 获取当前日期 current_date = context.current_dt.date() # 获取股票池中的股票列表 stocks = get_index_stocks('000852.XSHG') # 按照股票池中的股票进行遍历 for stock in stocks: # 判断股票是否满足买入条件 if check_buy_condition(stock, current_date, context): buy_stock(stock, context) # 判断持有的股票是否满足卖出条件 if check_sell_condition(stock, current_date, context): sell_stock(stock, context) def check_buy_condition(stock, current_date, context): # 判断股票是否连续下跌三天 prices = attribute_history(stock, 3, '1d', ['close']) if len(prices) == 3 and prices['close'][-1] < prices['close'][-2] < prices['close'][-3]: return True else: return False def buy_stock(stock, context): # 判断当前持仓的股票数量是否已达上限 if len(context.portfolio.positions) >= g.max_stock_count: return # 买入股票 order_value(stock, context.portfolio.cash / g.max_stock_count) def check_sell_condition(stock, current_date, context): # 获取持有股票的买入日期 buy_date = context.portfolio.positions[stock].init_time.date() # 判断是否满足卖出条件 if current_date - buy_date >= 3: # 判断是否亏损超过5% if (context.portfolio.positions[stock].last_price - context.portfolio.positions[stock].avg_cost) / context.portfolio.positions[stock].avg_cost <= -0.05: return True return False def sell_stock(stock, context): # 卖出股票 order_target(stock, 0)当中buy_date = context.portfolio.positions[stock].init_time.date()报错'NoneType' object has no attribute 'date'
这个错误是因为在`check_sell_condition`函数中,`context.portfolio.positions[stock].init_time`返回了`None`,没有日期属性。这可能是因为你在买入股票之前没有设置买入日期。你可以在买入股票时设置买入日期,例如:
```python
def buy_stock(stock, context):
# 判断当前持仓的股票数量是否已达上限
if len(context.portfolio.positions) >= g.max_stock_count:
return
# 设置买入日期
buy_date = context.current_dt.date()
# 买入股票
order_value(stock, context.portfolio.cash / g.max_stock_count, date=buy_date)
```
然后在`check_sell_condition`函数中,你可以直接使用`buy_date`判断是否满足卖出条件:
```python
def check_sell_condition(stock, current_date, context):
# 获取持有股票的买入日期
buy_date = context.portfolio.positions[stock].init_time.date()
# 判断是否满足卖出条件
if current_date - buy_date >= 3:
# 判断是否亏损超过5%
if (context.portfolio.positions[stock].last_price - context.portfolio.positions[stock].avg_cost) / context.portfolio.positions[stock].avg_cost <= -0.05:
return True
return False
```
这样就可以避免报错了。
阅读全文