1. 写在前面
特此申明:在2017年9月4日国家命令禁止加密货币的交易,该程序仅用于研究,不构成任何买卖建议或辅助加密货币交易,请大家正视交易加密货币所带来的风险(不要老是想着梭哈,赢了会所嫩模,天台站不下那么多人,再这么下去天台要排号跳楼了),请大家合法合规进行理财投资,遵守国家法律法规。
最近工作一直比较忙,很久以前打算开始搭的量化交易平台今天才开始动工,希望我能在最短时间内搭建完成。另外本人工作也非专业系统开始,末流程序员,对Django和Python仅处于初学,请大神勿喷,平台仅用于个人娱乐,有兴趣的同学可以私信我一起开发。
我们计划程序分为三个部分,第一部分为数据采集,第二部分为回测平台,第三部分为实盘交易平台。
系统版本:
python 3.6.4
Django 2.05
用最新的Django版本,我其实内心也很慌,可能会踩很多坑,就这样吧,初生牛犊不怕虎。
源码地址:https://github.com/zhangpei529/TradeSystem
<https://github.com/zhangpei529/TradeSystem>
2. 数据采集部分
由于以前并没有使用django做相应的任务调度,仅常用crontab进行任务调度。百度很多,django_apscheduler对数据采集程序进行调度。
前期数据采集主要是基于火币Pro,后期可能会接入币安等平台数据。(嗯嗯,那啥,火币麻烦看到结下广告费)
2.1 包安装
pip install apscheduler pip install django_apscheduler
2.2 相应配置
settings.py
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth',
'django.contrib.contenttypes', 'django.contrib.sessions',
'django.contrib.messages', 'django.contrib.staticfiles',
'RegressionTesting.apps.RegressiontestingConfig',
'DataAcquisition.apps.DataacquisitionConfig', 'django_apscheduler', ]
views.py
from apscheduler.schedulers.background import BackgroundScheduler from
django_apscheduler.jobstoresimport DjangoJobStore, register_events,
register_job scheduler = BackgroundScheduler()
scheduler.add_jobstore(DjangoJobStore(),"default") @register_job(scheduler,
"interval", seconds=2) def test_job(): print("I'm a test job!")
register_events(scheduler) scheduler.start() print("Scheduler started!")
这个方法仅仅作为测试使用,很开心的发现,测试居然跑通了
2.3 数据采集表结构分析
下图为火币Pro的K线数据返回结果
"data": [ { "id": K线id, "amount": 成交量, "count": 成交笔数, "open": 开盘价, "close":
收盘价,当K线为最晚的一根时,是最新成交价"low": 最低价, "high": 最高价, "vol": 成交额, 即 sum(每一笔成交价 *
该笔的成交量) } ]
因此我们创建相应的model
models.py
import time # 存储当前实时价格 class KLineDataRealTime(models.Model): k_id = models.
CharField(max_length=20) amount = models.CharField(max_length=20) count =
models.CharField(max_length=20) open = models.CharField(max_length=20) close =
models.CharField(max_length=20) high = models.CharField(max_length=20) vol =
models.CharField(max_length=20) time = models.DateTimeField(default=time.time()
) # 存储历史所有价格class KLineData(models.Model): k_id = models.CharField(max_length
=20) amount = models.CharField(max_length=20) count = models.CharField(
max_length=20) open = models.CharField(max_length=20) close = models.CharField(
max_length=20) high = models.CharField(max_length=20) vol = models.CharField(
max_length=20) time = models.DateTimeField(default=time.time())
执行以下命令创建表
python manage.py makemigrations python manage.py migrate
数据库中生成了相应的表
2.4 火币Pro的REST API接入程序
导入火币REST API的Utils.py程序取名为HuoBiUtils.py(大家自行搜索接入)
将以下代码写入settings.py文件夹中方便统一进行管理
ACCESS_KEY = "" SECRET_KEY = ""
修改HuoBiUtils.py文件
将
ACCESS_KEY = "" SECRET_KEY = ""
修改为
import TradeSystem.settings as settings ACCESS_KEY = settings.ACCESS_KEY
SECRET_KEY = settings.SECRET_KEY
热门工具 换一换