1. 程式人生 > >基於數字貨幣的量化交易平臺搭建——數字採集部分——DAY1

基於數字貨幣的量化交易平臺搭建——數字採集部分——DAY1

1. 寫在前面

特此申明:在2017年9月4日國家命令禁止加密貨幣的交易,該程式僅用於研究,不構成任何買賣建議或輔助加密貨幣交易,請大家正視交易加密貨幣所帶來的風險(不要老是想著梭哈,贏了會所嫩模,天台站不下那麼多人,再這麼下去天台要排號跳樓了),請大家合法合規進行理財投資,遵守國家法律法規。

最近工作一直比較忙,很久以前打算開始搭的量化交易平臺今天才開始動工,希望我能在最短時間內搭建完成。另外本人工作也非專業系統開始,末流程式設計師,對Django和Python僅處於初學,請大神勿噴,平臺僅用於個人娛樂,有興趣的同學可以私信我一起開發。

我們計劃程式分為三個部分,第一部分為資料採集,第二部分為回測平臺,第三部分為實盤交易平臺。

系統版本:
python 3.6.4
Django 2.05

用最新的Django版本,我其實內心也很慌,可能會踩很多坑,就這樣吧,初生牛犢不怕虎。

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.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!")

這個方法僅僅作為測試使用,很開心的發現,測試居然跑通了

這裡寫圖片描述

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