
def initialize(context):股票配资公司排行
# 定义一个全局变量, 保存要操作的股票,如000001平安银行
g.security = '000001.XSHE'
# 运行函数
run_daily(market_open, time='every_bar')
# 每个单位时间(如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次)调用一次
def market_open(context):
if g.security not in context.portfolio.positions:
order(g.security, 1000)
else:
order(g.security, -800)
图片
QMT代码结构
1#示例说明:本策略,在回测的每个周期买入主图标的2 def init(C):3 #init handlebar函数的入参是ContextInfo对象 可以缩写为C4 #设置测试标的为主图品种5 C.stock= C.stockcode + '.' +C.market6 #accountid为测试的ID 回测模式资金账号可以填任意字符串7 C.accountid = "testS"8 def handlebar(C):9 # handlebar在回测时,会在回测周期的每根bar被执行一次10 # handlebar在实时行情下,会随着主图tick的更新被调用11 # passorder是QMT的综合下单函数,具体参数字段参考官方文档12 passorder(23, 1101,C.accountid, C.stock, 5, -1, 1, C)
QMT中,所有数据都存储在本地,所有的策略计算都在电脑本地运行,您可以自由使用下载到的数据与python库。
图片
聚宽代码移植QMT示例
聚宽代码当价格高于5日均线平均价格1.05时买入,当价格低于5日平均价格0.95时卖出。# 导入函数库import jqdata# 初始化函数,设定要操作的股票、基准等等def initialize(context):# 定义一个全局变量, 保存要操作的股票# 000001(股票:平安银行)g.security = '000001.XSHE'# 设定沪深300作为基准set_benchmark('000300.XSHG')# 开启动态复权模式(真实价格)set_option('use_real_price', True)# 每个单位时间(如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次)调用一次def handle_data(context, data):security = g.security# 获取股票的收盘价close_data = attribute_history(security, 5, '1d', ['close'])# 取得过去五天的平均价格MA5 = close_data['close'].mean()# 取得上一时间点价格current_price = close_data['close'][-1]# 取得当前的现金cash = context.portfolio.cash# 如果上一时间点价格高出五天平均价5%, 则全仓买入if current_price > 1.05*MA5:# 用所有 cash 买入股票order_value(security, cash)# 记录这次买入http://log.info("Buying %s" % (security))# 如果上一时间点价格低于五天平均价, 则空仓卖出elif current_price < 0.95*MA5 and context.portfolio.positions[security].closeable_amount > 0:# 卖出所有股票,使这只股票的最终持有量为0order_target(security, 0)# 记录这次卖出http://log.info("Selling %s" % (security))# 画出上一时间点价格record(stock_price=current_price)
图片
QMT代码
# QMT是一个本地端界面化软件,回测基准,回测手续费,回测起止时间都可在界面右侧栏进行设置# 初始化函数,设定要操作的股票,参数等def init(C):# 定义一个全局变量,设定要操作的股票# C.stock_list = C.get_stock_list_in_sector("沪深300") # 获取沪深300股票列表C.stock_list = ["000001.SZ"]# 设定回测初始资金C.capital = 1000000# 设定回测账号,实盘中账号在交易设置截面选择C.account_id = "testaccID"# # 关于回测时间,既可以在编辑器右侧栏设置,也可通过代码设置C.start = '2017-06-06 00:00:00'C.end = '2020-06-06 10:00:00'def handlebar(C):#当前k线日期bar_date = timetag_to_datetime(C.get_bar_timetag(C.barpos), '%Y%m%d%H%M%S')# 获取市场行情,具体参数释义见文档market_data = C.get_market_data_ex(["open", "high", "low", "close"],C.stock_list,period = "1d",end_time = bar_date)# 获取当前账户资金for i in get_trade_detail_data(C.account_id,"stock","account"):cash = i.m_dAvailable# 获取当前持仓信息,本示例中的holding_dict结构是{stock_code:lots}holding_dict = {obj.m_strInstrumentID+"."+obj.m_strExchangeID : obj.m_nVolume for obj in get_trade_detail_data(C.account_id,"stock","position")}# 遍历gmd返回的字典数据for i in market_data:# 获取K线数据kline = market_data[i]# 获取收盘价序列close_data = kline["close"]# 计算MA5MA5 = close_data.rolling(5).mean()# 如果上一时间点价格高出五天平均价5%, 且当前无持仓, 则全仓买入if close_data.iloc[-1] > 1.05 * MA5.iloc[-1] and i not in holding_dict.keys():# 全仓买入,交易记录会被客户端自动记录在回测结果,此处展示按金额交易的方法passorder(23, 1123, C.account_id, i, 5, -1, 1, C)print(f"{bar_date}——{i}触发买入")elif close_data.iloc[-1] < 0.95 * MA5.iloc[-1] and i in holding_dict.keys():# 获取当前持仓数量lots = holding_dict[i]# 全仓卖出,交易记录会被客户端自动记录在回测结果,此处展示按股数交易的方法passorder(24, 1101, C.account_id, i, 5, -1, lots, C)print(f"{bar_date}——{i}触发卖出")
QMT特色函数#获取数据get_weight_in_index 获取某只股票在某指数中的绝对权重get_divid_factors 获取除权除息日和复权因子get_top10_share_holder 获取十大股东数据get_etf_info 根据ETF基金代码获取ETF申赎清单及对应成分股数据get_etf_iopv 根据ETF基金代码获取ETF的基金份额参考净值subscribe_whole_quote 订阅市场全推(tick)subscribe_quote 订阅单股行情数据get_option_list 获取指定日期期权列表股票配资公司排行
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报。展博优配提示:文章来自网络,不代表本站观点。