在优矿(uqer.io)上打开量化投资的黑箱-技术分析篇
2016-12-14 13:43
316 查看
本文演示如何通过程序去实现常见的技术指标,用了一段时间优矿平台,发现很多功能很便捷,就一直在此平台上学习代码和策略复现。
技术分析是指以市场行为为研究对象,以判断市场趋势并跟随趋势的周期性变化来进行股票及其他金融衍生物交易决策的方法的总和。技术分析认为市场行为包容消化一切信息、价格以趋势方式波动、历史会重演,常用的有MACD、BOLL、RSI等。
下面举个简单的栗子,双均线。技术分析中通常会用一条近期的移动平均线和远期移动平均线的相对价格趋势来体现股票近期的价格趋势。
例如当近期均线由下向上突破远期均线时(金叉),通常代表股票近期较为强势可以作为买入信号。
相反当近期均线由上向下击穿远期均线时(死叉),通常代表股票近期较为疲软作为卖出信号。
接下来在看如何通过程序去实现这个简单的逻辑(选用5个交易日的平均价作为近日均线、选用60个交易日的平均价作为远期均线)
首先确定一下策略的回测时间(想看策略在哪一阶段的表现)
secID = '601318.XSHG' #中国平安
benchmark = secID # 策略对标标的(这里选取的是中国平安)
universe = [secID] # 股票池,支持股票和基金 (选取的是中国平安)
其他需要的信息(策略的起始资金、按天进行判断还在用分钟线进行判断、策略调仓频率)
capital_base = 100000 # 起始资金
freq = 'd' # 策略类型,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测
refresh_rate = 1 # 调仓频率,表示执行handle_data的时间间隔,若freq = 'd'时间间隔的单位为交易日,若freq = 'm'时间间隔为分钟
max_history_window = 100 #设定调取历史价格区间最大为100个交易日
策略逻辑部分
局部变量定义:
买入判断:
if MA5 > MA60 and s not in account.security_position: #“金叉”而且当前持仓中没有持有要买入的股票时买入
amount = int(account.cash / account.referencePrice[s] / 100) * 100 #为了让买入的数量是整数(现金/要买入上一个交易日的价格)
order(s, amount)
卖出判断:
elif MA5 < MA60 and s in account.security_position: #“死叉”时而且所卖证券在持仓中时卖出
order_to(s, 0)
蓝线表示策略的收益,黑线表示基准的收益。
点击回测详情可以查看具体的调仓记录、持仓记录等信息
技术分析是指以市场行为为研究对象,以判断市场趋势并跟随趋势的周期性变化来进行股票及其他金融衍生物交易决策的方法的总和。技术分析认为市场行为包容消化一切信息、价格以趋势方式波动、历史会重演,常用的有MACD、BOLL、RSI等。
下面举个简单的栗子,双均线。技术分析中通常会用一条近期的移动平均线和远期移动平均线的相对价格趋势来体现股票近期的价格趋势。
例如当近期均线由下向上突破远期均线时(金叉),通常代表股票近期较为强势可以作为买入信号。
相反当近期均线由上向下击穿远期均线时(死叉),通常代表股票近期较为疲软作为卖出信号。
接下来在看如何通过程序去实现这个简单的逻辑(选用5个交易日的平均价作为近日均线、选用60个交易日的平均价作为远期均线)
首先确定一下策略的回测时间(想看策略在哪一阶段的表现)
start = '2012-05-28' #回测开始时间 end = '2016-08-08' # 回测结束时间然后确定策略选股的股票池及标的(策略适用于哪些股票,想看策略相对谁的表现情况)
secID = '601318.XSHG' #中国平安
benchmark = secID # 策略对标标的(这里选取的是中国平安)
universe = [secID] # 股票池,支持股票和基金 (选取的是中国平安)
其他需要的信息(策略的起始资金、按天进行判断还在用分钟线进行判断、策略调仓频率)
capital_base = 100000 # 起始资金
freq = 'd' # 策略类型,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测
refresh_rate = 1 # 调仓频率,表示执行handle_data的时间间隔,若freq = 'd'时间间隔的单位为交易日,若freq = 'm'时间间隔为分钟
max_history_window = 100 #设定调取历史价格区间最大为100个交易日
def initialize(account): # 初始化虚拟账户状态,类似于去券商开户 pass
策略逻辑部分
局部变量定义:
def handle_data(account): # 每个交易日的买入卖出指令 hist1 = account.get_attribute_history('closePrice', 5) #获取过去5个交易日的收盘价 hist2 = account.get_attribute_history('closePrice', 60) #获取过去60个交易日的收盘价 for s in account.universe: #所有股票池中的股票 MA5 = hist1[s].mean() MA60 = hist2[s].mean() #计算过去5个交易日及过去60个交易日的均价,mean()是python自带的计算平均值的函数
买入判断:
if MA5 > MA60 and s not in account.security_position: #“金叉”而且当前持仓中没有持有要买入的股票时买入
amount = int(account.cash / account.referencePrice[s] / 100) * 100 #为了让买入的数量是整数(现金/要买入上一个交易日的价格)
order(s, amount)
卖出判断:
elif MA5 < MA60 and s in account.security_position: #“死叉”时而且所卖证券在持仓中时卖出
order_to(s, 0)
蓝线表示策略的收益,黑线表示基准的收益。
点击回测详情可以查看具体的调仓记录、持仓记录等信息
相关文章推荐
- PythonStock(9):使用优矿uqer.io 进行简单的数据分析
- 深入分析Java Web技术(2) IO
- 【冬瓜哥演讲主题通知】IO协议栈前沿技术分析
- Mybatis技术(四) 从配置读取到打开连接的源码分析
- Alluxio源码分析读数据:打开文件(二)
- App竞品技术分析 (2)Html5页面的打开速度
- 【Python机器学习】梯度下降法(三) 优矿(uqer.io)
- 【Python机器学习】梯度下降法(一) | 优矿(uqer.io)
- [置顶] Mybatis技术(四) 从配置读取到打开连接的源码分析
- Alluxio源码分析读数据:打开文件选项OpenFileOptions
- 智慧型病毒Atak现身 既能杀毒又具反分析技术
- Java 编程技术中汉字问题的分析及解决
- WEB打印的相关技术分析
- 转:Java 编程技术中汉字问题的分析及解决
- 《WEB打印的相关技术分析》
- .Text分页技术(1)分页的存储过程分析
- 游戏外挂原理和技术分析(关于魔力宝贝 )
- WEB打印的相关技术分析
- 用VML技术实现统计图形的绘制(考试系统中的试卷分析模块)
- 地震局office自动化软件技术要点分析(2)