Python 高频量化异步协程 笔记

1.踩坑

在我刚开始用异步协程框架写策略框架爽的飞起的时候
小数据没什么问题,流畅无延迟

后面加大数据量同时创建N个任务(loop.create_task)
那么最后面创建的这个任务,会延迟好几秒才执行,直接给我整懵逼了
任务越多,延迟情况越严重,我测试,任务很少,也会有0.00几秒的延迟

再使用多线程同时创建多个任务执行就不会有延迟的问题出现

但是一个新问题出现了,不使用异步协程又没办法使用aiohttp??

答案:用threading多线程调用含asyncio异步函数
相关资料:https://blog.csdn.net/LeKZzz/article/details/127343128

2. uvloop

import uvloop

uvloop.new_event_loop()
loop.create_task(print_money())
loop.run_forever()

Ps:使用uvloop 可以使 asyncio 更快。事实上,它至少比 nodejs、gevent 和其他 Python 异步框架要快 两倍 。基于 uvloop 的 asyncio 的速度几乎接近了 Go 程序的速度。

3. 目前结构

目前我的策略框架为:

  1. 异步协程
  2. aiohttp http请求
  3. 多线程
  4. Websocket更新触发策略,而非轮训

我不但要在网络延迟和手续费上卷你们,还要在策略框架上卷你们,哇哈哈哈哈
不过还是得向c++低头
可惜c++写起来太麻烦了,c++100行,python1行
后面慢慢把核心功能用c++实现,然后用python去调用


苏慕白 发布于  2023-3-22 23:06 

Python 高频量化Http网络请求速度优化 笔记

第一:c++为底层的python库
第二:异步携程 + aiohttp + Session
第三:urllib3 PoolManager
第四:requests + Session
第五:requests

说个小知识,requests并发请求使用多线程网络请求会阻塞,多进程才不会
总结:垃圾requests

部分交易所支持Websocket下单,比http请求步骤更少,不需要再连接,理论上速度更快

相关资料:

  1. https://www.cnblogs.com/ydf0509/p/14655383.html
  2. https://zhuanlan.zhihu.com/p/338093584?ivk_sa=1024320u
  3. https://github.com/ydf0509/nb_http_client

苏慕白 发布于  2023-3-22 22:33 

高频量化网络延迟速度优化 笔记

  1. aws c区最快,a区11ms,c区7ms,且系统差距就差很多延迟,最快的是ubuntu20
  2. python的aiohttp内部几百微妙,要用c++,招一个c++开发
  3. aws c5类型的cpu能快一点点

交易所:

  1. bian 在东京A区和C区,老服务器在C区,负载均衡达到一定程度就到A区,平时C区块
  2. coinex 东京C区
  3. okx 在阿里云香港
  4. bybit 在新加坡
  5. 火币 东京D区

苏慕白 发布于  2023-2-19 23:58