python 网格交易源码下载_GitHub - xiongyixiaoyang/grid-trading: 网格交易(期货) ,基于网格交易方法的交易策略...

# coding=utf-8

from __future__ import print_function, absolute_import, unicode_literals

import numpy as np

import pandas as pd

from gm.api import *

'''

本策略首先计算了过去300个价格数据的均值和标准差

并根据均值加减1和2个标准差得到网格的区间分界线,

并分别配以0.3和0.5的仓位权重

然后根据价格所在的区间来配置仓位(+/-40为上下界,无实际意义):

(-40,-3],(-3,-2],(-2,2],(2,3],(3,40](具体价格等于均值+数字倍标准差)

[-0.5, -0.3, 0.0, 0.3, 0.5](资金比例,此处负号表示开空仓)

回测数据为:SHFE.rb1801的1min数据

回测时间为:2017-07-01 08:00:00到2017-10-01 16:00:00

'''

def init(context):

context.symbol = 'SHFE.rb1801'

# 订阅SHFE.rb1801, bar频率为1min

subscribe(symbols=context.symbol, frequency='60s')

# 获取过去300个价格数据

timeseries = history_n(symbol=context.symbol, frequency='60s', count=300, fields='close', fill_missing='Last',

end_time='2017-07-01 08:00:00', df=True)['close'].values

# 获取网格区间分界线

context.band = np.mean(timeseries) + np.array([-40, -3, -2, 2, 3, 40]) * np.std(timeseries)

# 设置网格的仓位

context.weight = [0.5, 0.3, 0.0, 0.3, 0.5]

def on_bar(context, bars):

bar = bars[0]

# 根据价格落在(-40,-3],(-3,-2],(-2,2],(2,3],(3,40]的区间范围来获取最新收盘价所在的价格区间

grid = pd.cut([bar.close], context.band, labels=[0, 1, 2, 3, 4])[0]

# 获取多仓仓位

position_long = context.account().position(symbol=context.symbol, side=PositionSide_Long)

# 获取空仓仓位

position_short = context.account().position(symbol=context.symbol, side=PositionSide_Short)

# 若无仓位且价格突破则按照设置好的区间开仓

if not position_long and not position_short and grid != 2:

# 大于3为在中间网格的上方,做多

if grid >= 3:

order_target_percent(symbol=context.symbol, percent=context.weight[grid], order_type=OrderType_Market,

position_side=PositionSide_Long)

print(context.symbol, '以市价单开多仓到仓位', context.weight[grid])

if grid <= 1:

order_target_percent(symbol=context.symbol, percent=context.weight[grid], order_type=OrderType_Market,

position_side=PositionSide_Short)

print(context.symbol, '以市价单开空仓到仓位', context.weight[grid])

# 持有多仓的处理

elif position_long:

if grid >= 3:

order_target_percent(symbol=context.symbol, percent=context.weight[grid], order_type=OrderType_Market,

position_side=PositionSide_Long)

print(context.symbol, '以市价单调多仓到仓位', context.weight[grid])

# 等于2为在中间网格,平仓

elif grid == 2:

order_target_percent(symbol=context.symbol, percent=0, order_type=OrderType_Market,

position_side=PositionSide_Long)

print(context.symbol, '以市价单全平多仓')

# 小于1为在中间网格的下方,做空

elif grid <= 1:

order_target_percent(symbol=context.symbol, percent=0, order_type=OrderType_Market,

position_side=PositionSide_Long)

print(context.symbol, '以市价单全平多仓')

order_target_percent(symbol=context.symbol, percent=context.weight[grid], order_type=OrderType_Market,

position_side=PositionSide_Short)

print(context.symbol, '以市价单开空仓到仓位', context.weight[grid])

# 持有空仓的处理

elif position_short:

# 小于1为在中间网格的下方,做空

if grid <= 1:

order_target_percent(symbol=context.symbol, percent=context.weight[grid], order_type=OrderType_Market,

position_side=PositionSide_Short)

print(context.symbol, '以市价单调空仓到仓位', context.weight[grid])

# 等于2为在中间网格,平仓

elif grid == 2:

order_target_percent(symbol=context.symbol, percent=0, order_type=OrderType_Market,

position_side=PositionSide_Short)

print(context.symbol, '以市价单全平空仓')

# 大于3为在中间网格的上方,做多

elif grid >= 3:

order_target_percent(symbol=context.symbol, percent=0, order_type=OrderType_Market,

position_side=PositionSide_Short)

print(context.symbol, '以市价单全平空仓')

order_target_percent(symbol=context.symbol, percent=context.weight[grid], order_type=OrderType_Market,

position_side=PositionSide_Long)

print(context.symbol, '以市价单开多仓到仓位', context.weight[grid])

if __name__ == '__main__':

'''

strategy_id策略ID,由系统生成

filename文件名,请与本文件名保持一致

mode实时模式:MODE_LIVE回测模式:MODE_BACKTEST

token绑定计算机的ID,可在系统设置-密钥管理中生成

backtest_start_time回测开始时间

backtest_end_time回测结束时间

backtest_adjust股票复权方式不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POST

backtest_initial_cash回测初始资金

backtest_commission_ratio回测佣金比例

backtest_slippage_ratio回测滑点比例

'''

run(strategy_id='strategy_id',

filename='main.py',

mode=MODE_BACKTEST,

token='token_id',

backtest_start_time='2017-07-01 08:00:00',

backtest_end_time='2017-10-01 16:00:00',

backtest_adjust=ADJUST_PREV,

backtest_initial_cash=10000000,

backtest_commission_ratio=0.0001,

backtest_slippage_ratio=0.0001)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/380932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python3 安装Crypto 出现的问题

python3 import Crypto 失败的解决办法 &#xff08;AES对称加密使用 模块&#xff09; # 先导入所需要的包 pip3 install Crypto # 再安装pycrypto pip3 install pycrypto from Crypto.Cipher import AES # 就成功了 ------------------------------- python3安装crypto出…

基于Windows 7旗舰版搭建WinCE6.0开发环境的过程

首先感谢JeffreyLi提供了更简便的安装WinCE6.0 R3的方法&#xff0c;今天验证过了&#xff0c;确实比我之前整理的《WinCE6.0 R3的安装步骤》方便很多&#xff0c;十分感谢&#xff01; 为了方便大家参考&#xff0c;重新整理的安装步骤如下&#xff1a; *Please install the …

随机邮箱_msgsafe - 一个处于半死不活状态的加密邮箱

一个半死不活的、还算有点意思的、支持端到端加密的免费邮箱&#xff0c;目前看来。邮箱简介好像自从Protonmail火了之后&#xff0c;支持端到端加密的邮箱越来越多&#xff0c;但大多有一个共同点&#xff1a;后缀都不怎么样。msgsafe.io于2016年建立&#xff0c;当年为了推广…

Spring环境搭建

1、导包&#xff08;此处省略如何下载Spring文件&#xff09; 打开我们的spring-framework-4.2.3.RELEASE文件&#xff08;这里我们只导入最基础的几个包&#xff09;&#xff0c;再打开libs文件&#xff1a; 找到以下几个包&#xff1a; 复制粘贴到eclipse中去&#xff0c;如…

win下python2,3和pip2,3双版本共存

在python环境中&#xff0c;有些开发需要依赖于python3的安装包&#xff0c;然而有些又需要python2才能运行。索性将python2和python3同时安装&#xff0c;并配置好各自的运行方式&#xff0c;以及各版本的pip。方便在需要安装工具包的时候&#xff0c;能准确定位到相应的版本。…

MFC 弹出对话框MessageBox

原来是这样的&#xff1a;AfxMessageBox(message); 就这么简单……转载于:https://www.cnblogs.com/youring2/archive/2010/08/25/1807719.html

python3 Crypto使用出现的问题

python3 安装Crypto 出现的问题 python3 import Crypto 失败的解决办法 &#xff08;AES对称加密使用 模块&#xff09; # 先导入所需要的包 pip3 install Crypto # 再安装pycrypto pip3 install pycrypto from Crypto.Cipher import AES # 就成功了 --------------------…

基于证书的WCF安全开发详解

基于证书的WCF安全开发详解 前几天成功建立起了一套基于证书的安全的WCF服务&#xff0c;很兴奋&#xff0c;现在做一下总结&#xff0c;希望大侠们指点&#xff0c;也希望能帮助到一些菜鸟&#xff0c;哈哈。 一、安全通信的基本过程 这里只做定性的理论上的分析&#xff0c;因…

h5分享到朋友圈_微信朋友圈创意招聘广告制作方法 H5模板

微信朋友圈招聘广告发布出去那么久了&#xff0c;为啥还是没有求职者前来应聘呢&#xff1f;那么一定是你的招聘广告不够创意&#xff0c;所以没能吸引求职者的目光。如何才能制作一个有创意更吸引求职者眼球的招聘广告呢&#xff1f;现在你只需通过制作平台的一个模板&#xf…

如何禁用win7的ASLR

ASLR&#xff08;Address space layout randomization&#xff09;使可执行程序的装载地址有一个随机偏移。虽然偏移值不大&#xff0c;但是会给内核级调试带来麻烦&#xff0c;尤其是离线查找符号表时。 经典的方法是用注册表项HKLM\SYSTEM\CurrentControlSet\Session Manage…

spring的Bean属性

我们在配置spring文件时&#xff0c;会遇到配置bean属性的问题&#xff0c;bean的作用很简单&#xff0c;就是使用该元素描述需要spring容器管理对象 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns:xsi"http://www.w3.org/2001/XML…

看了本书《答案在你心中》里面的很多问题都蛮有意思!!!

写完程序之余看看人生。想一想一些或许现在没有遇到&#xff0c;但将来某天会遇到的问题&#xff01;这本书总体还不错。摘几段看看&#xff01;&#xff01;每个人的答案都不一样&#xff01;&#xff01;哈哈《答案在你心中》为了心爱的人1 为了心爱的人&#xff0c; 你愿不愿…

还原特别慢_正手攻球最容易忽略的一步——还原

你距离标准的正手攻球可能只差一步。许多朋友在练习正手攻球一段时间以后&#xff0c;动作框架基本形成&#xff0c;有蹬转&#xff0c;能发力&#xff0c;肩部大臂都能放松&#xff0c;甚至能在击球的瞬间可以用上手指手腕的力量。但是录完视频一看&#xff0c;好像总是差那么…

Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)

Ubuntu使用教程&#xff1a;E: 无法获得锁 /var/lib/apt/lists/lock - open (11 资源临时不可用) 查看一下是否有使用apt-get的程序,终端输入:ps -aux,找到使用apt-get的程序(最后一列),查看其PID号,然后杀死其进程,输入sudo kill PID. 用sudo apt-get update时出现“ E: 无法…

Spring三种对象创建方式

1、创建方式1&#xff1a;无参构造 我们先创建一个User类&#xff1a; public class User {private String name;private int age;public User() {System.out.println("无参构造方法");}public String getName() {return name;}public void setName(String name) {t…

《Windows核心编程》の窗口过程的使用

1&#xff09;设计一个窗口过程&#xff1a; 下面的实例代码展现了经典的窗口过程的结构。窗口过程使用switch语句处理传入的消息参数uMsg&#xff0c; LRESULT CALLBACK MainWndProc( HWND hwnd, // handle to window UINT uMsg, // message identifier WPARAM …

Anti-Screen Capture(Prevent Screen Captures)截屏与反截屏

1.数字图片使用类似与动画的方式显示&#xff0c;每次显示的是数字的一部分&#xff0c;当动态显示的时候人眼是可以分辨出具体数字的。但是截图的话就只能截取一部分&#xff0c;参考&#xff1a; cups.cs.cmu.edu/soups/2007/posters/p147_lim.pdf 2.屏蔽系统按键&#xff1…

unity中链接字符串和变量显示_理解Unity中的优化(六):字符串和文本

字符串和文本&#xff1a;在Unity项目中&#xff0c;处理字符串和文本经常会产生性能问题。在C#中&#xff0c;字符串是不变的。任何对字符串的操作都会重新分配新的字符串&#xff0c;这个代价是非常昂贵的。如果在多重循环中重复地执行字符串连接操作&#xff0c;就会造成性能…

Bean的scope属性

1、singleton&#xff08;默认值&#xff09;&#xff1a;单列对象&#xff0c;被标识为单例的对象在spring容器中只会存在一个实例 测试如下&#xff1a; 我们创建一个User类&#xff1a; public class User {private String name;private int age;public User() {System.out…

Oracle 索引扫描的五种类型

之前在讨论CBO和RBO的时候提到了索引扫描的几种类型。 Oracle Optimizer CBO RBO http://blog.csdn.net/tianlesoftware/archive/2010/08/19/5824886.aspx Oracle 索引 详解 http://blog.csdn.net/tianlesoftware/archive/2010/03/05/5347098.aspx Oracle Explain Plan http:/…