-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request vnpy#630 from vnpy/beta
Beta
- Loading branch information
Showing
210 changed files
with
49,746 additions
and
3,825 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
88 changes: 73 additions & 15 deletions
88
examples/CtaBacktesting/.ipynb_checkpoints/backtesting_portfolio-checkpoint.ipynb
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
## 富途证券历史数据服务 | ||
|
||
本数据服务主要用于获取港股、美股的日内行情数据(1分钟线)更新,默认设置为每日5点自动运行。 | ||
|
||
使用前请参考futuquant的[使用文档](https://futunnopen.github.io/futuquant/setup/Hist_KLine_Download_Intro.html),配置富途牛牛客户端的历史数据自动更新功能。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
{ | ||
"MONGO_HOST": "localhost", | ||
"MONGO_PORT": 27017, | ||
|
||
"SYMBOLS": ["HK.00001", "HK.00002"] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,94 @@ | ||
# encoding: UTF-8 | ||
|
||
import sys | ||
import json | ||
from datetime import datetime, timedelta | ||
from time import time, sleep | ||
|
||
from pymongo import MongoClient, ASCENDING | ||
|
||
from vnpy.trader.vtObject import VtBarData | ||
from vnpy.trader.app.ctaStrategy.ctaBase import MINUTE_DB_NAME | ||
|
||
import futuquant as ft | ||
|
||
# 加载配置 | ||
config = open('config.json') | ||
setting = json.load(config) | ||
|
||
MONGO_HOST = setting['MONGO_HOST'] | ||
MONGO_PORT = setting['MONGO_PORT'] | ||
SYMBOLS = setting['SYMBOLS'] | ||
|
||
mc = MongoClient(MONGO_HOST, MONGO_PORT) # Mongo连接 | ||
db = mc[MINUTE_DB_NAME] # 数据库 | ||
quote = ft.OpenQuoteContext() # 富途行情接口 | ||
today = datetime.now().date() | ||
startDate = (today - timedelta(10)).strftime('%Y-%m-%d') # 数据下载起始日期 | ||
|
||
|
||
#---------------------------------------------------------------------- | ||
def generateVtBar(row): | ||
"""生成K线""" | ||
bar = VtBarData() | ||
|
||
bar.symbol = row['code'] | ||
bar.exchange = '' | ||
bar.vtSymbol = bar.symbol | ||
bar.open = row['open'] | ||
bar.high = row['high'] | ||
bar.low = row['low'] | ||
bar.close = row['close'] | ||
bar.volume = row['volume'] | ||
bar.datetime = datetime.strptime(row['time_key'], '%Y-%m-%d %H:%M:%S') | ||
bar.date = bar.datetime.strftime("%Y%m%d") | ||
bar.time = bar.datetime.strftime("%H:%M:%S") | ||
|
||
return bar | ||
|
||
#---------------------------------------------------------------------- | ||
def downMinuteBarBySymbol(symbol): | ||
"""下载某一合约的分钟线数据""" | ||
start = time() | ||
|
||
cl = db[symbol] | ||
cl.ensure_index([('datetime', ASCENDING)], unique=True) # 添加索引 | ||
|
||
code, data = quote.get_history_kline(symbol, start=startDate, ktype='K_1M') | ||
if code: | ||
print u'合约%s数据下载失败:%s' %(symbol, data) | ||
return | ||
|
||
data = data.sort_index() | ||
|
||
for ix, row in data.iterrows(): | ||
bar = generateVtBar(row) | ||
d = bar.__dict__ | ||
flt = {'datetime': bar.datetime} | ||
cl.replace_one(flt, d, True) | ||
|
||
end = time() | ||
cost = (end - start) * 1000 | ||
|
||
print u'合约%s数据下载完成%s - %s,耗时%s毫秒' %(symbol, data.iloc[0]['time_key'], | ||
data.iloc[-1]['time_key'], cost) | ||
|
||
|
||
#---------------------------------------------------------------------- | ||
def downloadAllMinuteBar(): | ||
"""下载所有配置中的合约的分钟线数据""" | ||
print '-' * 50 | ||
print u'开始下载合约分钟线数据' | ||
print '-' * 50 | ||
|
||
# 添加下载任务 | ||
for symbol in SYMBOLS: | ||
downMinuteBarBySymbol(str(symbol)) | ||
|
||
print '-' * 50 | ||
print u'合约分钟线数据下载完成' | ||
print '-' * 50 | ||
|
||
|
||
|
||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
# encoding: UTF-8 | ||
|
||
""" | ||
立即下载数据到数据库中,用于手动执行更新操作。 | ||
""" | ||
|
||
from dataService import * | ||
|
||
|
||
if __name__ == '__main__': | ||
downloadAllMinuteBar() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
# encoding: UTF-8 | ||
|
||
""" | ||
定时服务,可无人值守运行,实现每日自动下载更新历史行情数据到数据库中。 | ||
""" | ||
|
||
import time | ||
import datetime | ||
|
||
from dataService import downloadAllMinuteBar | ||
|
||
|
||
if __name__ == '__main__': | ||
taskCompletedDate = None | ||
|
||
# 注意这里的任务时间,必须在富途牛牛更新完当日本地数据后 | ||
taskTime = datetime.time(hour=17, minute=0) | ||
|
||
# 进入主循环 | ||
while True: | ||
t = datetime.datetime.now() | ||
|
||
# 每天到达任务下载时间后,执行数据下载的操作 | ||
if t.time() > taskTime and (taskCompletedDate is None or t.date() != taskCompletedDate): | ||
downloadAllMinuteBar() | ||
|
||
# 更新任务完成的日期 | ||
taskCompletedDate = t.date() | ||
else: | ||
print u'当前时间%s,任务定时%s' %(t, taskTime) | ||
|
||
time.sleep(60) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
{ | ||
"brokerID": "2001", | ||
"mdAddress": "tcp://125.64.36.26:51213", | ||
"tdAddress": "tcp://125.64.36.26:51205", | ||
"userID": "请联系经纪商申请", | ||
"password": "请联系经纪商申请" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
{ | ||
"brokerID": "2001", | ||
"mdAddress": "tcp://125.64.36.26:51213", | ||
"tdAddress": "tcp://125.64.36.26:51205", | ||
"userID": "请联系经纪商申请", | ||
"password": "请联系经纪商申请" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
{ | ||
"orderFlowClear": 1, | ||
"orderCancelLimit": 10, | ||
"marginRatioLimit": 0.85, | ||
"workingOrderLimit": 20, | ||
"tradeLimit": 1000, | ||
"orderSizeLimit": 100, | ||
"active": false, | ||
"orderFlowLimit": 50 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
{ | ||
"accountID": "110100001088", | ||
"password": "123456", | ||
"mdAddress": "tcp://203.86.95.187:10915", | ||
"tdAddress": "tcp://203.86.95.187:10910" | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
{ | ||
"fontFamily": "微软雅黑", | ||
"fontSize": 12, | ||
|
||
"mongoHost": "localhost", | ||
"mongoPort": 27017, | ||
"mongoLogging": true, | ||
|
||
"darkStyle": true, | ||
"language": "chinese", | ||
|
||
"logActive": true, | ||
"logLevel": "debug", | ||
"logConsole": true, | ||
"logFile": true, | ||
|
||
"tdPenalty": ["IF", "IH", "IC"] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
# encoding: UTF-8 | ||
|
||
from vnpy.trader import vtConstant | ||
from vnpy.trader.gateway.ctpGateway import CtpGateway | ||
|
||
gatewayClass = CtpGateway | ||
gatewayName = 'CTPSEC' | ||
gatewayDisplayName = 'CTP证券' | ||
gatewayType = vtConstant.GATEWAYTYPE_FUTURES | ||
gatewayQryEnabled = True |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,57 @@ | ||
# encoding: UTF-8 | ||
|
||
# 重载sys模块,设置默认字符串编码方式为utf8 | ||
import sys | ||
reload(sys) | ||
sys.setdefaultencoding('utf8') | ||
|
||
# 判断操作系统 | ||
import platform | ||
system = platform.system() | ||
|
||
# vn.trader模块 | ||
from vnpy.event import EventEngine | ||
from vnpy.trader.vtEngine import MainEngine | ||
from vnpy.trader.uiQt import createQApp | ||
from vnpy.trader.uiMainWindow import MainWindow | ||
|
||
# 加载底层接口 | ||
from vnpy.trader.gateway import (secGateway, ctpGateway) | ||
|
||
import ctpsecGateway | ||
|
||
# 加载上层应用 | ||
from vnpy.trader.app import (riskManager, optionMaster) | ||
|
||
|
||
#---------------------------------------------------------------------- | ||
def main(): | ||
"""主程序入口""" | ||
# 创建Qt应用对象 | ||
qApp = createQApp() | ||
|
||
# 创建事件引擎 | ||
ee = EventEngine() | ||
|
||
# 创建主引擎 | ||
me = MainEngine(ee) | ||
|
||
# 添加交易接口 | ||
me.addGateway(secGateway) | ||
me.addGateway(ctpGateway) | ||
me.addGateway(ctpsecGateway) | ||
|
||
# 添加上层应用 | ||
me.addApp(riskManager) | ||
me.addApp(optionMaster) | ||
|
||
# 创建主窗口 | ||
mw = MainWindow(me, ee) | ||
mw.showMaximized() | ||
|
||
# 在主线程中启动Qt事件循环 | ||
sys.exit(qApp.exec_()) | ||
|
||
|
||
if __name__ == '__main__': | ||
main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
# quantOS历史行情服务 | ||
|
||
请在[www.quantos.org](www.quantos.org)注册后,将用户名和TOKEN输入到配置文件config.json中,即可使用该服务。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
{ | ||
"MONGO_HOST": "localhost", | ||
"MONGO_PORT": 27017, | ||
|
||
"DATA_SERVER": "tcp://data.tushare.org:8910", | ||
"USERNAME": "", | ||
"TOKEN": "", | ||
|
||
"SYMBOLS": ["510050.SSE", "510300.SSE"] | ||
} |
Oops, something went wrong.