特此申明:在2017年9月4日国家命令禁止加密货币的交易,该程序仅用于研究,不构成任何买卖建议或辅助加密货币交易,请大家正视交易加密货币所带来的风险(不要老是想着梭哈,赢了会所嫩模,天台站不下那么多人,再这么下去天台要排号跳楼了),请大家合法合规进行理财投资,遵守国家法律法规。
最近工作一直比较忙,很久以前打算开始搭的量化交易平台今天才开始动工,希望我能在最短时间内搭建完成。另外本人工作也非专业系统开始,末流程序员,对Django和Python仅处于初学,请大神勿喷,平台仅用于个人娱乐,有兴趣的同学可以私信我一起开发。
我们计划程序分为三个部分,第一部分为数据采集,第二部分为回测平台,第三部分为实盘交易平台。
系统版本:
python 3.6.4
Django 2.05
用最新的Django版本,我其实内心也很慌,可能会踩很多坑,就这样吧,初生牛犊不怕虎。
源码地址:https://github.com/zhangpei529/TradeSystem
由于以前并没有使用django做相应的任务调度,仅常用crontab进行任务调度。百度很多,django_apscheduler对数据采集程序进行调度。
前期数据采集主要是基于火币Pro,后期可能会接入币安等平台数据。(嗯嗯,那啥,火币麻烦看到结下广告费)
pip install apscheduler
pip install django_apscheduler
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.jobstores import 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!")
这个方法仅仅作为测试使用,很开心的发现,测试居然跑通了
下图为火币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
导入火币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