python 期货策略_Python版商品期货跨期布林对冲策略.md
> 策略名称
Python版商品期货跨期布林对冲策略
> 策略作者
Hukybo
> 策略描述
参考文章:https://www.fmz.com/bbs-topic/5726
> 策略参数
|参数|默认值|描述|
|----|----|----|
|SA|rb2010|合约A|
|SB|rb2101|合约B|
|OpAmount|true|开仓手数|
|CoverAll|false|启动时平掉所有仓位|
|MAPeriod|20|布林周期参数|
|ATRRatio|2|布林乘数参数|
> 源码 (python)
``` python
'''backtest
start: 2020-02-17 09:00:00
end: 2020-06-12 15:00:00
period: 1d
basePeriod: 1m
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
args: [["ATRRatio",3]]
'''
class Hedge:
def __init__(self, q, e, initAccount, symbolA, symbolB, maPeriod, atrRatio, opAmount):
self.q = q
self.initAccount = initAccount
self.status = 0
self.symbolA = symbolA
self.symbolB = symbolB
self.e = e
self.isBusy = False
self.maPeriod = maPeriod
self.atrRatio = atrRatio
self.opAmount = opAmount
def poll(self):
if (self.isBusy or not exchange.IO("status")) or not ext.IsTrading(self.symbolA):
Sleep(1000)
return
exchange.SetContractType(self.symbolA)
recordsA = exchange.GetRecords()
exchange.SetContractType(self.symbolB)
recordsB = exchange.GetRecords()
if not recordsA or not recordsB:
return
if recordsA[-1]["Time"] != recordsB[-1]["Time"]:
return
minL, rA, rB = min(len(recordsA), len(recordsB)), recordsA.copy(), recordsB.copy()
rA.reverse()
rB.reverse()
arrDiff = []
for i in range(minL):
arrDiff.append(rB[i]["Close"] - rA[i]["Close"])
arrDiff.reverse()
if len(arrDiff) < self.maPeriod:
return
boll = TA.BOLL(arrDiff, self.maPeriod, self.atrRatio)
ext.PlotLine("上轨", boll[0][-2], recordsA[-2]["Time"])
ext.PlotLine("中轨", boll[1][-2], recordsA[-2]["Time"])
ext.PlotLine("下轨", boll[2][-2], recordsA[-2]["Time"])
ext.PlotLine("收盘价差价", arrDiff[-2], recordsA[-2]["Time"])
LogStatus(f"{_D()}\n上轨:{boll[0][-1]}\n中轨:{boll[1][-1]}\n下轨:{boll[2][-1]}\n当前收盘差价:{arrDiff[-1]}")
action = 0
if self.status == 0:
if arrDiff[-1] > boll[0][-1]:
Log("开仓 A买B卖", ",A最新价格:", recordsA[-1]["Close"], ",B最新价格:", recordsB[-1]["Close"], "#FF0000")
action = 2
elif arrDiff[-1] < boll[2][-1]:
Log("开仓 A卖B买", ",A最新价格:", recordsA[-1]["Close"], ",B最新价格:", recordsB[-1]["Close"], "#FF0000")
action = 1
elif self.status == 1 and arrDiff[-1] > boll[1][-1]:
Log("平仓 A买B卖", ",A最新价格:", recordsA[-1]["Close"], ",B最新价格:", recordsB[-1]["Close"], "#FF0000")
action = 2
elif self.status == 2 and arrDiff[-1] < boll[1][-1]:
Log("平仓 A卖B买", ",A最新价格:", recordsA[-1]["Close"], ",B最新价格:", recordsB[-1]["Close"], "#FF0000")
action = 1
if action == 0:
return
self.isBusy = True
tasks = []
if action == 1:
tasks.append([self.symbolA, "sell" if self.status == 0 else "closebuy"])
tasks.append([self.symbolB, "buy" if self.status == 0 else "closesell"])
elif action == 2:
tasks.append([self.symbolA, "buy" if self.status == 0 else "closesell"])
tasks.append([self.symbolB, "sell" if self.status == 0 else "closebuy"])
def callBack(task, ret):
def callBack(task, ret):
self.isBusy = False
if task["action"] == "sell":
self.status = 2
elif task["action"] == "buy":
self.status = 1
else:
self.status = 0
account = _C(exchange.GetAccount)
LogProfit(account["Balance"] - self.initAccount["Balance"], account)
self.q.pushTask(self.e, tasks[1][0], tasks[1][1], self.opAmount, callBack)
self.q.pushTask(self.e, tasks[0][0], tasks[0][1], self.opAmount, callBack)
def main():
while not exchange.IO("status"):
Sleep(1000)
initAccount = _C(exchange.GetAccount)
q = ext.NewTaskQueue()
p = ext.NewPositionManager()
if CoverAll:
p.CoverAll()
t = Hedge(q, exchange, initAccount, SA, SB, MAPeriod, ATRRatio, OpAmount)
while True:
q.poll()
t.poll()
```
> 策略出处
https://www.fmz.com/strategy/231803
> 更新时间
2020-10-21 16:35:32
一键复制
编辑
Web IDE
原始数据
按行查看
历史
python 期货策略_Python版商品期货跨期布林对冲策略.md相关推荐
- python 期货策略_Python版商品期货跨期布林对冲策略 (教学)
classHedge:'对冲控制类' def __init__(self, q, e, initAccount, symbolA, symbolB, maPeriod, atrRatio, opAmo ...
- python 期货策略_Python版商品期货多品种均线策略
'''backteststart: 2019-07-01 09:00:00end: 2020-03-25 15:00:00period: 1dexchanges: [{"eid": ...
- 策略 python_Python版商品期货多品种均线策略
完全移植自「CTP商品期货多品种均线策略」,由于Python版本商品期货策略还没有一个多品种的策略,所以就移植了JavaScript版本的「CTP商品期货多品种均线策略」.提供一些Python商品期货 ...
- python数据分析及可视化(十七)聚宽(双均线分析、因子选股策略、多因子选股策略、均值回归理论、布林带策略、PEG策略、权重收益策略)
聚宽 聚宽是一个做金融量化的网站,https://www.joinquant.com,登录注册,如果你写的文章.策略被别人采纳,增加积分,积分用于免费的回测时长.在我的策略,进入策略列表,里面有做好的 ...
- python 网格策略_Python版简单网格策略
Python版简单网格策略 策略广场上的Python策略不多,这里编写了一个Python版本的网格策略.策略原理十分简单,在一个价格区间内固定价格距离产生一系列的网格节点,当行情变化时,价格到达一个网 ...
- python全局变量定义_Python 3 实现定义跨模块的全局变量和使用
尽管某些书籍上总是说避免使用全局变量,但是在实际的需求不断变化中,往往定义一个全局变量是最可靠的方法,但是又必须要避免变量名覆盖. Python 中 global 关键字可以定义一个变量为全局变量,但 ...
- python对话框大小_Python 版 AR 对话框
周末了,用 Python 代码给大家带来一个好玩的视频特效:Python 版 AR 对话框https://www.zhihu.com/video/1110617264784699392 摄像头拍摄的视 ...
- python rm 条件_python版rm命令
安全的linux rm 命令 -- python版rm命令 众所周知 linux 下 大杀器之一 rm 是多么恐怖的东西存在 众多系统管理员 对此命令是又爱 又恨, 基于本人也是一枚系统管理员, 写下 ...
- python容器装水_Python版LeetCode11. 盛最多水的容器
本文转载自[微信公众号:机器学习算法与Python精研,ID:AITop100]经微信公众号授权转载,如需转载与原文作者联系 题目: 给定 个非负整数 1,2,...,n,每个数代表坐标中的一个点 ( ...
- python显示倒计时_python版春节倒计时实时显示
昨天写了个计算距离今年春节还有几天的脚本,今天在群里看到可以实时刷新的一个脚本,利用flush()函数清空输出的功能,我把昨天的脚本修改了以下,下面直接上代码:[root@localhost prog ...
最新文章
- android 通知取消折叠_三星折叠屏手机发布会取消背后-折叠屏真的是用户想要的吗...
- 科学家研发多模态生物识别系统,基于脑纹独特性来防范身份欺骗
- java 二叉堆_二叉堆(三)之 Java的实现
- Jenkins 设置镜像_Windows Docker Agent 镜像可以常规使用了
- mysql修改表结构大表_在线修改MySQL大表的表结构
- An example of using Pandas for regression
- 电脑上有一个程序一直在按向上_HUAWEI Matebook 九个超牛电脑快捷键
- C#调用C++DLL的小总结8---C++Dll中函数返回字符串指针
- 一个古怪的VISTA网络问题解决的坎坷经历
- new/delete和malloc/free的区别一般汇总
- selenium 定位方式3-css_selector
- 遍历字典时用与不用iter的区别
- Web***系列教程之跨站脚本***和防范技巧详解
- access与sqlserver数据转换
- [原]ASP.NET MVC 3 Razor + jqGrid 示例
- 电子万年历——沐雨先生
- python-can库基于PCAN-USB使用方法
- 面包板的使用-----看板子反面即可
- python+ffmpeg视频转码转格式
- qiankun 2.x 运行时沙箱 源码分析
热门文章
- Unity 2D人物移动实现
- python获取标准的北京时间的源码
- python地理位置聚类_python实现地理位置的聚类
- 计算机协会副会职责,计算机协会规章制度解答.doc
- lgv30刷android10,记一次LG V30系列手机完美刷入MIUI12系统和Flyme刷机教程
- 第六章 选择语句、循环语句、Debug
- The PyTorch-Kaldi Speech Recognition Toolkit
- pycharm备份还原
- ionic + angular开发篇之踩坑集
- 手势识别(一)--手势基本概念和ChaLearn Gesture Challenge