print('-------------示例:每日买入100股指定股票------------------')
#初始化函数,设定基准
def initialize(context): #初始化代码
#设定沪深300作为基准
set_benchmark('002466.XSHE')
run_daily(period,time='every_bar') #频率为每天
g.security='002466.XSHE'
def period(context):
#放置周期循环的代码
order(g.security,100)
print('-----------------聚宽常用的下单函数------------------------')
#买卖一定数量的股票
print('----order--------')
order(security,amount)#security表示股票代码,amount表示股数,整数是买,负数是卖
#买入100股平安银行
order('000001.XSHE',100)
#卖出
order('000001.XSHE',-100)
print('------order_target--------')
order_target(security,amount)
#通过买卖,将股票调整至一定数量(股)
# 调整平安银行的持股数量至1000股
# 即,如果目前平安银行的持股数量低于1000股就买入,高于就是卖出,不高不低就不动。
order_target("000001.XSHE", 1000)
print('------order_value--------')
#买卖一定价值量(单位:元)的股票
opder_value(security,value)
#value为负数时表示卖出
# 买入10000元的平安银行
# 如果当前股票市价是10元,则代表买入1000股
# 如果除不开系统会自动调整成相近的合理数量。卖出时也会。
order_value("000001.XSHE", 10000)
# 卖出10000元的平安银行
# 如果当前股票市价是100元,则代表卖出100股
order_value("000001.XSHE", -10000)
print('--------order_target_value-------------')
#通过买卖,将股票仓位调整至一定价值量(单位:元)
#value参数表示价值量
order_target_value(security,value)
order_target_value('000001.XSHE',10000)
#调整平安银行的持股价值至1万元,如果当前持仓的平安银行股票市值高于1万就卖出,低于就买入
print('--------------------下单函数中的其他参数----------------------------')
print('-------------style参数可设置下单的类型-------------')
style=MarketOrderStyle() #下市单价,默认
style=LimitOrderStyle(P) #下限单价,买入时价格不得高于P,卖出时价格不得低于P(期货开平空逻辑与开平多逻辑相反)
#按天回测中,由于都是使用bar线撮合,所以下限单价时,当前价不满足限价+滑点,那么都是盘后才成交,盘中仓位及成交信息不会进行更新,下午3点后才会进行更新,所以限价单建议使用分钟频率
#限价单不是以一个指定的价格成交,而是以等于或者低于设置的委托价格 成交
order('000001.XSHE',100) #下一个市单价
order('000001.XSHE',100,MarketOrderStyle()) #下一个市单价,功能同上
order('000001.XSHE',100,LimitOrderStyle(10.0)) #以10块钱的价格下一个限单价
print('---------side设置下单多空方向----------')
side='long' #开/平多仓,默认为long
side='short' #开平空仓,股票、基金不能开空
#注意,不会主动将多空直接对冲掉,而是在long_position和short_position中分别进行操作,side也是分别对两个 仓位进行操作
#比如您之前仓位中有IF1901十手多单,现在如果下一个order('IF1901.CCFX',10,side='short'),那么long_position和short_position中将各自有一个10手的单,而不是将IF1901的多单对冲掉
print('-------pindex指定仓位------')
#在使用set_subportfolios创建了多个仓位时,指定subportfolio 的序号, 从 0 开始, 比如 0 指定第一个 subportfolio, 1 指定第二个 subportfolio,默认为0。
print('-------close_today 是否优先平今仓--------')
# 平今字段,仅对上海国际能源中心,上海期货交易所,中金所生效,其他交易所将会报错(其他交易所没有区分平今与平昨,均按照先开先平的方法处理)。
# 对上海国际能源中心,上海期货交易所,中金所的标的:
close_today = True #只平今仓
close_today = False #优先平昨仓,昨仓不足部分平进仓
print('---------------------下单却成交失败可能有哪些原因-------------------')
'''
1.使用order_target或order_target_value,经过调整后目标数量以满足,不再下单,交易函数返回None
2.可用资金不足,调整后不足一手,不再下单,返回None
3.股票停牌,返回None
4.股票未上市或者已退市,返回None
5.股票不存在/代码错误(注意代码后缀),返回None
6.为股票或基金开了空单,返回None
7.选择了不存在的仓位号,如没有建立多个仓位,而设定pindex的数大于0,交易函数返回None
8.限价单未满足(注意滑点对限价单的影响),返回Order对象,在未成交之前订单状态为open
使用下单函数时,本身下单数就是0手,多打印下相关参数
10.为了避免以不合理的价格对标的进行下单,模拟盘在开盘时会检查开盘(9:25)到下单时刻的累积成交量,若为0则会拒绝,
提示Warning,该标的截止到目前成交量为0,暂时无法成交
'''
'''注意,当订单便为废单时,下单函数会返回None而不是order对象,此时直接调用order对象的属性会引发报错'NoneType' object has no attribute "XXX"'''
#解决方案
Order=order('000001.XSHE',1000)
if not Order:
print('下单失败')
if Order:
print('下单成功')