Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

回测界面的日期加入保存到json #11

Open
wants to merge 18 commits into
base: vnpy2
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
7 changes: 6 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -30,4 +30,9 @@ dist
# Documents
_build
_static
_templates
_templates

bar_data/
st/
tick_data/
renko_data/
11 changes: 2 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,3 @@
<p align="center">
<img src ="https://github.com/msincenselee/vnpy/blob/vnpy2/huafu_on_premise.jpg"/>
<img src ="https://gitee.com/vnpy2/vnpy/blob/vnpy2/huafu_on_premise.jpg"/>
</p>


# “当你想放弃时,想想你为什么开始。埃隆·马斯克”

github 链接: https://github.com/msincenselee/vnpy
Expand Down Expand Up @@ -137,10 +131,9 @@ gitee 链接: https://gitee.com/vnpy2/vnpy



大佳
QQ/Wechat:28888502
Kim

2020最新套利课程:http://www.uquant.org/course/43
QQ:27133

--------------------------------------------------------------------------------------------
# 原版 vn.py - 基于python的开源交易平台开发框架
Expand Down
31 changes: 31 additions & 0 deletions prod/jobs/compress_binance_future.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import sys, os, copy, csv, signal, bz2, pickle
from datetime import datetime
import pandas as pd

vnpy_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
if vnpy_root not in sys.path:
sys.path.append(vnpy_root)

if __name__ == "__main__":
tick_path = os.path.join(vnpy_root, "tick_data", "binance")
today = datetime.now().strftime('%Y%m%d')
for path,dir_list,file_list in os.walk(tick_path):
if today not in path:
dir_day = path.split(os.sep)[-1]
for file_name in file_list:
if "csv" in file_name:
new_file_name = file_name.replace("_" + dir_day, "")
new_file_name = new_file_name.replace("csv", "pkb2")
old_file = os.path.join(path, file_name)
tick_df = pd.read_csv(old_file)
tick_df.set_index('datetime', inplace=True)
tick_df.to_csv(os.path.join(path, file_name), compression="bz2")
os.unlink(old_file)
# if "pkb2" in file_name:
# with bz2.BZ2File(os.path.join(path, file_name), "rb") as f:
# print(os.path.join(path, file_name))
# data = pickle.load(f)
# tick_df = pd.DataFrame(data)
# tick_df.set_index('datetime', inplace=True)
# tick_df.to_csv(os.path.join(path, file_name), compression="bz2")
print("压缩完成")
67 changes: 67 additions & 0 deletions prod/jobs/refill_tdx_future_ticks.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# flake8: noqa
"""
下载通达信指数合约tick => vnpy项目目录/tick_data/tdx/
"""
import os
import sys
import json
import csv
from collections import OrderedDict
import pandas as pd
from datetime import datetime, timedelta, time
from time import sleep

vnpy_root = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..'))
if vnpy_root not in sys.path:
sys.path.append(vnpy_root)

os.environ["VNPY_TESTING"] = "1"

from vnpy.data.tdx.tdx_future_data import *
from vnpy.trader.utility import get_csv_last_dt

if __name__ == "__main__":

if len(sys.argv) > 1:
filter_underlying_symbols = [s.upper() for s in sys.argv[1:]]
else:
filter_underlying_symbols = []

# 保存的1分钟指数 bar目录
tick_data_folder = os.path.abspath(os.path.join(vnpy_root, 'tick_data', "tdx"))

# 开始日期(每年大概需要几分钟)
start_date = '20160101'

# 创建API对象
api_01 = TdxFutureData()

# 更新本地合约缓存信息
api_01.update_mi_contracts()

# 逐一指数合约下载并更新
for underlying_symbol in api_01.future_contracts.keys():
if len(filter_underlying_symbols) > 0 and underlying_symbol not in filter_underlying_symbols:
continue

index_symbol = underlying_symbol + '99'
print(f'开始更新:{index_symbol}')
start_dt = datetime.strptime(start_date, '%Y%m%d')
end_date = datetime.combine(datetime.now() + timedelta(days=1), time(16, 0))
print(start_dt, end_date)
i = 0
while start_dt < end_date:
api_01.get_history_transaction_data(index_symbol, start_dt, tick_data_folder)
start_dt = start_dt + timedelta(days=1)
if start_dt.weekday() == 5:
start_dt = start_dt + timedelta(days=1)
if start_dt.weekday() == 6:
start_dt = start_dt + timedelta(days=1)

i += 1
if i > 22:
i = 0
# sleep(30)
print(start_dt)
print('更新完毕')
os._exit(0)
2 changes: 2 additions & 0 deletions prod/jobs/refill_tdx_stock_bars.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
下载通达信股票合约1分钟bar => vnpy项目目录/bar_data/
上海股票 => SSE子目录
深圳股票 => SZSE子目录

stock_list.json 需要下载的股票数据写于这里
"""
import os
import sys
Expand Down
46 changes: 12 additions & 34 deletions prod/linux/tick_record/run.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*
import os
import sys
import multiprocessing
Expand All @@ -7,15 +8,16 @@


# 将repostory的目录i,作为根目录,添加到系统环境中。
ROOT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..'))
sys.path.append(ROOT_PATH)
print(f'append {ROOT_PATH} into sys.path')
VNPY_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..', '..'))
if VNPY_ROOT not in sys.path:
sys.path.append(VNPY_ROOT)
print(f'append {VNPY_ROOT} into sys.path')

from vnpy.event import EventEngine
from vnpy.trader.setting import SETTINGS
from vnpy.trader.engine import MainEngine
from vnpy.trader.utility import load_json
from vnpy.gateway.ctp import CtpGateway
from vnpy.gateway.binancef import BinancefGateway
from vnpy.app.tick_recorder import TickRecorderApp
from vnpy.app.cta_strategy.base import EVENT_CTA_LOG

Expand All @@ -25,7 +27,7 @@
SETTINGS["log.console"] = True


ctp_setting = load_json('connect_ctp.json')
binance_setting = load_json('connect_binancef.json')


def run_child():
Expand All @@ -36,16 +38,16 @@ def run_child():

event_engine = EventEngine()
main_engine = MainEngine(event_engine)
main_engine.add_gateway(CtpGateway)
main_engine.add_gateway(BinancefGateway)
main_engine.add_app(TickRecorderApp)
main_engine.write_log("主引擎创建成功")

log_engine = main_engine.get_engine("log")
event_engine.register(EVENT_CTA_LOG, log_engine.process_log_event)
main_engine.write_log("注册日志事件监听")

main_engine.connect(ctp_setting, "CTP")
main_engine.write_log("连接CTP接口")
main_engine.connect(binance_setting, "BINANCEF")
main_engine.write_log("连接币安接口")

sleep(10)

Expand All @@ -57,28 +59,12 @@ def run_parent():
"""
Running in the parent process.
"""
print("启动CTA策略守护父进程")

# Chinese futures market trading period (day/night)
DAY_START = time(8, 45)
DAY_END = time(15, 30)

NIGHT_START = time(20, 45)
NIGHT_END = time(2, 45)
print("启动行情记录守护父进程")

child_process = None

while True:
current_time = datetime.now().time()
trading = False

# Check whether in trading period
if (
(current_time >= DAY_START and current_time <= DAY_END)
or (current_time >= NIGHT_START)
or (current_time <= NIGHT_END)
):
trading = True
trading = True

# Start child process in trading period
if trading and child_process is None:
Expand All @@ -87,14 +73,6 @@ def run_parent():
child_process.start()
print("子进程启动成功")

# 非记录时间则退出子进程
if not trading and child_process is not None:
print("关闭子进程")
child_process.terminate()
child_process.join()
child_process = None
print("子进程关闭成功")

sleep(5)


Expand Down
5 changes: 5 additions & 0 deletions vnpy/app/cta_backtester/ui/widget.py
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,9 @@ def init_ui(self):
self.size_line.setText(str(setting["size"]))
self.pricetick_line.setText(str(setting["pricetick"]))
self.capital_line.setText(str(setting["capital"]))
if setting['start']:
self.start_date_edit.setDate(datetime.strptime(setting['start'], "%Y-%m-%d"))
self.end_date_edit.setDate(datetime.strptime(setting['end'], "%Y-%m-%d"))

if not setting["inverse"]:
self.inverse_combo.setCurrentIndex(0)
Expand Down Expand Up @@ -319,6 +322,8 @@ def start_backtesting(self):
"pricetick": pricetick,
"capital": capital,
"inverse": inverse,
"start": start.strftime("%Y-%m-%d"),
"end": end.strftime("%Y-%m-%d"),
}
save_json(self.setting_filename, backtesting_setting)

Expand Down