2022年2022年量化投资入门教程六——技术指标MA策略 .pdf

上传人:C****o 文档编号:39741844 上传时间:2022-09-07 格式:PDF 页数:12 大小:157.33KB
返回 下载 相关 举报
2022年2022年量化投资入门教程六——技术指标MA策略 .pdf_第1页
第1页 / 共12页
2022年2022年量化投资入门教程六——技术指标MA策略 .pdf_第2页
第2页 / 共12页
点击查看更多>>
资源描述

《2022年2022年量化投资入门教程六——技术指标MA策略 .pdf》由会员分享,可在线阅读,更多相关《2022年2022年量化投资入门教程六——技术指标MA策略 .pdf(12页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、量化投资入门教程六技术指标 MA策略目录1.策略原理及代码1.1 策略原理1.2 策略代码 1.2.1ATR.ini 1.2.2ATR.py 1.2.3stock_pool.csv 2.Python 相关函数2.1Python 标准函数2.2 掘金接口函数3.金融术语(移动平均线)名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 12 页 -1.策略原理及代码 1.1策略原理基于 ta-lib的 MA策略。如果当前价格高于MA,买入股票;如果当前价格低于 MA,卖出股票。实现量化投资策略的相关编程并非想象中这么困难,从Python 的安装到量化编程的实现只需简单几步(具体见http

2、:/ Python、掘金量化平台及相关工具包)1.2 策略代码(可直接在python 中实现)1.2.1 ma.ini strategyusername=password=;回测模式mode=4 td_addr=localhost:8001 strategy_id=;订阅代码注意及时更新subscribe_symbols=SHFE.ag1705.tick,SHFE.ag1705.bar.60 backtest start_time=2017-02-15 21:00:00 end_time=2017-03-07 16:00:00;策略初始资金initial_cash=10000000;委托量成交

3、比率,默认=1(每个委托 100%成交)transaction_ratio=1;手续费率,默认=0(不计算手续费)commission_ratio=0.0004 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 12 页 -;滑点比率,默认=0(无滑点)slippage_ratio=0 price_type=1;基准bench_symbol=SHSE.000300 para trade_exchange=SHFE trade_symbol=ag1705 window_size=200 bar_type=60 tick_size=1 significant_diff=21 timep

4、eriod=20#logger settings#loggers keys=root logger_root level=DEBUG handlers=console,file handlers keys=console,file handler_file class=handlers.RotatingFileHandler args=(ma.log,a,maxBytes=10000,backupCount=5)formatter=simple handler_console class=StreamHandler 名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 12 页 -ar

5、gs=(sys.stdout,)formatter=simple formatters keys=simple formatter_simple format=%(asctime)s-%(name)s-%(levelname)s-%(message)s datefmt=1.2.2 ma.py#!/usr/bin/env python#encoding:utf-8 import numpy as np from collections import deque from gmsdk import*from talib import SMA#算法用到的一些常量,阀值,主要用于信号过滤eps=1e-

6、6 threshold=0.235 tick_size=0.2 half_tick_size=tick_size/2 significant_diff=tick_size*2.6 class MA(StrategyBase):strategy example1:MA decision price cross long MA,then place a order,temporary reverse trends place more orders def _init_(self,*args,*kwargs):#import pdb;pdb.set_trace()super(MA,self)._i

7、nit_(*args,*kwargs)#策略初始化工作在这里写,从外部读取静态数据,读取策略配置参数等工作,只在策略启动初始化时执行一次。#从配置文件中读取配置参数self.exchange=self.config.get(para,trade_exchange)self.sec_id=self.config.get(para,trade_symbol)名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 12 页 -self.symbol=.join(self.exchange,self.sec_id)self.last_price=0.0 self.trade_unit=3,1,2

8、,0#self.trade_count=0 self.trade_limit=len(self.trade_unit)self.window_size=self.config.getint(para,window_size)or 200 self.timeperiod=self.config.getint(para,timeperiod)or 20 self.bar_type=self.config.getint(para,bar_type)or 60 self.close_buffer=deque(maxlen=self.window_size)self.significant_diff=s

9、elf.config.getfloat(para,significant_diff)or significant_diff#prepare historical bars for MA calculating#从数据服务中准备一段历史数据,使得收到第一个bar 后就可以按需要计算ma last_closes=bar.close for bar in self.get_last_n_bars(self.symbol,self.bar_type,self.window_size,end_time=self.start_time)last_closes.reverse()#因为查询出来的时间是倒序排

10、列,需要倒一下顺序self.close_buffer.extend(last_closes)#响应 bar 数据到达事件defon_bar(self,bar):#确认下 bar 数据是订阅的分时 if bar.bar_type=self.bar_type:#把数据加入缓存self.close_buffer.append(bar.close)#调用策略计算self.algo_action()#响应 tick数据到达事件defon_tick(self,tick):#更新市场最新成交价self.last_price=tick.last_price defon_execution(self,execu

11、tion):#打印订单成交回报信息print(received execution:%s%execution.exec_type)#策略的算法函数,策略的交易逻辑实现部分defalgo_action(self):#type:()-object#数据转换,方便调用ta-lib函数进行技术指标的计算,这里用SMA指标名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 12 页 -close=np.asarray(self.close_buffer)ma=SMA(close,timeperiod=self.timeperiod)delta=round(close-1-ma-1,4)#最新数

12、据点,bar 的收盘价跟 ma的差 cross=(close-1-ma-1)*(close-3-ma-3)threshold and momentum=significant_diff:#收盘价上穿均线,且当前价格偏离满足门限过滤条件,多信号#没有空仓,开多 if(a_p is None or a_p.volume eps:self.open_long(self.exchange,self.sec_id,self.last_price,vol)else:#如果有空仓,平掉空仓 if a_p and a_p.volume eps:self.close_short(self.exchange,se

13、lf.sec_id,self.last_price,a_p.volume)elif cross and delta -threshold and momentum=-significant_diff:#bar 收盘价下穿ma均线,且偏离满足信号过滤条件#没有多仓时,开空 if(b_p is None or b_p.volume eps:self.open_short(self.exchange,self.sec_id,self.last_price,vol)else:#已有多仓,平掉多仓名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 12 页 -if b_p and b_p.vo

14、lume eps:self.close_long(self.exchange,self.sec_id,self.last_price,b_p.volume)else:#其他情况,忽略不处理 pass#订单完全成交defon_order_filled(self,order):print(received order filled:sec_id:0,side:1,volume:2,filled price:3,filled:4 .format(order.sec_id,order.side,order.volume,order.filled_vwap,order.filled_volume)#策略

15、启动入口if _name_=_main_:#初始化策略 ma=MA(config_file=ma.ini)#import pdb;pdb.set_trace()#python调试开关print(strategy ready,waiting for market data.)#策略进入运行,等待数据事件 ret=ma.run()#打印策略退出状态print(MA exit:.format(ma.get_strerror(ret)2.Python 相关函数2.1Python 标准函数功能函数原型参数返回值参数名含义join 连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成

16、一个新的字符串sep.join(seq)sep 分隔符。可以为空返回一个以分隔符sep 连接各个元素后生成的字符串seq 要连接的元素序列、字符串、元组、字典名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 12 页 -len 返回对象(字符、列表、元组等)长度或项目个数。len(s)s 对象返回对象长度。deque Python 标准库 collections中的一项.它提供了两端都可以操作的序列,这意味着,你可以在序列前后都执行添加或删除.deque()reverse 用于反向列表中元素list.reverse()该方法没有返回值,但是会对列表的元素进行反向排序。extend

17、该方法没有返回值,但是会对列表的元素进行反向排序。list.extend(seq)seq 元素列表。该方法没有返回值,但会在已存在的列表中添加新的列表内容。append 用于在列表末尾添加新的对象。list.append(obj)obj 添加到列表末尾的对象。该方法无返回值,但是会修改原来的列表。asarray 将输入数据(列表的列表,元组的元组,元组的列表等)转换为矩阵形式asarray(a,dtype=None,order=None)a 数组形式的输入数据,包括 list,元组的list,元组,元组的元组,元组的list和ndarrays dtype 数据类型由输入数据推导名师资料总结-精

18、品资料欢迎下载-名师精心整理-第 8 页,共 12 页 -round round(x,n)x 数值表达式返回浮点数 x 的四舍五入值。n 数值表达式 2.2 掘金接口函数功能函数原型参数返回值参数名类型说明on_bar 响应 Bar 事件,收到 Bar 数据后本函数被调用。on_bar(bar)bar bar bar 数据无on_tick 响应 Tick 事件,收到 Tick 数据后本函数被调用。on_tick(tick)tick tick tick数据无get_positions 查询当前策略指定symbol(由交易所代码和证券ID 组成)和买卖方向的持仓信息。策略类和交易服务类都提供该接口

19、。get_position(exchange,sec_id,side);exchange string 交易所代码Position对象,持仓信息sec_id string 证券代码side int 买卖方向open_long 异步开多仓,以参数指定的symbol、价和量下单。如果价格为0,为市价单,否则为限价单。策略类和交易服务类都提供该接口open_long(exchange,sec_id,price,volume)exchange string 交易所代码,如上交所 SHSE 委托下单生成的Order 对象sec_id string 证券代码,如浦发名师资料总结-精品资料欢迎下载-名师精心

20、整理-第 9 页,共 12 页 -银行 600000 price float 委托价,如果price=0,为市价单,否则为限价单volume float 委托量close_short 异步平空仓接口,以参数指定的exchange,证券代码 sec_id,价和量下单。如果价格为0,为市价单,否则为限价单。策略类和交易服务类都提供该接口。close_short(exchange,sec_id,price,volume)exchange string 交易所代码,如上交所 SHSE 返回委托下单生成的Order 对象sec_id string 证券代码,如浦发银行 600000 price floa

21、t 委托价,如果price=0,为市价单,否则为限价单volume float 委托量close_long 异步平多仓接口,以参数指定的exchange,证券代码 sec_id,价和量下单。如果价格为0,为市价单,否则为限价单。策略类和交易服务类都提供该接口。close_long(exchange,sec_id,price,volume)exchange string 交易所代码,如上交所 SHSE 委托下单生成的Order 对象sec_id string 证券代码,如浦发银行 600000 price float 委托价,如果price=0,为市价名师资料总结-精品资料欢迎下载-名师精心整理

22、-第 10 页,共 12 页 -单,否则为限价单volume float 平仓量open_short 异步开空仓接口,以参数指定的exchange,证券代码 sec_id,价和量下单。如果价格为0,为市价单,否则为限价单。策略类和交易服务类都提供该接口。open_short(exchange,sec_id,price,volume)exchange string 交易所代码,如上交所 SHSE 委托下单生成的Order 对象sec_id string 证券代码,如浦发银行 600000 price float 委托价,如果price=0,为市价单,否则为限价单volume float 平仓量3

23、.金融术语移动平均线:Moving Average,简称 MA,原本的意思是移动平均,由于我们将其制作成线形,所以一般称之为移动平均线,简称均线。它是将某一段时间的收盘价之和除以该周期。比如日线 MA5指 5 天内的收盘价除以 5。移动平均线常用线有5 天、10 天、30 天、60天、120 天和 240 天的指标。其中,5 天和 10 天的短期移动平均线,是短线操作的参照指标,称做日均线指标;30天和 60 天的是中期均线指标,称做季均线指标;120 天、240 天的是长期均线指标,称做年均线指标。移动平均线的计算方式有多种,最常用而简单的是算术移动平均,又称为简单移动平均(SMA),计算公式为:ma=(c1+c2+.+cn)/n。名师资料总结-精品资料欢迎下载-名师精心整理-第 11 页,共 12 页 -注:更多关于量化策略的教程和分析等精彩内容详见http:/ 名师资料总结-精品资料欢迎下载-名师精心整理-第 12 页,共 12 页 -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com