#策略:当沪深300中的股票如果开盘价低于10块则买入,在适当的条件下进行止盈止损
# 导入函数库
from jqdata import *# 初始化函数,设定基准等等
def initialize(context): # 设定沪深300作为基准 set_benchmark('000300.XSHG') # 开启动态复权模式(真实价格) #set_option('use_real_price', True) ### 股票相关设定 ### #佣金是给券商的,不管买入还是卖出都需要付手续费 #映花税:给国家交的税,只有买股票的时候需要缴纳该税 #type=stock表示类型为股票 # 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱 set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock') #g.xxx 表示的是一个全局变量。该变量在当前文件中任何位置都可以被使用。 #get_index_stocks函数是获取该沪深300所有的股票,返回的是一个列表 g.security = get_index_stocks('000300.XSHG') print(g.security)#根据回测频率进行自动调用。回测频率为每天或者每分钟。 def handle_data(context, data): #卖出股票的逻辑 for stock in g.security: #获取stock该股票的开盘价 p = get_current_data()[stock].day_open #context是上下文对象 #portfolio为账户信息对象 #positions:当前账户中持仓的所有股票。返回的是一个Position对象 #Position对象:某只股票的信息。 #total_amount持股数量 amount = context.portfolio.positions[stock].total_amount #avg_cost:开仓均价,就是该只股票的平均价格(3天连续买入,每天价格不一样,就算求出均价) cost = context.portfolio.positions[stock].avg_cost #如果持有该股票且开盘价大于均价则买出 if amount > 0 and p >= cost * 1.25: #order_target是下单函数中的一种,下单函数一共有四种 #将参数1表示的股票买卖到参数2的股数 order_target(stock,0) #止盈,买到0,就是全部卖出 elif amount > 0 and p <= cost * 0.9: order_target(stock,0) #止损,买到0,就是全部卖出 #买入股票的逻辑:一般逻辑都是先卖后买,这样可以有更多的钱 stock_list = [] for stock in g.security: #获取stock该股票的开盘价 p = get_current_data()[stock].day_open amount = context.portfolio.positions[stock].total_amount if p < 10 and amount == 0: #如果开盘价低于10块钱,并且没有持有该股票 #将股票加入到列表中,该列表里存储的是要买入的股票是哪些股 stock_list.append(stock) #将可用资金分配来买列表中存储的股票 #获取现在账户的可用资金 cash = context.portfolio.available_cash #使用可用资金平均购买列表中的每只股票 if len(stock_list) > 0: for stock in stock_list: order_value(stock,cash/len(stock_list))