#platform #hash-map #algorithmic-trading #struct #values #containing #build

from_hashmap

定义了一个过程宏,用于从一个包含字段值的HashMap构建一个结构体

1 个不稳定版本

使用旧的Rust 2015

0.1.0 2017年4月6日

#algorithmic-trading中排名11

MIT许可证

4KB
62

TickGrinder算法交易平台

Join the chat at https://gitter.im/TickGrinder/Lobby

TickGrinder是一个主要用Rust编写的性能高算法交易平台。它的目标是尽可能高效地处理基于事件的市埽数据,以便自动进行交易和管理。

目前,该平台只能在基于Linux的系统上编译和运行。计划未来支持Windows功能,但尚未确定实施时间表。

概述

平台的基础是用Rust编写的。它由几个独立的模块组成,这些模块可以独立运行,但通过Redis Pub/Sub之上的自定义消息协议进行通信。它设计为可扩展且健壮,可用于交易任何由基于事件的流式Tick数据组成的市场。

免责声明:该平台目前处于早期预alpha阶段开发,根本不适合任何类型的交易。 我不对您使用该平台进行交易或由此应用中的错误造成的任何财务损失承担责任。

Tick处理器

主要模块是Tick处理器。可以创建多个tick处理器,每个处理器对应平台处理的一个符号/数据流。它们的目的是将实时数据尽可能快地转换为交易信号。

每次接收到tick时,都会评估一系列条件。这些条件可以是任何东西:SMA穿越阈值,当前时间戳大于某个数值,任何可编程的表达式都可以作为条件。这些条件设计为可以在交易操作期间由优化器模块动态设置。

优化器/策略

优化器是一个模块,用于控制Tick处理器评估的条件,以打开交易并与经纪商API交互。一次只能运行一个优化器,并且它与平台中可能存在的所有Tick处理器进行交互。

优化器,使用您定义的任何策略,可以动态地设置参数和启用/禁用交易条件。它们通过向/从Tick处理器发送和接收命令,与数据库交互或使用您可能发现有用的任何外部数据源来实现这一点。该应用程序目前使用PostgreSQL作为主要的存储后端。

优化器评估的策略应由您,即用户编写!我正在保留我的策略的秘密,但将来我会提供一份示例策略供参考。

MM(管理/监控)界面

MM是平台与用户之间的接口。它包含手动管理平台组件、监控机器人活动、启动回测以及几乎所有其他功能的控件。它以简单的NodeJS Express网络服务器的形式存在,并通过Websocket<->Redis桥接系统与平台的通信系统进行通信。

它包含一个自定义图表模块,使用Highcharts,可以扩展自定义指标以生成真正的专业图表。这些图表的配置可以编译成JSON编码的宏字符串,然后可以加载以即时重新创建具有独特数据源和设置的图表。

经纪商API + 数据下载器

包括几个脚本/实用程序,用于与FXCM外汇API交互,创建实时数据流并访问历史市场数据。使用位于tick_writerdata_downloaders目录中的脚本,该应用程序可以通过Redis控制,并用作交易平台的主要数据源。

数据下载器脚本将货币对的tick数据保存到CSV文件中,自动下载数据块。tick writer脚本执行相同的功能,但处理通过Redis发送的实时tick。如前所述,更详细的文档可以在相应的目录中找到。

安装

需求:

  • Rust/Cargo Nightly
  • NodeJS v5.0.0或更高版本
  • Redis
  • PostgreSQL
  • libboost头文件(sudo apt-get install libboost-all-dev

在克隆存储库后,您需要将所有名为conf.default.rsconf.sample.js或类似的文件的所有实例复制到同一目录中,并根据需要填写它们的值。

在确保您有一个正在运行的Redis和PostgreSQL服务器,并且程序可以访问它们之后,您可以通过在项目的根目录中运行make test来确保一切设置正确。这将自动下载所有必需的依赖项,尝试构建所有模块,并运行所有包含的测试。遇到的任何错误都将打印到控制台,您可以使用它们来调试设置中遇到的问题。

要使用实时交易和数据下载功能,您需要设置FXCM Java应用程序(位于TickRecorder目录中)。该应用程序的详细设置和安装说明位于该文件夹中。数据下载器和tick_writer脚本的文档也可以在相应的目录中找到。

贡献

这是一个开源项目,因此您非常欢迎将其分叉并自定义以满足您的需求。

关于贡献主分支,我非常乐意合并包含语法改进、错误修复或类似小改动的pull请求。然而,对于重写代码大段或添加新功能等更重要的改动,请在投入大量工作之前先提交一个Issue或私下联系我。

此外,我不会接受仅包含格式化更改(如使用rustfmt运行文件或使用Clippy检查平台)的pull请求。我知道我使用的某些语法和风格选择并非100%“Rust风格”,但我做出这些选择是有原因的。对于修复错别字、添加更清晰或详细的注释/文档或以更简洁或高效的方式重写函数等改动非常欢迎。

结语

如果您对项目有任何反馈或评论,我非常乐意听取!我一直在努力提高我的编程技能,因此任何经验丰富的老手(或热心的初学者)的宝贵建议都非常受欢迎。

如果您觉得这个项目有用、激动人心,或者有计划在生产中使用它,请告诉我!我可能愿意与您合作,确保您的需求得到满足,并在过程中改进平台。


lib.rs:

以前用于接收包含字段:值对的HashMap,并使用它创建一个包含该数据的新结构。

依赖项

~0.4–0.8MB
~19K SLoC