成交量加权动量交易系统

2023-11-14

策略说明: 基于动量系统, 通过交易量加权进行判断

系统要素:

用VWM上穿零轴判断多头趋势
入场条件:

价格高于VWM上穿零轴时价格通道,且在SetupLen的BAR数目内,做多
出场条件:

空头势多单出场
import DataAPI
import numpy as np
import pandas as pd
import talib as ta
from collections import deque
from itertools import product

class DataCenter():
keys = [u’openPrice’, u’highPrice’, u’lowPrice’, u’closePrice’, u’turnoverVol’]
def init(self, refresh_rate, pipe_length):
self.data = {key:deque([], maxlen=pipe_length) for key in (self.keys + [‘tradeTime’])}
self.refresh_rate = refresh_rate
self.pipe_length = pipe_length

def update_data(self, symbol):
    if len(self.data['openPrice']) < self.pipe_length:
        hist = history(symbol=symbol, attribute=self.keys, time_range=self.refresh_rate*self.pipe_length, freq='m', rtype='frame')[symbol]
    else:
        hist = history(symbol=symbol, attribute=self.keys, time_range=self.refresh_rate, freq='m', rtype='frame')[symbol]
    # hist.index = range(len(hist))
    current_data = {key:[] for key in (self.keys + ['tradeTime'])}

    for i in range(len(hist)/self.refresh_rate):
        current_bar = hist[self.refresh_rate*i:self.refresh_rate*(i+1)]
        current_data['closePrice'].append(current_bar.ix[len(current_bar)-1, 'closePrice'])
        current_data['openPrice'].append(current_bar.ix[0, 'openPrice'])
        current_data['highPrice'].append(current_bar['highPrice'].max())
        current_data['lowPrice'].append(current_bar['lowPrice'].min())
        current_data['turnoverVol'].append(current_bar['turnoverVol'].sum())
        current_data['tradeTime'].append(current_bar.index[len(current_bar)-1])
    for i in self.keys:
        for j in current_data[i]:
            self.data[i].append(j) 
    return self.data

def crossover(a, b):
if a[-2] < b[-2] and a[-1] > b[-1]:
return True
else:
return False

def crossunder(a, b):
if a[-2] > b[-2] and a[-1] < b[-1]:
return True
else:
return False

universe = [‘RBM0’] # 策略期货合约
start = ‘2016-01-01’ # 回测开始时间
end = ‘2016-12-31’ # 回测结束时间
refresh_rate = 5 # 调仓周期
freq = ‘m’ # 调仓频率:m-> 分钟;d-> 日

momlen = 5 # VWM参数
avglen = 20 # VWM参数
atrlen = 5 # ATR参数
atrpcnt = 0.5 # 入场价格波动率参数
setuplen = 5 # 条件持续有效K线数

accounts = {
‘futures_account’: AccountConfig(account_type=’futures’, capital_base=1000000)
}

def initialize(context): # 初始化虚拟期货账户,一般用于设置计数器,回测辅助变量等。
global data_pool
data_pool = DataCenter(refresh_rate, avglen+momlen+1)
context.symbol = ‘RB1605’
context.current_bar = 0
context.lsetup = 0
context.leprice = np.NAN

def handle_data(context): # 回测调仓逻辑,每个调仓周期运行一次,可在此函数内实现信号生产,生成调仓指令。
futures_account = context.get_account(‘futures_account’)
symbol = context.symbol
long_position = futures_account.position.get(symbol, dict()).get(‘long_amount’, 0)
if context.get_symbol(universe[0]) != symbol:
if long_position != 0:
print futures_account.current_date, futures_account.current_time, ‘主力更换, 平仓’
print context.get_symbol(universe[0])
order(futures_account.symbol, -long_position, ‘close’)
futures_account.symbol = context.get_symbol(universe[0])
else:
data = data_pool.update_data(symbol)

    high = np.array(data['highPrice'])
    low = np.array(data['lowPrice'])
    close = np.array(data['closePrice'])
    open_ = np.array(data['openPrice'])
    volume = np.array(data['turnoverVol'])

    # 计算动量
    vwm = ta.EMA(ta.MOM(close, momlen)*volume, avglen)
    atr = ta.ATR(high, low, close, atrlen)[-1]

    bullsetup = crossover(vwm, [0]*2) 
    bearsetup = crossunder(vwm, [0]*2)

    if bullsetup:
        context.lsetup = 0
        context.leprice = close[-1]
    else:
        context.lsetup += 1
    if context.current_bar > avglen and long_position == 0:
        if high[-1] > context.leprice + atrpcnt*atr and context.lsetup <= setuplen and context.lsetup >= 1:#价格高于VWM上穿零轴时价格通道,且在SetupLen的BAR数目内,做多
            futures_account.order(symbol, 10, 'open')
    if long_position != 0:
        if bearsetup == True: #空头势多单出场
            futures_account.order(symbol, -long_position, 'close')

    context.current_bar += 1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

成交量加权动量交易系统 的相关文章

随机推荐

  • matlab低通滤波器

    clc 清除命令窗口 clear 清除所有变量 close all 关闭所有的图形窗口 N 2 10 定义一个变量N 值为2的10次方 n 0 N 1 生成一个从0到N 1的序列 Fs 2000 采样频率 tn n 1 Fs 时间序列 Fn
  • 为什么需要单元测试?

    为什么需要单元测试 从产品角度而言 常规的功能测试 系统测试都是站在产品局部或全局功能进行测试 能够很好地与用户的需要相结合 但是缺乏了对产品研发细节 特别是代码细节的理解 从测试人员角度而言 功能测试和系统测试以及其他性能测试等等对测试人
  • Windows下忘记MySQL root密码解决方法

    Windows下忘记MySQL密码的解决办法网上好多好多 可是 我发现 如果采用Windows服务启动的时候 安装网上通过命令行修改root密码的方法行不通 经过实验 发现 Windows的服务运行的配置并不是在命令行下的配置 查看Wind
  • anaconda怎么运行python脚本_Anaconda运行python脚本 Anaconda方法教程

    你是否想了解Anaconda运行python脚本的操作 下面就是笔者带来的Anaconda运行python脚本的操作步骤 赶紧来看一下吧 相信对大家一定会有所帮助哦 Anaconda是使用 虚拟 环境里边运行Python 这样便于版本 包管
  • 面向对象的设计思想

    面向对象的设计思想 OO思想 Object Oriented 1 看到一个需求的时候不应该直接写代码 应该先考虑有哪些类 2 考虑类的时候 类一定是一类事务的描述 不能太局限 3 考虑类的时候需要考虑主要的类 也就是需要和业务 动作 事件紧
  • 声明指向unsigned int类型的对象的指针vptr_一步步分析:C语言如何面向对象编程...

    一 前言 在嵌入式开发中 C C 语言是使用最普及的 在C 11版本之前 它们的语法是比较相似的 只不过C 提供了面向对象的编程方式 虽然C 语言是从C语言发展而来的 但是今天的C 已经不是当年的C语言的扩展了 从2011版本开始 更像是一
  • c语言string函数的用法_C语言奇淫技巧,字符串的三种表示方法,不会用不是合格的程序员...

    1 在C语言中 是将字符串作为字符数组来处理的 字符串是逐个存放到数组元素中的 例如用一个一维的字符数组存放字符串 I am a boy 如下代码 char c 12 I a m a b o y 这个字符串的实际长度是11 数组长度是12
  • 【红队技术】第二节:信息收集

    https note youdao com s M5U3LWvw
  • 如何高效率提出问题?

    前言 我们总是对自己 不太熟悉 的东西 但是又迫切想知道其答案 所以总是 匆匆 的像他人提出问题 然而 我们发现一个现象 为什么大多数时候 我的问题总是很少引起别人的兴趣 言外之意是 我总是不能在 短时间 的得到一个 正确的答案 本篇根据笔
  • Oracle检查点队列–实例崩溃恢复原理剖析

    检查点队列 实例崩溃恢复原理剖析 什么叫检查点队列 检查点队列是将脏块连接起来 按照第一次脏的数据块依次往后串联起来 形成一个队列 检查点的作用是什么 检查点只是一个数据库事件 它存在的根本意义在于减少崩溃恢复时间 Oracle8i以前是没
  • PHPStorm.WebStrom等系列官方开发工具配置本地项目与运程服务器同步

    PHPStorm WebStrom配置本地项目与运程服务器同步 说明 PHPStorm WebStrom等官方的系统开发工具配置本地项目与运程服务器同步的方法都基本一致没有 几乎没有什么不同之处 我们拿WebStorm为例说一下具体的配置过
  • 背光补偿

    背光补偿能提供在非常强的背景光线前面目标的理想的曝光 无论主要的目标移到中间 上下左右或者荧幕的任一位置 背光补偿也称作逆光补偿或逆光补正 它可以有效补偿摄像机在逆光环境下拍摄时画面主体黑暗的缺陷 当摄像机处于逆光环境中拍摄时 画面会出现黑
  • windows,IDEA各种常用快捷键积累

    windows IDEA各种常用快捷键积累 windows快捷键 1 win shfit s 拖动截屏 2 ctrl alt s 系统录屏 IDEA 1 快速形成main方法 psvm 回车 2 快速形成输出语句 sout 回车 3 内容提
  • [转载]推荐:互联网思维必读十本书

    原文地址 推荐 互联网思维必读十本书 作者 梧桐雨 推荐 互联网思维必读十本书 最近在商界最流行的词汇 莫过于 互联网思维 了 互联网思维 就像一部让人垂涎的武林秘籍 得之可化腐朽为神奇 无论是小米 阿芙精油 或是卖煎饼的黄太吉 都宣称自己
  • 神经网络bn公式_BN、LN、IN、GN、SN归一化

    作者 泛音 公众号 知识交点 该小伙子文章写得不错 感兴趣的大家可以关注下 公众号 知识交点 内容包含 BatchNormalization LayerNormalization InstanceNorm GroupNorm Switcha
  • 解决Docker中运行的MySQL8.0中文乱码

    解决Docker中MySQL8 0乱码问题 环境 Ubuntu版本 21 10 64位 Docker版本 20 10 MySQL版本 8 0 27 正文 MySQL命令行无法展示中文 如下图 进入MySQL容器 docker exec it
  • doris同步作业配置参数修改和注意事项

    创建同步作业 创建数据同步作业的的详细语法可以连接到 Doris 后 执行 HELP CREATE SYNC JOB 查看语法帮助 这里主要详细介绍 创建作业时的注意事项 job name job name是数据同步作业在当前数据库内的唯一
  • 5-FreeSwitch-freeswitch开启录音和使用

    文章目录 一 开启 usr local freeswitch conf dialplan 后面的default添加配置 二 在freeswitch重新加载 F6 或者 reloadxml 三 使用录音 3 1单腿录音 方法一 API 方法二
  • Android Studio 运行 遇到 Failed to read key from keystore

    分享一下我老师大神的人工智能教程 零基础 通俗易懂 风趣幽默 还带黄段子 希望你也加入到我们人工智能的队伍中来 https blog csdn net jiangjunshow Error Execution failed for task
  • 成交量加权动量交易系统

    策略说明 基于动量系统 通过交易量加权进行判断 系统要素 用VWM上穿零轴判断多头趋势 入场条件 价格高于VWM上穿零轴时价格通道 且在SetupLen的BAR数目内 做多 出场条件 空头势多单出场 import DataAPI impor