帮个忙,股票卖出问题


(ypf007) #1
本来是持仓5天,但是我也用了择时策略,如果想在股票走势下降时,卖出所有股票,没下降时就继续持仓5天,那么,这个代码该如何描述呢

(iQuant) #2
# 下面注释代码为大盘择时,大家可以根据自己情况选择使用      
date = data.current_dt.strftime('%Y-%m-%d')
stock_hold_now = [equity.symbol for equity in context.portfolio.positions]
bench_mark_ma_short = D.history_data(['000300.SHA'],'2006-01-01', date, ['close'])['close'].tail(10).mean()
bench_mark_ma_long = D.history_data(['000300.SHA'],'2006-01-01', date, ['close'])['close'].tail(40).mean()
if bench_mark_ma_short < bench_mark_ma_long and len(stock_hold_now) > 0:
    for j in stock_hold_now:
        context.order_target_percent(context.symbol(j), 0)
    return   # 如果当天并不需要其他买卖操作,那么可以直接返回!

如果你希望更改买卖逻辑,你可以将这段代码加入到您的m2_handle_data_bigquant_run函数中。


(ypf007) #3

如果说,自己有个时间数据呢,我保存在一个.csv里,然后通过里面的时间趋势,股票下降时,卖出所有股票


(iQuant) #4

可以的啊,你可以通过pd.read_csv 把该csv文件读到内存里,然后直接使用。非常方便!


(luckychan) #5

运行出现如下错误:

NameError Traceback (most recent call last)
in ()
1 # 下面注释代码为大盘择时,大家可以根据自己情况选择使用
2 stock_hold_now = [equity.symbol for equity in context.portfolio.positions]
----> 3 bench_mark_ma_short = D.history_data([‘000300.SHA’],‘2006-01-01’, date, [‘close’])[‘close’].tail(10).mean()
4 bench_mark_ma_long = D.history_data([‘000300.SHA’],‘2006-01-01’, date, [‘close’])[‘close’].tail(40).mean()
5 if bench_mark_ma_short < bench_mark_ma_long and len(stock_hold_now) > 0:

NameError: name ‘date’ is not defined

这个“date”是不是自动以最新日期代入的意思,但在文档里找不到这个参数。


(iQuant) #6

date在变量里已经体现出来了,详细请看上面的回答。


(luckychan) #7

可以了,谢谢!


(Lingking) #8

都不知道这个代码该插入在整体的哪个部分,有人能说说吗,是放在最上还是最下


(达达) #10

您可以根据您需要的功能修改对应的可视化模块
具体参看
https://community.bigquant.com/t/AI可视化模板的交易控制/8631