今天在知乎上看到vnpy.cn和vnpy.com两个网站博主之间曾经还有一些过节,搬起我的小板凳,吃瓜!
链接
链接
我倒是不关心他们之间到底有什么瓜葛,只要我能学习到知识就够了。
看到量化林有篇文章写的还是有点道理的,建议读者们读一读——不推荐采用数据库,而是通过csv文件直接进行读写
那么为什么我还选择去配置MYSQL呢?原因还是在于目前VeightNa的数据采集,数据存储,策略,回测整个框架比较完善,有对接币圈交易所,使用起来会更方便一些,对于入门量化,做中长线策略来说,速度倒不是我现在追求的目标,所以暂时就先用VeightNa来做量化。
最后吐槽一下,前两天安装github上一个开源项目:Freqtrade,倒腾了两天去学习了docker配置了windows、centos环境,被代理给整吐了,最后还是放弃了这个项目…
瞎逼逼结束,正文开始~~
本文是在windows环境中安装
Ancona+python3.9
官网给了安装文档,照着上面配置就可以了
https://www.vnpy.com/docs/cn/windows_install.html
能成功运行下面这个文件说明配置成功.值得说明的是,VeightNa在3.0版本中移除掉了很多包,需要自己手动下载,比如:vnpy_cta,vnpy_ctastrategy…vnpy.okex
run.py文件
from vnpy.event import EventEngine
from vnpy.trader.engine import MainEngine
from vnpy.trader.ui import MainWindow, create_qapp
from vnpy_ctp import CtpGateway
from vnpy_ctastrategy import CtaStrategyApp
from vnpy_ctabacktester import CtaBacktesterApp
from vnpy_datamanager import DataManagerApp
from vnpy_okex import OkexGateway
def main():
"""Start VeighNa Trader"""
qapp = create_qapp()
event_engine = EventEngine()
main_engine = MainEngine(event_engine)
main_engine.add_gateway(OkexGateway)
main_engine.add_gateway(CtpGateway)
main_engine.add_app(CtaStrategyApp)
main_engine.add_app(CtaBacktesterApp)
main_engine.add_app(DataManagerApp)
main_window = MainWindow(main_engine, event_engine)
main_window.showMaximized()
qapp.exec()
if __name__ == "__main__":
main()
我们这边需要下载比特币的数据到数据库中,由于国内禁止交易数字货币,所以在3.0版本中移除掉了vnpy_okex,不过我们依然开源用pip下载
pip install vnpy_okex
下载完成后,我们需要手动修改okx的API地址,之前是okex.com,现在是okx.com
我们还需要修改vnpy/trader/constant.py
添加OKEX=‘OKX’
原因还是因为:vnpy.com把vnpy.cn给告了,理由是后者违反国家规定——交易数字货币,所以嘛,VeightNa就不支持数字货币交易了,我们这边又把它给加上了。(咳咳,我不建议大家炒币啊,教学也只是以学习为目的。)
所有准备工作完成后,连接交易所
这里还有个小坑,手动设置代理会报错
在网上查找了相关资料,写了个测试代码,加入proxy后会报clientConnectorError错误。
import aiohttp
import asyncio
async def main():
aiohttp.TCPConnector(verify_ssl=False)
async with aiohttp.ClientSession() as session:
async with session.get('https://python.org', proxy='http://127.0.0.1:12307') as response:
print("Status:", response.status)
print("Content-type:", response.headers['content-type'])
html = await response.text()
print("Body:", html[:15], "...")
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
解决办法:
import aiohttp
import asyncio
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy()) # 加上这一行,解决使用代理请求 https会报错问题
async def main():
aiohttp.TCPConnector(verify_ssl=False)
async with aiohttp.ClientSession() as session:
async with session.get('https://python.org', proxy='http://127.0.0.1:12307') as response:
print("Status:", response.status)
print("Content-type:", response.headers['content-type'])
html = await response.text()
print("Body:", html[:15], "...")
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
发现不再报错。python异步编程目前还没有学习,这边留一个坑,后面填。
对应到工程目录,找到site-packages里面的aiohttp/connector.py,加上这一行代码asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
问题解决。
官方给了相应的安装文档https://www.vnpy.com/docs/cn/database.html
但是官方安装了mysql图形界面,我们不需要那么麻烦,请通过这篇博文配置, 这边跳过安装步骤。
创建vnpy数据库
create database vnpy;
到这一步后,跟着官方文档配置VeightNa与数据库连接
启动run.py前还需要下载好vnpy_mysql包
pip install vnpy_mysql -i https://pypi.douban.com/simple
启动run.py
系统——连接,选择数据管理——下载数据
可以发现文件夹里面多了一个vnpy
通过mysql查询也能得到数据
大功告成!坑还是挺多的…python异步编程挺有意思的,后面我们专门拿出一节来介绍一下!还有mysql和mongodb还有nosql,主流数据库——关系型、非关系、时序,我们也拿出一节来专门介绍下。期待您的订阅,麻烦还是点个赞哈,您的支持就是我更新的动力!