python算法交易平台

pedlar的Python项目详细描述


:chart_with_up_趋势:小贩

pedlar是python的一个算法交易平台,设计用于交易事件、比赛和会话,如算法。它包括一个带有多个帐户的实时Web界面,可以共享帐户和实时聊天,一个http api,带有示例python交易代理和基于azeromq的代理连接到metatrader5

pedlarweb

开始

如果已经有一个ticker服务器和web服务器在运行,那么可以使用pedlar下的客户端api。如果没有,请按照"托管"部分中有关如何获取它们的说明进行操作。客户机或代理api解决了连接ticker服务器(代理接收价格更新)和web服务器的问题,在这种情况下处理代理连接。自动售检票机是独立的,以减少交易和接收价格更新之间的开销和延迟。

安装

可以使用以下命令安装客户端API:

pip3 install --no-cache-dir -U pedlar

用法

pedlar文件夹中有一些有用的示例。以下是客户端API的概述:

frompedlar.agentimportAgentclassMyAgent(Agent):"""A trading agent."""defon_order(self,order):"""Called on placing a new order."""print("New order:",order)print("Orders:",self.orders)# Agent orders onlydefon_order_close(self,order,profit):"""Called on closing an order with some profit."""print("Order closed",order,profit)print("Current balance:",self.balance)# Agent balance onlydefon_tick(self,bid,ask,time=None):"""Called on every tick update."""print("Tick:",bid,ask,time)# self.buy()# self.sell()# self.close()defon_bar(self,bopen,bhigh,blow,bclose,time=None):"""Called on every bar update."""print("Bar:",bopen,bhigh,blow,bclose,time)if__name__=="__main__":importlogginglogging.basicConfig(level=logging.DEBUG)agent=MyAgent.from_args()agent.run()

额外的参数是从命令行解析的,可以使用以下命令运行:

python3 -u myagent.py -h

要记住的关键事项:

  • 每个代理都控制自己的订单和余额,它在共享帐户的代理之间不同步。此设置用于隔离代理。
  • 代理在退出订单时尝试关闭订单,如果硬停止或发生错误,则可能会保留打开的孤立订单。在这种情况下,一个选项是手动调用self.close和陈旧的订单id,或者简单地重置帐户。
  • ticker连接从zeromq接收,而交易请求是通过http发出的。如果交易请求太长,可能会有一些滴答声掉下来。

基本回测

代理可以对以下格式的csv文件进行回测,最后一列时间是可选的,时间格式可以通过代理的时间格式来调整:

tick,1.26361,1.26375,2019.01.03 23:44:42
tick,1.2636,1.26374,2019.01.03 23:44:59
tick,1.2636,1.26378,2019.01.03 23:45:00
bar,1.26386,1.26398,1.26355,1.2636,2019.01.03 23:45:00
tick,1.26359,1.26377,2019.01.03 23:45:02
tick,1.26357,1.26375,2019.01.03 23:45:05
tick,1.26356,1.26374,2019.01.03 23:45:07
tick,1.26358,1.26376,2019.01.03 23:45:10

它可以与agentpython3 myagent.py-b ticks.csv一起使用。实际上,每一行都将调用相应的on_tickon_bar函数。实际的利润和交易结果是根据绝对价格差异离线计算的。这意味着代理将完全离线运行,而实际结果只对了解性能或训练神经网络有用。任何超出买卖差价、价格要求等的额外经纪人佣金均不计算在内。

托管

Pedlar包含4个组件,它们相互对话,为代理商提供一个交易平台:

  • ticker:是一个zeromqpubsocket,它发布由代理接收的tick和bar更新,这些代理最终触发on_tickon_bar方法。此组件独立于其他组件运行,以提供连续的价格更新流。
  • 代理:是在市场上实际执行实时订单请求的组件。Pedlar与经纪人无关,它只需要使用唯一的订单ID来购买、出售和关闭订单的方法。
  • PedlarWeb:是处理用户帐户、实时排行榜等更新和代理交易请求的主要Web服务器。
  • pedlar:是一个客户端api,允许基于python的客户端从ticker接收更新,并向pedla发出交易请求。rweb

存储库结构

客户机和服务器包是分开的,以避免实现之间的任何假设。主要文件夹包括:

  • mt5:包含作为实时交易的股票经纪人和经纪人的交易组件。
  • Pedlar:包含客户端API是用于生成新代理的公开API。
  • PedlarWeb:是一个Web服务器,它在提供Web用户界面和实时更新的同时连接代理交易请求和代理。

先决条件

所需的所有附加软件包都可以使用:

pip3 install --no-cache-dir -U -r requirements.txt

运行MT5

要启动并运行ticker和broker组件,您需要:

  1. 安装metatrader5,否则某些现有安装将起作用。
  2. 为Windows安装ZeroMQ,因为脚本需要运行libzmq.dll。您可能需要安装一个兼容的<一个HRFF ="HTTPS://Spop.MySo.COM/Engb/elp/977 9003/Listest-Visual C下载"Re="NoFoLoLy"> VisualC++< /A>运行时,以获得ZrOMQ运行。
  3. 找到已安装的zeromqbin文件夹并将dll移动到library\libzmq.dll中,因为libzmq.mqh头需要它。
  4. 将文件metatrader 5文件复制到安装的预期文件夹。找到它的一个简单方法是打开metaeditor(来自trader的f4)并右键单击一个文件夹以选择打开文件夹。为了便于开发,编写一个脚本可以将repo文件夹与预期的文件夹同步。
  5. 编译完ticker和broker之后,您可以将它们附加到任何希望发送tick更新和处理交易订单的图表上。您也可以在不同的端口运行多个。从"选项"中,由于明显的原因,需要启用"允许dll导入"。
  6. 如果您获得DLL导入错误,很可能是因为ZrOMQ DLL不高兴,或者C++运行时不兼容。 < > >

    运行本地代理

    作为实时执行交易的替代方案,有一个lbroker.py实现了与实际mt5代理相同的接口,但却基于mt5提供的最新计时在本地执行订单。这是一个简单的独立脚本:

    python3 lbroker.py -h
    

    运行Web服务器

    web服务器是一个标准的flask应用程序,组织在pedlarweb包中。您需要创建一个instance/config.py来定制默认值。一旦config.py选项符合要求,就可以初始化数据库:

    mkdir instance && cp config.py instance/config.py # customise instance/config.py ex. database settings
    python3 -c "from pedlarweb import db; db.create_all()"

    如果使用内存中的默认数据库,则会自动创建表,但当服务器停止使用内存中的数据库时,数据会丢失。然后可以使用标准烧瓶选项运行服务器:

    exportFLASK_APP=pedlarweb flask run
    

    由于Flask socketio将运行Eventlet服务器。要进行开发,需要设置flask_env=development环境变量。为了方便起见,如果登录页面上没有用户名,则会创建一个新用户。这样做是为了尽可能轻松地让用户上车,而无需大量注册和电子邮件确认计划。

    FAQ

    • 为什么ticker与web服务器分离?这样做是为了减少代理接收价格更新时的开销和延迟。因此,代理需要同时连接到ticker和web服务器才能正常工作,除非是回溯测试。
    • 为什么不将ZeroMQ用于交易请求而不是HTTP?httpapi提供了一个更容易接近的提供服务的巧妙方式。http确实有更多的开销,但它也使其他与pedlarweb通信的非pedlar客户机更容易构建。最后,它有一个针对每个请求强制实施的身份验证机制。
    • 为什么源代码2缩进了空格?答案是个人风格和停止从其他资源直接复制粘贴的结合。使用pylint对代码执行lint操作,但有时会故意禁用它。

    限制和待办事项

    • 目前,api只支持在单个工具上进行交易,主要是因为web服务器可以与单个代理进行对话,而单个代理只能附加到单个图表。MT5代理已固定到当前图表symbol(),但有空间从代理服务器代理传递符号instrument。对于现场会议和比赛的目标观众来说,一种乐器就足够了。
    • 虽然对zeromq套接字使用了轮询,但它们本质上仍然是阻塞,以避免数据丢失。在这种情况下,代理看起来像是被ctrl+c冻结了一样。这种情况也发生在mt5 ticker和broker脚本上。投票的超时时间可以调整,或者稍有耐心就有帮助。
    • 由于mt5在windows上运行,所以有一个混合的行尾,并且开发在windows和linux环境之间有点分裂。希望我们生活在一个日复一日的时代,这不再是一个问题。

    使用

    构建

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
java将Map<String,String>传递给需要Map<String,Object>   java在循环中使用字符串而不是StringBuilder是否会造成内存损失?   jnlp如何更新java控制台JRE?   java更改、修改和重新打包CXFAPI源文件   JavaFXJava应用程序在Fedora上运行一段时间后关闭   使用来自不同类的方法的java   java如何通过ant脚本在linux中使用subst?   java在使用camunda modeler进行base64编码/解码时出错   获取java。netbeans、weblogic和fastswap设置为true时的lang.NoSuchMethodError   java如何提高FinalizerThread在GC中收集对象的优先级   java检测具有相同根的单词   netbeans crud应用程序中的java错误