```python
# 获取信号
def get_signal(context):
...
# 表不为空,持有排名前三名的股
if g.df.shape[0] > 12:
g.buy.append(str(g.df.iloc[0, 0]))
g.buy.append(str(g.df.iloc[1, 0]))
g.buy.append(str(g.df.iloc[2, 0]))
log.info("交易信号:持有 %s" % (g.buy))
return 'BUY'
# 表不为空,持有排名前两名的股
if g.df.shape[0] > 12: # 表不为空,持有排名前两名的股
g.buy.append(str(g.df.iloc[0, 0]))
g.buy.append(str(g.df.iloc[1, 0]))
log.info("交易信号:持有 %s" % (g.buy))
return 'BUY'
```
粗略一看,`持有排名前两名的股`的代码永远不会被执行,都是>12,这是明显的逻辑错误。
仔细一看,看这代码写的,逻辑混乱哦。g.df.shape[0] > 12,表示g.df的行数>12行,这也是永远不可能的,因为备选的etf总共就只有7只。所以,上面贴出来的代码永远都不会被执行。
看回测结果,永远都只会持有一只基金,而不会出现2只,或者3只。
@智习 ,@热爱大自然
2019-12-13