python版期货量化交易(AlgoPlus)案例(多进程处理子任务)

python版期货量化交易(AlgoPlus)案例(多进程处理子任务)

python因为简单、易上手,所以深受大家的喜爱,并且随着人工智能的不断发展与进步,python也一跃成为了最受欢迎的编程语言之一,俗话说:人生苦短,我用python。伴随着量化交易的崛起,上期所下面的子公司根据CTP接口封装出了python版本的api接口:Algoplus


文章目录

  • python版期货量化交易(AlgoPlus)案例(多进程处理子任务)
  • 前言
  • 一、AlgoPlus是什么?
  • 二、使用步骤
    • 1.引入库
    • 2.账号配置
    • 3.合成分钟线
    • 4.Join函数
    • 5.结果展示
  • 总结


前言

为了 策略的安全性,有必要自己搭建一套交易系统


提示:以下是本篇文章正文内容,下面案例可供参考

一、AlgoPlus是什么?

安装: pip install AlgoPlus

关于AlgoPlus的介绍请查看www.algoplus.com官网,这里不得不得不吐槽有一下,AlgoPlus官网有一段时间打不开。

二、使用步骤

1.引入库

代码如下(示例):

# from CTP.MdApi import *
from AlgoPlus.CTP.FutureAccount import get_simnow_account, FutureAccount
from AlgoPlus.CTP.FutureAccount import SIMNOW_SERVER, MD_LOCATION, TD_LOCATIONfrom multiprocessing import Process, Queuefrom CTP.MdApi import run_bar_engine, run_tick_enginefrom CTP.TradeApi import run_trade_engine

2.账号配置

代码如下(示例):

 # 账户配置future_account = FutureAccount(broker_id='9999',  # 期货公司BrokerID# server_dict={'TDServer': "180.168.146.187:10130", 'MDServer': '180.168.146.187:10131'},   # TESTserver_dict={'TDServer': "218.202.237.33:10102", 'MDServer': '218.202.237.33:10112'},       # 移动# TDServer为交易服务器,MDServer为行情服务器。服务器地址格式为"ip:port。"reserve_server_dict={},investor_id="****************",     # 账户password="****************",        # 密码app_id='simnow_client_test',        # 认证使用AppIDauth_code='0000000000000000',       # 认证使用授权码instrument_id_list=instrument_id_list,  # 订阅合约列表md_page_dir=MD_LOCATION,                # MdApi流文件存储地址,默认MD_LOCATIONtd_page_dir=TD_LOCATION                 # TraderApi流文件存储地址,默认TD_LOCATION)

SimNow提供了7x24小时的模拟服务器

3.合成分钟线

代码如下(algoplus提供官方示例):

# ///深度行情通知def OnRtnDepthMarketData(self, pDepthMarketData):last_update_time = self.bar_dict[pDepthMarketData['InstrumentID']]["UpdateTime"]is_new_1minute = (pDepthMarketData['UpdateTime'][:-2] != last_update_time[:-2]) and pDepthMarketData['UpdateTime'] != b'21:00:00'  # 1分钟K线条件# is_new_5minute = is_new_1minute and int(pDepthMarketData['UpdateTime'][-4]) % 5 == 0  # 5分钟K线条件# is_new_10minute = is_new_1minute and pDepthMarketData['UpdateTime'][-4] == b"0"  # 10分钟K线条件# is_new_10minute = is_new_1minute and int(pDepthMarketData['UpdateTime'][-5:-3]) % 15 == 0  # 15分钟K线条件# is_new_30minute = is_new_1minute and int(pDepthMarketData['UpdateTime'][-5:-3]) % 30 == 0  # 30分钟K线条件# is_new_hour = is_new_1minute and int(pDepthMarketData['UpdateTime'][-5:-3]) % 60 == 0  # 60分钟K线条件# # 新K线开始if is_new_1minute and self.bar_dict[pDepthMarketData['InstrumentID']]["UpdateTime"] != b"99:99:99":for md_queue in self.md_queue_list:md_queue.put(self.bar_dict[pDepthMarketData['InstrumentID']])# 将Tick池化为Bartick_to_bar(self.bar_dict[pDepthMarketData['InstrumentID']], pDepthMarketData, is_new_1minute)

注意:我在向队列里添加数据时使用了深拷贝,官方给的示例有时无法得到正确的一分钟k线数据,因为当你在交易进程中还未拿到k线数据之前,已经被修改了。

4.Join函数

在Join函数中可以写策略逻辑:开仓、平仓等。
    def Join(self):lastPrice = 0  # 上根k线的收盘价while True:if self.status == 0:if not self.md_queue.empty():makeData = self.md_queue.get(True)# 撤单if self.local_position_dict:if self.local_position_dict[self.tickData['InstrumentID']]['Volume'] != 0:self.req_remove(self.tickData)print(f"====={makeData}")# 亏损超8个点止损,回撤6个点止损for instrument_id, position in self.local_position_dict.items():if self.symbol_close[instrument_id] == 1:if instrument_id not in self.md_dict.keys():breakif position['Volume'] != 0 and position['Direction'] == b'0':self.sell_close(b'', instrument_id, makeData['LastPrice'] - 6, 1)print(f"卖平仓:{lastPrice}{makeData['LastPrice']}")else:self.buy_close(b'', instrument_id, makeData['LastPrice'] + 6, 1)print(f"买平仓:{lastPrice}{makeData['LastPrice']}")if lastPrice != 0:sleep(1)   # 时间是59s的时候休眠1s,0s时开仓if makeData['LastPrice'] >= lastPrice:self.buy_open(b'', b'p2209', makeData['LastPrice'] + 6, 1)print(f"买开仓:{lastPrice}{makeData['LastPrice']}")else:self.sell_open(b'', b'p2209', makeData['LastPrice'] - 6, 1)print(f"卖开仓:{lastPrice}{makeData['LastPrice']}")lastPrice = makeData['LastPrice']# 初始化为最新价self.HighPrice = makeData['LastPrice']self.LowPrice = makeData['LastPrice']else:sleep(1)# 止盈止损self.check_position()

5.结果展示

在这里插入图片描述


源代码链接: https://pan.baidu.com/s/10HnZf89cEAbXtlbrJRlVEA .
提取码:yooq

如果您熟悉c++11,请看CTP开发案例:
CTP接口开发链接: https://blog.csdn.net/syealfalfa/article/details/124994132 .

总结

请关注www.algoplus.com官网的最新消息

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

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

相关文章

程序员如何学习量化交易,一文总结

最近有位金融行业的朋友想把一个盈利能力很强的策略做成量化程序遇到问题,问题是这样的 线程A在while(true)的循环里做条件判断,循环耗时1分钟。循环结束判断条件满足的时候调用交易接口下单建仓。想实现条件成立马上建仓,而不需要等待1分钟的…

屏蔽 app 开屏广告,舒畅了

之前吐槽过开屏广告 吐槽一下 ,今天分享下iOS手机屏蔽 app 开屏广告的方法: 1.打开手机设置 2.打开 屏幕使用时间 3.打开 内容和隐私访问限制 4.找到 广告 设置为不允许 设置完后大部分app的开屏广告没了,当然可能有漏网之鱼,可…

【K8S系列】快速初始化⼀个最⼩集群

序言 走得最慢的人,只要不丧失目标,也比漫无目的地徘徊的人走得快。 文章标记颜色说明: 黄色:重要标题红色:用来标记结论绿色:用来标记一级重要蓝色:用来标记二级重要 希望这篇文章能让你不仅有…

吴恩达教你写提示词 ChatGPT prompt engineering

文章目录 吴恩达教你写提示词 ChatGPT prompt engineering1. 关键提示(prompt)原则1. 基础2. 编写明确和具体的提示词3. 给模型时间“思考”4. 模型的限制5. 迭代式提示(prompt)开发过程 2. 提示(prompt)一…

【AI提示】ChatGPT提示工程课程(吴恩达OpenAI)迭代提示词笔记(中文chatgpt版)...

Iterative Prompt Develelopment 迭代提示词开发 在本课中,您将反复分析和优化您的提示,以从产品说明书生成营销文案。 设置 import openai import osfrom dotenv import load_dotenv, find_dotenv _ load_dotenv(find_dotenv()) # read local .env fil…

Unity Shader人物发光特效

Unity Shader人物发光特效 写在前面效果实现方法项目地址写在后面 写在前面 当人物被击中或则有任务引导提升时,人物身上将会有发光特效,这里我自己实现一下。 效果 实现方法 核心思想就是将贴图试图向量(朝摄像机方向)与法线向量单位化后做点乘从而得…

【Unity】awake和start

生命周期流程如下 本篇主要讲的是在比较靠前的awake和start阶段,因为这两个阶段效果类似,都只会执行一次,但是具有触发条件. awake、enable、start依照次顺序执行,awake会在一开始的时候就会执行,但start则是在被激活…

Unity Shader - 类似七龙珠的人物气焰效果

文章目录 环境效果思路passespass - 气焰优化后的 shader Project关于效果落地 环境 Unity : 2018.3.11f1 Pipeline : BRP 效果 覆盖身前 覆盖身前 叠加混合 风格化 版本,更适合 NPR: 再优化一版本 该效果是自己摸索的(也是自己再国…

虚幻引擎中GPU Lightmass全局光照的使用步骤

GPU Lightmass (GPULM) 是一种光烘焙方法,它预先计算来自具有 Stationary 或 Static 移动性的灯光的复杂光交互,并将该数据存储在创建的应用于场景几何体的光照贴图纹理中。GPU Lightmass 显着减少了为复杂场景计算、构建和生成光照数据所需的时间&#…

UE4 Shader 常用函数 学习笔记

Add:快捷键a 将两数相加,也可以将两纹理相加,如下图: append(追加): Subtract(减): 和加相反,特例,如下: Abs&#xff0…

Ubuntu搭建原神3.7版本服务器

本文涉及知识点 linux基础命令|mongoDB服务端搭建及指令|Java环境搭建 原神私服可以用来抽卡满足自己用,他的许多任务都得登录控制台自己发,不建议拿私服玩,想要体验完美原神请到官服,本文只做LINUX MongoDB java教学例子 写在前…

原神角色渲染详解

整体效果展示:主要方案是对下面几张图做不同的处理 身体 基础颜色光照:主要贴图卡通贴图ramp图法线图光照图 金属度与高光,头发部分高光:光照图,头发部分用高光black图 深度边缘光:用额外pass DepthNor…

打脸了兄弟们,Go1.20 arena 来了!

大家好,我是煎鱼。 大概半年前,我写过一篇文章《Go 要违背初心吗?新提案:手动管理内存》。有兴趣了深入解的同学,可以再回顾一下。 当时我们还想着 Go 团队应该不会接纳,至少不会那么快: 没想到…

对正在打野发育的红队同学的一次反制

文章目录 故事开始其他反制思路隐蔽C2CS重定向器实验 故事开始 真的是对同学的反制哈,我们最近都在学习内网&钓鱼就互相”攻击“,就有那么一天我就在想我偷懒把CS登录密码设置的很简单,会不会其它人也偷懒,于是就抱着尝试的心…

zsteg安装及CTF打野wp

下载文件解压后拖进kali里,移到root目录下 使用命令 zsteg 文件名 执行成功后即可获取qwxf{you_say_chick_beautiful?} 下面介绍zsteg的安装 使用命令 git clone http://www.github.com/zed-0xff/zsteg apt-get install gem gem install zsteg 若报错,…

AI版女网红“半藏森林”上线,服务项目让人意想不到

目前首批网红明星“AI克隆人”已提前上线,主营业务就是打造各种名人版AI聊天机器人,用户付费便可与之聊天。其后台报名参加AI克隆人的网红明星“全网粉丝总数已超过5亿”。该公司这波上线的网红明星AI克隆人,包括此前因“疑似插足他人恋情”&…

炉石传说 爬取全部卡牌

之前我30行爬了英雄联盟全部皮肤 这次爬炉石稍稍麻烦点,50行 网页分析 首先,我们分析炉石官方网站卡牌工具https://hs.blizzard.cn/cards/ 通过源代码和Network分析,发现返回的卡牌是用post请求的json文件 请求数据为: cardCla…

我用python玩炉石传说(3)-----炉石卡牌套牌自动构建算法

本文共三个部分: 我用python玩炉石传说(1)-----炉石卡牌相关度分析的手动打分器我用python玩炉石传说(2)-----炉石卡牌套牌爬取器及自动分析卡牌相关度我用python玩炉石传说(3)-----炉石卡牌套…

(写着玩)Python仿网络游戏《炉石传说》,继上次部分代码展示

上一期: (写着玩)Python仿网络游戏《炉石传说》,使用LOL的卡牌进行模拟对局(版本1.0)_AMarvelZ的博客-CSDN博客