Python版商品期货跨期对冲策略 (教学)

Python版商品期货跨期对冲策略 (教学)

Author: 小小梦, Date: 2020-06-02 09:20:21

Tags: Python 商品期货 对冲套利

移植自JavaScript版本商品期货跨期对冲 - 百行代码实现

简单的跨期对冲, 抛砖引玉, 细节还需要处理, 轮训间隔可以缩小到1秒或者删除Sleep那行策略就可以随时响应价格变化。

教学策略,学习为主。

class Hedge:

'对冲控制类'

def __init__(self, q, e, initAccount, symbolA, symbolB, hedgeSpread, coverSpread):

self.q = q

self.initAccount = initAccount

self.status = 0

self.symbolA = symbolA

self.symbolB = symbolB

self.e = e

self.isBusy = False

self.hedgeSpread = hedgeSpread

self.coverSpread = coverSpread

self.opAmount = OpAmount

self.records = []

self.preBarTime = 0

def poll(self):

if (self.isBusy or not exchange.IO("status")) or not ext.IsTrading(self.symbolA):

Sleep(1000)

return

insDetailA = exchange.SetContractType(self.symbolA)

if not insDetailA:

return

tickerA = exchange.GetTicker()

if not tickerA:

return

insDetailB = exchange.SetContractType(self.symbolB)

if not insDetailB:

return

tickerB = exchange.GetTicker()

if not tickerB:

return

# 计算差价K线

r = exchange.GetRecords()

if not r:

return

diff = tickerB["Last"] - tickerA["Last"]

if r[-1]["Time"] != self.preBarTime:

# 更新

self.records.append({"Time": r[-1]["Time"], "High": diff, "Low": diff, "Open": diff, "Close": diff, "Volume": 0})

self.preBarTime = r[-1]["Time"]

if diff > self.records[-1]["High"]:

self.records[-1]["High"] = diff

if diff < self.records[-1]["Low"]:

self.records[-1]["Low"] = diff

self.records[-1]["Close"] = diff

ext.PlotRecords(self.records, "diff:B-A")

ext.PlotHLine(self.hedgeSpread if diff > 0 else -self.hedgeSpread, "hedgeSpread")

ext.PlotHLine(self.coverSpread if diff > 0 else -self.coverSpread, "coverSpread")

LogStatus(_D(), "A卖B买", _N(tickerA["Buy"] - tickerB["Sell"]), "A买B卖", _N(tickerA["Sell"] - tickerB["Buy"]))

action = 0

if self.status == 0:

if (tickerA["Buy"] - tickerB["Sell"]) > self.hedgeSpread:

Log("开仓 A卖B买", tickerA["Buy"], tickerB["Sell"], "#FF0000")

action = 1

# 加入图表标记

ext.PlotFlag(self.records[-1]["Time"], "A卖B买", "O")

elif (tickerB["Buy"] - tickerA["Sell"]) > self.hedgeSpread:

Log("开仓 B卖A买", tickerB["Buy"], tickerA["Sell"], "#FF0000")

action = 2

# 加入图表标记

ext.PlotFlag(self.records[-1]["Time"], "B卖A买", "O")

elif self.status == 1 and (tickerA["Sell"] - tickerB["Buy"]) <= self.coverSpread:

Log("平仓 A买B卖", tickerA["Sell"], tickerB["Buy"], "#FF0000")

action = 2

# 加入图表标记

ext.PlotFlag(self.records[-1]["Time"], "A买B卖", "C")

elif self.status == 2 and (tickerB["Sell"] - tickerA["Buy"]) <= self.coverSpread:

Log("平仓 B买A卖", tickerB["Sell"] - tickerA["Buy"], "#FF0000")

action = 1

# 加入图表标记

ext.PlotFlag(self.records[-1]["Time"], "B买A卖", "C")

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 SetHedgeSpread(self, hedgeSpread):

self.hedgeSpread = hedgeSpread

Log("hedgeSpread修改为:", hedgeSpread)

def SetCoverSpread(self, coverSpread):

self.coverSpread = coverSpread

Log("coverSpread修改为:", coverSpread)

def main():

SetErrorFilter("ready|login|timeout")

Log("正在与交易服务器连接...")

while not exchange.IO("status"):

Sleep(1000)

Log("与交易服务器连接成功")

initAccount = _C(exchange.GetAccount)

Log(initAccount)

n = 0

def callBack(task, ret):

Log(task["desc"], "成功" if ret else "失败")

q = ext.NewTaskQueue(callBack)

p = ext.NewPositionManager()

if CoverAll:

Log("开始平掉所有残余仓位...")

p.CoverAll()

Log("操作完成")

t = Hedge(q, exchange, initAccount, SA, SB, HedgeSpread, CoverSpread)

while True:

q.poll()

t.poll()

cmd = GetCommand()

if cmd:

arr = cmd.split(":")

if arr[0] == "AllCover":

p.CoverAll()

elif arr[0] == "SetHedgeSpread":

t.SetHedgeSpread(float(arr[1]))

elif arr[0] == "SetCoverSpread":

t.SetCoverSpread(float(arr[1]))

相关内容

更多内容

python期货程序化交易高手_Python版商品期货跨期对冲策略 (教学)相关推荐

  1. python期货程序化交易高手心得_位顶级高手谈期货心得

    位顶级高手谈期货心得 王向洋 14 年期货生涯,多次获得全国期货实盘大赛冠军,曾创造的最高收益率为 5 个 月 54 倍. 期货中国网访谈精彩语录: 比赛时操盘的冒险精神强很多. 在和高手过招中你会思 ...

  2. python期货程序化交易高手心得_11位顶级高手谈期货心得

    位,再多钱也是没有用的. 外盘的价 格变化是国外交易商的预期,跟国内的预期不完全吻合. 我不会去使用程序化交易,我认为程序化交易是有局限性的. 价格是变化的,你很难用一个框子来框它! 有时候期货交易它 ...

  3. python期货程序化交易高手心得_程序化交易高手的交易心得 分享~

    总体来说, 一.行情研判模块 行情研判模块是主要为资金管理和交易策略服务的.如果除去这一点,所有的行情研判就都失去了目标也就没有办法设立标准,当然也就没有了实际的意义.预测是研判的一部分,但是研判不仅 ...

  4. python 期货策略_Python版商品期货跨期布林对冲策略 (教学)

    classHedge:'对冲控制类' def __init__(self, q, e, initAccount, symbolA, symbolB, maPeriod, atrRatio, opAmo ...

  5. python期货量化交易实战_Python期货量化交易实战

    ·了解交易的规则与数据指标,学习正确的金融算法·基于真实的数据进行回测和分析,了解期货交易的内涵·循序渐进的案例式教学,按部就班地操作就能上手·基于Python 3.7进行分析,提供示例代码,可在异步 ...

  6. python 期货策略_Python版商品期货多品种均线策略

    '''backteststart: 2019-07-01 09:00:00end: 2020-03-25 15:00:00period: 1dexchanges: [{"eid": ...

  7. 放弃文华财经,自己编程实现期货程序化交易

    一.目前期货程序化现状: 由于有免费的CTP接口,期货程序化交易目前比较普遍,很多人都尝试过在文华财经.金字塔之类的软件上回测和编写实盘策略. 期货程序化交易有很多优点:程序会按照设计自动执行,不受任 ...

  8. 如何使用Python进行程序化交易?

    程序化交易已经成为现代贸易中的重要概念,即使是在期货和外汇市场中也如此.它不仅可以提高交易的速度和准确性,还可以同时运行多个策略,从而提高交易效率.许多人选择使用Python进行程序化交易.以下是如何 ...

  9. 通达信期货程序化交易接口是什么?

    通达信期货程序化交易接口是什么?期货办理手续交易先讲期货的程序化交易. 联接国内四大期货交易所的期货交易系统软件关键是前高新科技综合交易服务平台(CTP ).金仕达.易盛(关键联接郑商所)等. 在其中 ...

  10. Python期货量化交易中常用的数据类型有哪些?

    1 常用内置常量 Python解释器在启动时会创建None.True.False三个常量,None表示"无",True表示"真",False表示"假& ...

最新文章

  1. 原创 | 斯坦福Machine Learning with Graphs 学习笔记(第一讲)
  2. 传染病控制(洛谷 1041 WA 90)
  3. oracle表设置主键自增长,笔记:oracle表设置主键自增长
  4. 亚马逊被起诉!因女员工一天上六次厕所遭开除
  5. Springboot 下 EasyExcel 的数据导入导出
  6. python 之 ------- 协程(微线程)
  7. android学习笔记---51_编码实现软件界面,把固定不变的界面写到xml中,逻辑改变的写到程序中,
  8. python day1 5:23
  9. 基于java物流管理信息系统
  10. pcr532,nfc读卡器复制家用门禁卡
  11. 基于因子分析法分析新冠肺炎疫情对房地产业上市公司财务的影响
  12. Windows Server 2012 R2 Backup 裸机恢复
  13. 如何使用GOOGLE高级搜索技巧
  14. ofbiz——工作流学习笔记一(xpdl)
  15. 【计算视觉】理解图像中基本概念:色调、色相、饱和度、对比度、亮度
  16. 常见的27个电源符号
  17. 立体翻转效果海报怎么制作?PS详细步骤教程!
  18. 2个鸡蛋100层楼/2个玻璃珠39层楼
  19. 打印0-100所有3的倍数的数字
  20. python+selenium实现微博登录和自动评论

热门文章

  1. wed是什么意思在计算机应用基础中,卡西欧wed什么意思
  2. Jaspersoft Studio 报表模板设计
  3. IDO-SBC3019-V1B:PX30 超强 CPU 搭载 Android/Linux 系统(Android8.1)
  4. 8051单片机Proteus仿真与开发实例-74HC573锁存器驱动仿真
  5. 排查生产环境下CPU飙高的原因
  6. vue3和vue2中mian.js的区别,在其中配置路由为例
  7. vue3.0在mian.js中引入全局less
  8. 离开了公司,你还有什么
  9. 披萨门 pizzagate
  10. 手机uc7.2java版下载_UC浏览器 JAVA