四均线交易系统

2023-11-11

策略说明

基于4均线系统进行判断交易
系统构成

(5和20周期均线), (3和10周期均线)构成的两组不同周期的均线组合
入场条件

当2组均线均成空头排列时且当前价低于上根BAR最低价入场
出场条件

1 小周期空头均线组合成多头排列
2 两组多头均线分别多头排列且低于上根BAR最高价出场
import numpy as np
import talib as ta
import pandas as pd
from collections import deque

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

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

lefast = 5 # 多头入场短均线周期参数
leslow = 20 # 多头入场长均线周期参数
lxfast = 3 # 多头出场短周期均线参数
lxslow = 10 # 多头出场长均线周期参数
sefast = 5 # 空头入场短均线周期参数
seslow = 20 # 空头入场长均线周期参数
sxfast = 3 # 空头出场短均线周期参数
sxslow = 10 # 空头出场长均线周期参数

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

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

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

    high_price = np.array(data['highPrice'], dtype=float)
    low_price = np.array(data['lowPrice'], dtype=float)
    open_price = np.array(data['openPrice'], dtype=float)
    close_price = np.array(data['closePrice'], dtype=float)


    malefast = ta.MA(close_price, lefast)
    maleslow = ta.MA(close_price, leslow)
    malxfast = ta.MA(close_price, lxfast)
    malxslow = ta.MA(close_price, lxslow)
    masefast = ta.MA(close_price, sefast)
    maseslow = ta.MA(close_price, seslow)
    masxfast = ta.MA(close_price, sxfast)
    masxslow = ta.MA(close_price, sxslow)


    if long_position == 0 and context.current_bar >= 100:
        if malefast[-1] > maleslow[-1] and malxfast[-1] > malxslow[-1] and high_price[-1] > high_price[-2]:# 当2组均线均成空头排列时且当前价低于上根BAR最低价入场
            ids = futures_account.order(symbol, 10, 'open')
            futures_account.get_order(ids)
    if long_position != 0:
        if malxfast[-1] < malxslow[-1]: # 小周期空头均线组合成多头排列
            futures_account.order(symbol, -long_position, 'close')
        elif masefast[-1] < maseslow[-1] and masxfast[-1] < masxslow[-1] and low[-1] < low[-2]: # 两组多头均线分别多头排列且低于上根BAR最高价出场
            futures_account.order(symbol, -long_position, 'close')   
    context.current_bar += 1
    # if isinstance(ids, quartz.trade.order.FuturesOrder):
    #     print futures_account.get_order(ids)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

四均线交易系统 的相关文章

随机推荐

  • stm32串口驱动和esp8266的使用

    写在前面 本文并不对相关知识进行讲解 只是这次的实验课要实现的任务有些复杂 我也踩了一些坑 对代码实现思路进行复现和记录 并不是技术科普性文章 基础知识还是要自己有所掌握 1 stm32的串口通讯 开发板 stm32f407zgt6课程学习
  • 一文搞懂深度优先搜索(DFS)

    一 原理 深度优先搜索再得到一个新节点时立即对新节点进行遍历 从节点 0 出发开始遍历 得到到新节点 6 时 立马对新节点 6 进行遍历 得到新节点 4 如此反复以这种方式遍历新节点 直到没有新节点了 此时返回 返回到根节点 0 的情况是
  • 数据结构与算法(三):栈与队列

    一 栈 1 基本概念 2 栈的顺序存储结构 3 两栈共享空间 4 栈的链式存储结构 5 栈的应用 递归 二 队列 1 基本概念 2 队列的顺序存储结构 三 总结 上一篇 数据结构与算法 二 线性表 中介绍了数据结构中线性表的两种不同实现 顺
  • 反转链表+交换两个链表的节点

    目录 编辑 一 反转链表 1 题目描述 2 例子 3 题目接口 4 分析以及解题代码 1 迭代法 2 递归写法 二 两两交换两个链表中的节点 1 题目描述 2 例子 3 题目接口 4 题目分析以及解法 一 反转链表 1 题目描述 首先来看看
  • Chapter One : 开启 Python 之旅

    目录 1 计算机的组成 了解 2 计算机如何处理程序的 了解 3 编程语言 了解 4 了解 Python 4 1 Python 的版本 4 2 Python 的应用领域 5 搭建 Python 开发环境 5 1 下载并安装 Python 2
  • linux c 打印调用某函数的文件名与行

    只做记录 供自己翻 http www voidcn com article p ruuoijoc mn html
  • win全盘重分- DiskGenius

    因为最近找不到了太好的素材 来整理一下全盘重分的素材 全盘分区最好的是制作U盘启动器 在U盘的PE里进行分区 使用工具是相当简单的 PE使用的是冰封U启动 第一步打开DiskGenius软件 算是系统重装分区用的最多的也是最普遍的工具之一
  • 【概率论与数理统计】猴博士 笔记 p26-28 F、f的性质、一、二维连续型求期望、方差

    F f的性质 做法 上述公式的原理 做一些题目来练习套公式 例1 解 P X 2 F
  • Pycharm中如何配置已有的环境

    这篇是关于在pycharm中配置已经在anaconda中存在的虚拟环境 1 File settings 2 在设置弹窗中选择Project Interpreter 然后点击add 3 根据图操作 4 随后找到Anaconda中envs中想要
  • 2022年苹果开发者账号/AppleID如何更改绑定的手机号

    2022年苹果开发者账号 AppleID如何更改绑定的手机号 1 打开Apple ID 网址 登陆进去 https appleid apple com cn 2 点击编辑选项 将原来的手机号删除 然后添加受信任号码 点击完成 修改密码 修改
  • sendto: Network is unreachable问题的解决

    在用busybox生成根文件系统之后 进入系统ping外网是不能用的 因此需要修改一下几个文件 配置ip为固定 并且开机自动启动网卡 在 etc init d rcS中添加一下内容 网络开机自启动设置 ifconfig eth0 up ud
  • RabbitMQ整合SpringBoor以及RabbitMQ的延迟队列

    延迟队列的概念 前面介绍了死信队列 针对于ttl进入死信队列的情况 假如我们把前面的消费者一关闭 然后对所有的消息都进行设置过期时间 这样是不是就形成了一个延迟队列了 使用场景 比如订单超时关闭 假如我们使用定时任务 假如数据量很大的情况下
  • SpringBoot —— 搭建SpringBoot+Maven项目

    文章目录 前言 一 创建步骤 1 创建SpringBoot项目 选择JDK版本 2 填写包名和项目名 3 创建web项目 4 创建web项目 二 测试 1 配置maven 2 创建测试方法 前言 SpringBoot系列Demo代码 使用i
  • 【复盘与分享】第十一届泰迪杯B题:产品订单的数据分析与需求预测

    文章目录 题目 第一问 第二问 2 1 数据预处理 2 2 数据集分析 2 2 1 训练集 2 2 2 预测集 2 3 特征工程 2 4 模型建立 2 4 1 模型框架和评价指标 2 4 2 模型建立 2 4 3 误差分析和特征筛选 2 4
  • python设置绘图大小_解决Python图形界面中设置尺寸的问题

    Python有自己内置的标准GUI库 Tkinter 只要安装好Python就可以调用 今天学习到了图形界面设计的问题 刚开始就卡住了 为啥呢 就是用geometry size 设置窗口尺寸大小 如800X600 X 从哪里来成了问题 首先
  • 你若有心,我怎会无情

    人和人之间 全靠一颗心 情与情之间 全看一份真 一生很长 什么样的人都会遇到 有的人口蜜腹剑 嘴上跟你说着甜言蜜语 心里却盘算着利用你得到些什么 有的人虚伪自私 表面上跟你掏心掏肺 等你需要帮助的时候却转身离开 所以 看人 不能只看表面 也
  • 复制构造函数(拷贝构造函数)

    也许很多C 的初学者都知道什么是构造函数 但是对复制构造函数 copy constructor 却还很陌生 对于我来说 在写代码的时候能用得上复制构造函数的机会并不多 不过这并不说明复制构造函数没什么用 其实复制构造函数能解决一些我们常常会
  • #1062 - Duplicate entry '0' for key 'PRIMARY'—— mysql的小问题

    问题 1062 重复输入 0 原因 我估计可能是数据表中主键这一栏已经有一个为 0 了 一般出现这种问题是以int类型的字段在输入时没有输如数据 而int类型默认值为 0 而你之前第一条数据已经默认主键如 id为默认的 0 了 于是就报错说
  • java list有序还是无序_java的集合框架

    前言 使用java编程语言的开发人员 在日常开发过程中经常会使用到java的一些集合类 不过这些集合类太多 很多人对它们的特点和使用场景不是特别的了解 通过此文给大家总结一下这方面的知识 方便大家面试或者是初学者理解 Java集合类主要由C
  • 四均线交易系统

    策略说明 基于4均线系统进行判断交易 系统构成 5和20周期均线 3和10周期均线 构成的两组不同周期的均线组合 入场条件 当2组均线均成空头排列时且当前价低于上根BAR最低价入场 出场条件 1 小周期空头均线组合成多头排列 2 两组多头均