Pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。Pandas纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

Pandas数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的PyData开发team继续开发和维护,属于PyData项目的一部分。Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。Pandas的名称来自于面板数据(panel data)和python数据分析(data analysis)。panel data是经济学中关于多维数据集的一个术语,在Pandas中也提供了panel的数据类型。

关于pandas的安装方法,这里不在赘述,在python环境下,一个简单的pip命令即可搞定,文档方面,请参阅它的官方网站:https://pandas.pydata.org

Pandas的数据结构

Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近。Series如今能保存不同种数据类型,字符串、boolean值、数字等都能保存在Series中。

Time-Series:以时间为索引的Series。

DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。

Panel:三维的数组,可以理解为DataFrame的容器。

Panel4D:是像Panel一样的4维数据容器。

PanelND:拥有factory集合,可以创建像Panel4D一样N维命名容器的模块。

运用Pandas的强大特性来进行网格策略的编码

网格策略秉持的原则是“仓位策略比择时策略更重要”。其基本操作方式就是以某点为基点,每上涨戓下跌一定点数挂一定数量空单戓多单,设定盈利目标,但不设止损,当价格朝期望方向进展时获利平仓,并在原点位挂同样的买单戓卖单。这样布下的这些交易单形成了一张像鱼网样的阵列,在震荡的市场中来回获利。

本策略首先计算了过去300个价格数据的均值和标准差,并根据均值加减1和2个标准差得到网格的区间分界线,并分别配以0.3和0.5的仓位权重,然后根据价格所在的区间来配置仓位(+/-40为上下界,无实际意义):

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

第一步,我们需要引入策略代码中需要用到的库

importtypesimportnumpy as npimport pandas as pd

第二步,我们需要在发明者量化平台初始化合约数据,这个例子中,我们还是使用螺纹钢期货为例子。

definit():#订阅螺纹钢的2005合约,并且取得发明者量化平台当前周期的所有收盘价

exchange.SetContractType("rb2005")

records=exchange.GetRecords()

close_01=records.Close#获取网格区间分界线

context.band = np.mean(close_01) + np.array([-40, -3, -2, 2, 3, 40]) *np.std(close_01)#设置网格的仓位

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

第三步,也是最重要的,我们开始编写策略逻辑和实现自动化交易

这里需要注意的是,我们需要用到发明者量化平台的国内商品期货模版,模版地址为:https://www.fmz.com/strategy/24288 各位在发明者量化策略编写页面进行编码时,需要把此模版先复制到自己的策略库,然后在回测时勾选上,这里请各位读者注意

策略逻辑与实现其自动化交易:

defonTick(context, bars):

obj= ext.NewPositionManager() #使用发明者量化交易类库

#此处用来获取持仓信息

positions = exchange.GetPosition() #获取持仓数组

if len(positions) == 0: #如果持仓数组的长度是0

return 0 #证明是空仓,返回0

for i in range(len(positions)): #遍历持仓数组

if (positions[i]['Type'] == PD_LONG) or (positions[i]['Type'] ==PD_LONG_YD):

position_long= 1 #将position_long标记为1

elif (positions[i]['Type'] == PD_SHORT) or (positions[i]['Type'] ==PD_SHORT_YD):

position_short= -1 #将position_short标记为-1

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

grid = pd.cut([close_01], context.band, labels=[0, 1, 2, 3, 4])[0]#若无仓位且价格突破则按照设置好的区间开仓

if not position_long and not position_short and grid != 2:#大于3为在中间网格的上方,做多

if grid >= 3:

obj.OpenLong("rb2005", 1) #以市价单开多仓到仓位

if grid <= 1:

obj.OpenShort("rb2005", 1) #以市价单开空仓到仓位

#持有多仓的处理

elifposition_long:if grid >= 3:

obj.OpenLong("rb2005", 1) #以市价单调多仓到仓位

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

elif grid == 2:

obj.closebuy("rb2005", 1) #以市价单全平多仓

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

elif grid <= 1:

obj.closebuy("rb2005", 1) #以市价单全平多仓

obj.OpenShort("rb2005", 1) #以市价单开空仓到仓位

#持有空仓的处理

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

if grid <= 1:

obj.OpenShort("rb2005", 1) #以市价单调空仓到仓位

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

elif grid == 2:

obj.closesell("rb2005", 1) #以市价单全平空仓

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

elif grid >= 3:

obj.closesell("rb2005", 1) #以市价单全平空仓

obj.OpenLong("rb2005", 1) #以市价单开多仓到仓位

最后,我们用一个Main函数把策略跑起来。这里建议大家学会部署自己的托管者,即使在自己的电脑中本地部署,这样对于调试程序和回测交易逻辑来讲都有莫大的有益,特别是对于pandas这样的第三方库的安装,运用本地的anaconda环境管理软件来管理这些python库和环境将会起到事半功倍的效果。

以下是完整的策略代码:

importtypesimportnumpy as npimportpandas as pd#初始化合约数据

definit():#订阅螺纹钢的2005合约,并且取得发明者量化平台当前周期的所有收盘价

exchange.SetContractType("rb2005")

records=exchange.GetRecords()

close_01=records.Close#获取网格区间分界线

context.band = np.mean(close_01) + np.array([-40, -3, -2, 2, 3, 40]) *np.std(close_01)#设置网格的仓位

context.weight = [0.5, 0.3, 0.0, 0.3, 0.5]defonTick(context, bars):

obj= ext.NewPositionManager() #使用发明者量化交易类库

#此处用来获取持仓信息

positions = exchange.GetPosition() #获取持仓数组

if len(positions) == 0: #如果持仓数组的长度是0

return 0 #证明是空仓,返回0

for i in range(len(positions)): #遍历持仓数组

if (positions[i]['Type'] == PD_LONG) or (positions[i]['Type'] ==PD_LONG_YD):

position_long= 1 #将position_long标记为1

elif (positions[i]['Type'] == PD_SHORT) or (positions[i]['Type'] ==PD_SHORT_YD):

position_short= -1 #将position_short标记为-1

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

grid = pd.cut([close_01], context.band, labels=[0, 1, 2, 3, 4])[0]#若无仓位且价格突破则按照设置好的区间开仓

if not position_long and not position_short and grid != 2:#大于3为在中间网格的上方,做多

if grid >= 3:

obj.OpenLong("rb2005", 1) #以市价单开多仓到仓位

if grid <= 1:

obj.OpenShort("rb2005", 1) #以市价单开空仓到仓位

#持有多仓的处理

elifposition_long:if grid >= 3:

obj.OpenLong("rb2005", 1) #以市价单调多仓到仓位

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

elif grid == 2:

obj.closebuy("rb2005", 1) #以市价单全平多仓

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

elif grid <= 1:

obj.closebuy("rb2005", 1) #以市价单全平多仓

obj.OpenShort("rb2005", 1) #以市价单开空仓到仓位

#持有空仓的处理

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

if grid <= 1:

obj.OpenShort("rb2005", 1) #以市价单调空仓到仓位

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

elif grid == 2:

obj.closesell("rb2005", 1) #以市价单全平空仓

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

elif grid >= 3:

obj.closesell("rb2005", 1) #以市价单全平空仓

obj.OpenLong("rb2005", 1) #以市价单开多仓到仓位

defmain():whileTrue:

onTick()

Sleep(1000)

python处理期货数据_用python中的Pandas库实现一个商品期货网格策略相关推荐

  1. python如何安装panda数据库_在Pycharm中安装Pandas库方法(简单易懂)

    开发环境的搭建是一件入门比较头疼的事情,在上期的文稿基础上,增加一项Anaconda的安装介绍.Anaconda是Python的一个发行版本,安装好了Anaconda就相当于安装好了Python,并且 ...

  2. python处理行情数据_利用Python脚本来获取期货行情数据

    因为自己最近在学习做期货交易,想要下载期货的行情数据来做分析.有一些交易软件是可以导出数据的,但是导出的过程还是需要很多的手工操作,自己在想能不能通过Python程序来实现呢. 新浪期货数据接口介绍 ...

  3. python处理期货数据_获取和讯期货数据(Python版本)

    获取和讯期货数据(Python版本) 获取和讯期货数据(Python版本) Author: edwardgyw, Date: 2016-11-28 14:38:44 Tags: Python 扩展 商 ...

  4. python处理nc数据_利用python如何处理nc数据详解

    利用python如何处理nc数据详解 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  利用python如何处理nc数据详解.txt ] (友情提示:右键点上行txt ...

  5. 用python处理文本数据_用Python读取几十万行文本数据

    我在使用python读取几十万行的文件中的数据,并构造字典,列表等数据结构时,再访问字典,列表时,一般都会出现内存不够的问题,然后只能循环读取几百行或者一定数量的行数来循环操作. keyword_li ...

  6. python 读取wifi数据_通过Python实现WiFi测试数据分析

    通过 Python 实现 WiFi 测试数据分析 周春宇 [期刊名称] <通信电源技术> [年 ( 卷 ), 期] 2020(037)006 [摘要] Python 是一种面向对象的解释型 ...

  7. python做面板数据_用Python做数据分析的基本步骤(持续修改更新)

    一.环境搭建 数据分析最常见的环境是Anaconda+Jupyter notebook 二.导入包 2.1数据处理包导入 import numpy as np import pandas as pd ...

  8. 利用python进行数据分析数据_利用Python进行数据分析

    1.注释以及在Subplot上绘图 除标准的图表对象之外,你可能还希望绘制一些自定义的注释(比如文本.箭头或其他图形等). 注释可以通过text.arrow和annotate等函数进行添加.text可 ...

  9. python读取游戏数据_利用Python对游戏销量进行数据分析

    一.提出问题 1. 2005-2017年全球销量的top20的游戏是什么? 2. 2005-2017年各游戏生产商的销量对比,并使用堆叠柱状图进行可视化. 二.理解数据 数据大小:16599条 数据来 ...

最新文章

  1. python空类型-在Python中__________表示空类型。
  2. PHP 用each 和list配合 达到map的效果
  3. windows经典地雷小游戏(C语言实现)
  4. 知识图谱(六)——关系抽取
  5. 【动态规划】大厅安排 (ssl 1212)
  6. 一个第三方Dart库导致的编译错误!
  7. 智能互联网之数据存储实践
  8. 解决Ubuntu “E: 软件包 vim 还没有可供安装的候选者“问题
  9. oracle不显示表和过程,oracle表连接——处理连接过程中另外一张表没有相关数据不显示问题...
  10. python怎么打断点_Pycharm如何打断点的方法步骤
  11. 英特尔® 处理器显卡
  12. 实战经验总结:怎么避免和解决LinkedIn领英帐号被封(被限制登录)?
  13. vega56刷64_Vega56显卡怎么刷Bios VEGA56显卡刷Vega64方法
  14. Excel 设置数字以万为单位显示以更准确地表达数目
  15. 51单片机60秒倒计时 数码管显示
  16. leetcode加油站 Java
  17. cookie 、localStorage 和 sessionStorage 区别
  18. 上海亚商投顾:沪指低开高走 锂矿股午后大涨
  19. 超级AI大脑:全能型学习助理
  20. 优秀蓝牙耳机推荐,热销不错的四款蓝牙耳机推荐

热门文章

  1. STM32多路红外发送
  2. PTA团体程序设计天梯赛-练习集(3)
  3. 20230306 作业
  4. SAP 批量修改或添加BOM组件
  5. C语言实训 实训项目一 统计歌唱比赛成绩
  6. 华为2019开发者大会内容小记
  7. Linux命令行下设置黑底绿字
  8. 如何做机器学习模型质量保障及模型效果评测
  9. 基于密度聚类算法的改进
  10. 河南python培训班