WeQuant交易策略—NATR
策略名称:NATR策略
关键词:规范真实波幅、价格突破。
NATR,是对ATR指标进行了标准化。主要应用于了解价格的震荡幅度和节奏,在窄幅整理行情中用于寻找突破时机。本策略在当前价格高于之前价格一定倍数NATR时全仓买入,低于一定倍数NATR时全仓卖出。
方法:
1)利用规范化的真实波幅来构造上下轨;
2)价格突破上轨买入;
3)价格突破下轨卖出。
代码
# !/usr/bin/env python
# -*- coding: utf-8 -*-
# 策略代码总共分为三大部分,1)PARAMS变量 2)initialize函数 3)handle_data函数
# 请根据指示阅读。或者直接点击运行回测按钮,进行测试,查看策略效果。
# 策略名称:NATR策略
# 关键词:规范真实波幅、价格突破。
# 方法:
# 1)利用规范化的真实波幅来构造上下轨;
# 2)价格突破上轨买入;
# 3)价格突破下轨卖出。
import numpy as np
import talib
# 阅读1,首次阅读可跳过:
# PARAMS用于设定程序参数,回测的起始时间、结束时间、滑点误差、初始资金和持仓。
# 可以仿照格式修改,基本都能运行。如果想了解详情请参考新手学堂的API文档。
PARAMS = {
"start_time": "2017-02-01 00:00:00", # 回测起始时间
"end_time": "2017-08-01 00:00:00", # 回测结束时间
"slippage": 0.003, # # 此处“slippage"包含佣金(千二)+交易滑点(千一)
"account_initial": {"huobi_cny_cash": 100000,
"huobi_cny_btc": 0}, # 设置账户初始状态
}
# 阅读2,遇到不明白的变量可以跳过,需要的时候回来查阅:
# initialize函数是两大核心函数之一(另一个是handle_data),用于初始化策略变量。
# 策略变量包含:必填变量,以及非必填(用户自己方便使用)的变量
def initialize(context):
# 设置回测频率, 可选:"1m", "5m", "15m", "30m", "60m", "4h", "1d", "1w"
context.frequency = "4h"
# 设置回测基准, 比特币:"huobi_cny_btc", 莱特币:"huobi_cny_ltc", 以太坊:"huobi_cny_eth"
context.benchmark = "huobi_cny_btc"
# 设置回测标的, 比特币:"huobi_cny_btc", 莱特币:"huobi_cny_ltc", 以太坊:"huobi_cny_eth"
context.security = "huobi_cny_btc"
# 设定NATR的参数
# NATR算法回看天数,此处设置为10天
context.user_data.natr_period = 10
# 当前价格与之前1天的价格相比较
context.user_data.pre_period = 1
# 多头NATR的倍数
context.user_data.long_multi = 0.1
# 空头NATR的倍数
context.user_data.short_multi = 0.1
# 至此initialize函数定义完毕。
# 阅读3,策略核心逻辑:
# handle_data函数定义了策略的执行逻辑,按照frequency生成的bar依次读取并执行策略逻辑,直至程序结束。
# handle_data和bar的详细说明,请参考新手学堂的解释文档。
def handle_data(context):
# 获取回看时间窗口内的历史数据
hist = context.data.get_price(context.security, count=context.user_data.natr_period + 1, frequency="1d")
if len(hist.index) < context.user_data.natr_period + 1:
context.log.warn("bar的数量不足, 等待下一根bar...")
return
# 收盘价
close = np.array(hist["close"])
# 最高价
high = np.array(hist["high"])
# 最低价
low = np.array(hist["low"])
# 使用talib计算NATR
try:
# 获取最新的NATR值
natr = talib.NATR(high, low, close, timeperiod=context.user_data.natr_period)[-1]
except:
context.log.error("计算ATR时出现错误...")
return
# 获取最新价格
current_price = context.data.get_current_price(context.security)
# 获取context.user_data.pre_period个bar前的价格
prev_price = close[-(context.user_data.pre_period + 1)]
# 计算上下轨
upper = prev_price + context.user_data.long_multi * natr
lower = prev_price - context.user_data.short_multi * natr
context.log.info("当前价格=%s元, 上轨=%s元, 下轨=%s元" % (current_price, upper, lower))
# 如果当前价格比之前价格低1个NATR,产生卖出信号
if current_price < lower:
context.log.info("价格超过了下轨,产生卖出信号")
# 若持有仓位,则全仓卖出
if context.account.huobi_cny_btc >= HUOBI_CNY_BTC_MIN_ORDER_QUANTITY:
context.log.info("正在卖出 %s" % context.security)
context.log.info("卖出数量为 %s" % context.account.huobi_cny_btc)
context.order.sell_limit(context.security, quantity=str(context.account.huobi_cny_btc), price=str(close[-1] * 0.98))
else:
context.log.info("仓位不足,无法卖出")
# 如果当前价格比之前价格高1个NATR,产生买入信号
elif current_price > upper:
context.log.info("价格超过了上轨,产生买入信号")
# 若持有现金,则全仓买入
if context.account.huobi_cny_cash >= HUOBI_CNY_BTC_MIN_ORDER_CASH_AMOUNT:
context.log.info("正在买入 %s" % context.security)
context.log.info("下单金额为 %s 元" % context.account.huobi_cny_cash)
context.order.buy_limit(context.security, quantity=str(context.account.huobi_cny_cash/close[-1]*0.98), price=str(close[-1]*1.02))
else:
context.log.info("现金不足,无法下单")
else:
context.log.info("无交易信号,进入下一根bar")
回测

WeQuant交易策略—NATR的更多相关文章
- WeQuant交易策略—网格交易
网格交易策略(Grid Trading) 策略介绍 网格策略本质上是一种低吸高抛的策略.标的物价格越低,吸纳的头寸越多:标的物价格越高,卖出的头寸越多.网格策略巧妙地借鉴了日常生活中渔翁撒网扑鱼的思路 ...
- WeQuant交易策略—Dual Thrust
Dual Thrust策略 策略介绍 Dual Thrust是一个趋势跟踪系统,由Michael Chalek在20世纪80年代开发,曾被Future Thruth杂志评为最赚钱的策略之一. Dual ...
- WeQuant交易策略—ATR
ATR(真实波幅均值)策略 策略介绍 ATR(average true range,真实波幅均值),是用来衡量一段时间内价格的真实的平均波动范围,ATR不是一个领先指标,但是它测量最重要的市场参数之一 ...
- WeQuant交易策略—RSI
RSI指标策略 策略介绍 RSI(相对强弱指标),是通过一段时期内的平均收盘上涨和下跌数,计算价格上涨所产生的波动占整个波动的百分比,来分析市场买卖盘的意向和实力. 计算公式(以日为单位举例) RSI ...
- WeQuant交易策略—BOLL
BOLL(布林线指标)策略 简介 BOLL(布林线)指标是技术分析的常用工具之一,由美国股市分析家约翰•布林根据统计学中的标准差原理设计出来的一种非常简单实用的技术分析指标.一般而言,价格的运动总是围 ...
- WeQuant交易策略—KDJ
KDJ随机指标策略策略介绍KDJ指标又叫随机指标,是一种相当新颖.实用的技术分析指标,它起先用于期货市场的分析,后被广泛用于股市的中短期趋势分析,是期货和股票市场上最常用的技术分析工具.随机指标KDJ ...
- WeQuant交易策略—MACD
MACD(指数平滑异同平均线)策略简介MACD指标应该是大家最常见的技术指标,在很多股票.比特币的软件中都是默认显示的.MACD是从双指数移动平均线发展而来的.意义和双移动平均线基本相同,即由快.慢均 ...
- WeQuant交易策略—简单均线
简单双均线策略(Simple Moving Average) 策略介绍简单双均线策略,通过一短一长(一快一慢)两个回看时间窗口收盘价的简单移动平均绘制两条均线,利用均线的交叉来跟踪价格的趋势.这里说的 ...
- WeQuant交易策略—EMV
EMV指标策略 简介 EMV(Ease of Movement Value, 简易波动指标),它是由RichardW.ArmJr.根据等量图和压缩图的原理设计而成, 目的是将价格与成交量的变化结合成一 ...
随机推荐
- AddBinary
二进制加法 输入2个字符串,字符串内由0和1组成:计算二者之和,返回字符串 Given two binary strings, return their sum (also a binary stri ...
- 【菜鸟入门】安装配置eclipse 并编写运行第一个Java程序
不得不吐槽一下,安装配置这eclipse真是太费劲了...下面总结一下,以便下次再安装 本人 win10系统,64位机 一.在官网下载eclipse安装包 文件名:eclipse-inst-win64 ...
- bzoj2002: [Hnoi2010]Bounce 弹飞绵羊 [分块][LCT]
Description 某天,Lostmonkey发明了一种超级弹力装置,为了在他的绵羊朋友面前显摆,他邀请小绵羊一起玩个游戏.游戏一开始,Lostmonkey在地上沿着一条直线摆上n个装置,每个装置 ...
- Multimodal —— 看图说话(Image Caption)任务的论文笔记(三)引入视觉哨兵的自适应attention机制
在此前的两篇博客中所介绍的两个论文,分别介绍了encoder-decoder框架以及引入attention之后在Image Caption任务上的应用. 这篇博客所介绍的文章所考虑的是生成captio ...
- 机器学习 —— 基础整理(七)前馈神经网络的BP反向传播算法步骤整理
这里把按 [1] 推导的BP算法(Backpropagation)步骤整理一下.突然想整理这个的原因是知乎上看到了一个帅呆了的求矩阵微分的方法(也就是 [2]),不得不感叹作者的功力.[1] 中直接使 ...
- 【PHP】linux+php5.1.6+mysql5.0.2+apache2.0.55安装配置说明(转)
linux+php5.1.6+mysql5.0.2+apache2.0.55安装配置说明:一.mysql5.0.2的安装配置过程及说明:1. #tar -zvxf mysql-5.0.2-alpha. ...
- QT QT creator QTsdk的区别
Qt是一个跨平台的C++图形用户界面应用程序框架.它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能.Qt是完全面向对象的,很容易扩展,并且允许真正地组件编程. QT Creator 跨平台 ...
- ETL作业调度软件TASKCTL4.1集群部署
熟悉TASKCTL4.1一段时间后,觉得它的调度逻辑什么的都还不错,但是感觉单机部署不太够用.想实现跨机调度作业,就要会TASKCTL的集群部署.下面就是我在网上找到的相关资料,非原创. 单机部署成功 ...
- Java中使用POI读取大的Excel文件或者输入流时发生out of memory异常参考解决方案
注意:此参考解决方案只是针对xlsx格式的excel文件! 背景 前一段时间遇到一种情况,服务器经常宕机,而且没有规律性,查看GC日志发生了out of memory,是堆溢出导致的,分析了一下堆的d ...
- 【原创】01-1. 基于 checked 关于 attribute 和 property 的理解
Attribute(属性) 和 Property(特性) Attribute(元素节点的属性),例如html中常用的class.title.align等(即:属性节点).而Property 是这个DO ...