Crypto Market Maker Project: 做市商 高频交易 回测
Posted wiger321
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Crypto Market Maker Project: 做市商 高频交易 回测相关的知识,希望对你有一定的参考价值。
持续更新: Wechat: Wiger123
高频框架
- Krypto: https://github.com/ctubio/Krypto-trading-bot
- Tribeca: https://github.com/michaelgrosner/tribeca
- StarQuant(易数交易系统): https://gitee.com/physer/starquant
- EliteQuant: https://gitee.com/twsy2020/EliteQuant_Cpp
- hikyuu: https://gitee.com/fasiondog/hikyuu
- QUANTAXIS: https://gitee.com/yutiansut/QUANTAXIS
- DuckDuckDuck: https://github.com/DuckDuckDuck0/ft
- HFT-Orderbook: https://gitee.com/greatwallisme/HFT-Orderbook
- trade-frame: https://github.com/rburkholder/trade-frame
- StockSharp: https://github.com/StockSharp/StockSharp
- Ccapi: https://github.com/crypto-chassis/ccapi
- algotrading: https://github.com/ivopetiz/algotrading
- kungfu: https://github.com/kungfu-origin/kungfu
- PandoraTrader: https://github.com/pegasusTrader/PandoraTrader
- WonderTrader: https://github.com/wondertrader/wondertrader
- OpenHFT: https://github.com/OpenHFT/OpenHFT
- hummingbot: https://github.com/hummingbot/hummingbot
回测框架
-
树叶大佬的知乎回答: https://zhuanlan.zhihu.com/p/406708630
-
以下内容均为搬运
框架名称 | 简介 | 评测 |
---|---|---|
pandas | 自己写向量化回测 | 纯自己造轮子,对代码能力和数学能力要求很高,资料比较少,但是速度非常快,自定义程度很高,实测双均线策略,14w行的k线数据 0.05秒就能测完,如果代码没写错的话回测结果和vectorbt是一样的。 |
backtrader | python的事件驱动回测,指标计算可以是向量化计算 | 14w行k线数据,双均线策略,跑大概30秒左右,其中15秒是在加载数据,15秒运行回测,速度可以说是里面最慢的了,但是在python的事件驱动框架里又算快的了。自定义程度很高,而且不用自己造轮子,回测代码非常简洁且逻辑清晰,文档非常详细,而且有大量的例子,甚至有论坛,可以说是这几个里面对用户最友好的框架了!这点非常重要,因为一个框架如果非常难用,上手很难的话,即使性能很优秀我觉得也不能算是一个优秀的开源框架。缺点:在回测大量数据时速度比较慢,不算致命缺点,但是很难受。 |
vectorbt | python向量化回测框架 | 14w行数据7秒跑完,速度算比较快了,但是作为一个向量化回测的框架,说实话这个成绩我不太满意。vectorbt的文档还算详细,但是还是远远不如backtrader的回测代码写起来也比较简单,缺点是画图分析比backtrader要差很多,代码基本得自己写。 |
hikyuu | C++内核 python接口的回测框架 | 国产框架,速度极快,百万级别的K线,2秒就能跑完,缺点是基本上只支持国内的股票数据,自定义数据很困难,而且可以说是几乎没有文档,可能是因为作者比较忙。我的水平比较低,看了几个例子和官网的文档之后仍然没能够上手。如果是高手的话可以去看看这个框架,速度相当快,我之后准备研究一下他的源码。回测的代码很简洁,但是局限性比较大,且上手略难。 |
wondertrader | C/C++内核 python接口的回测框架 | – |
vnpy | 国产经典 | 像是backtrader的强化版本,不过我还没用过,之前想去学但是感觉很复杂,资料也不如backtrader有条理,但是最大的优点是有UI界面,适合小白,且实盘对接做的很好。但是据说回测是不如backtrader的,如果有技术,可以用backtrader回测,用vnpy下单 |
quantconnect(LEAN) | – | 最近又尝试了一下新的框架,LEAN,好处是集回测和实盘于一体,且代码非常简洁易懂,文档和教程非常详细,感觉比vnpy好上手很多(可能我太菜了,vnpy当时看了两天没啥头绪)而且编程思路和backtrader很像,因此我上手也很快。最关键的是集回测和实盘于一体,且有好的社区,C#核心代码,python接口,数据也很方便获取。回测速度相当快,不太复杂的策略基本上是每秒20-80k行k线这个水平,15w行k线一两秒秒就跑完了,速度在这几个里面堪称无敌。 |
- 总结: 如果是小白或者数据量不是特别大,而且对回测速度没有特别高的要求建议使用 backtrader,教程、资料相比其他框架多得多,上手会简单很多。vectorbt 看起来速度很快,但是实测速度也就这样,可能是我测试的问题,如果有人测出了和我不一样的结果可以留言评论。如果是玩国内的股票期货,那可以考虑后面两个国产框架,对国内有优化,对其他的不太友好。如果对速度有要求,那就去自己写向量化吧,或者自己用 C++ 写,和 hikyuu 一样,hikyuu 的速度是真的快,我准备之后慢慢研究他的源码,看看为啥这么快,然后让他变得更好用一些。
个人感受
- 去年研究了一段时间强化学习做市商, 复现了两篇 paper (参考了作者源代码 github: https://github.com/sadighian/crypto-rl), 感觉效果不好
- 根据寒假实习学到的情况, 未来几个月的设想在下面的研究计划里
研究计划
- 做市商算法
- 高频算法
- 交易框架
- 回测系统
- 因子: cex + dex: ticker 5 + trade + web3 + …
- 模型
参考引用
- 量化橙同学
java对称加密AES加入偏移量
直接上demo
package com.bee.ms.market.utils;
import lombok.extern.slf4j.Slf4j;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
@Slf4j
public class MarketPasswordUtil
//偏移量,AES 为16bytes. DES 为8bytes
private static final String IV = "xxxx20220610xxxx";
//私钥,AES固定格式为128/192/256 bits.即:16/24/32bytes。DES固定格式为64bits,即8bytes。
private static final String AES_KEY="xxxx20220610xxxx";
//填充类型,DES加密把前面的AES改成DES即可
public static final String AES_TYPE = "AES/CBC/PKCS5Padding";
public static String encode(String password)
try
IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes());
//两个参数,第一个为私钥字节数组, 第二个为加密方式 AES或者DES
SecretKeySpec secretKeySpec = new SecretKeySpec(AES_KEY.getBytes(), "AES");
Cipher cipher = Cipher.getInstance(AES_TYPE);
cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec);
//PKCS5Padding比PKCS7Padding效率高,PKCS7Padding可支持IOS加解密
//初始化,此方法可以采用三种方式,按加密算法要求来添加。
// (1)无第三个参数
// (2)第三个参数为SecureRandom random = new SecureRandom();中random对象,随机数。(AES不可采用这种方法)
// (3)采用此代码中的IVParameterSpec(ECB不能使用偏移量)
//加密时使用:ENCRYPT_MODE; 解密时使用:DECRYPT_MODE;
byte[] encryptedData = cipher.doFinal(password.getBytes());
return Base64.getEncoder().encodeToString(encryptedData);
catch (Exception e)
log.error("Exception:", e.getMessage());
return null;
public static String decode(String encodePassword)
try
byte[] decodeByte = Base64.getDecoder().decode(encodePassword);
IvParameterSpec ivParameterSpec = new IvParameterSpec(IV.getBytes());
SecretKeySpec secretKeySpec = new SecretKeySpec(AES_KEY.getBytes(), "AES");
Cipher cipher = Cipher.getInstance(AES_TYPE);
//解密模式
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec);
byte[] bytes = cipher.doFinal(decodeByte);
return new String(bytes);
catch (Exception e)
e.printStackTrace();
log.error("Exception", e.getMessage());
return null;
AES加密类别
算法/模式/填充 字节加密后数据长度 不满16字节加密后长度
AES/CBC/NoPadding 16 不支持
AES/CBC/PKCS5Padding 32 16
AES/CBC/ISO10126Padding 32 16
AES/CFB/NoPadding 16 原始数据长度
AES/CFB/PKCS5Padding 32 16
AES/CFB/ISO10126Padding 32 16
AES/ECB/NoPadding 16 不支持
AES/ECB/PKCS5Padding 32 16
AES/ECB/ISO10126Padding 32 16
AES/OFB/NoPadding 16 原始数据长度
AES/OFB/PKCS5Padding 32 16
AES/OFB/ISO10126Padding 32 16
AES/PCBC/NoPadding 16 不支持
AES/PCBC/PKCS5Padding 32 16
AES/PCBC/ISO10126Padding 32 16
使用偏移量的时候遇到的异常记录
- AES 加密报错:java.security.InvalidAlgorithmParameterException: ECB mode cannot use IV https://www.cnblogs.com/goloving/p/15579655.html
参考了大佬的博文
https://www.cnblogs.com/xiaowangxiao/p/11416713.html
以上是关于Crypto Market Maker Project: 做市商 高频交易 回测的主要内容,如果未能解决你的问题,请参考以下文章