hyperquant 0.1.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- hyperquant-0.1.1/.gitignore +41 -0
- hyperquant-0.1.1/.python-version +1 -0
- hyperquant-0.1.1/PKG-INFO +153 -0
- hyperquant-0.1.1/README.md +133 -0
- hyperquant-0.1.1/pub.sh +13 -0
- hyperquant-0.1.1/pyproject.toml +41 -0
- hyperquant-0.1.1/requirements-dev.lock +86 -0
- hyperquant-0.1.1/requirements.lock +38 -0
- hyperquant-0.1.1/src/hyperquant/__init__.py +5 -0
- hyperquant-0.1.1/src/hyperquant/core.py +455 -0
- hyperquant-0.1.1/src/hyperquant/draw.py +1199 -0
- hyperquant-0.1.1/src/hyperquant/logkit.py +190 -0
- hyperquant-0.1.1/test.py +1 -0
@@ -0,0 +1,41 @@
|
|
1
|
+
# Python
|
2
|
+
__pycache__/
|
3
|
+
*.py[cod]
|
4
|
+
*$py.class
|
5
|
+
*.so
|
6
|
+
.Python
|
7
|
+
build/
|
8
|
+
develop-eggs/
|
9
|
+
dist/
|
10
|
+
downloads/
|
11
|
+
eggs/
|
12
|
+
.eggs/
|
13
|
+
lib/
|
14
|
+
lib64/
|
15
|
+
parts/
|
16
|
+
sdist/
|
17
|
+
var/
|
18
|
+
wheels/
|
19
|
+
*.egg-info/
|
20
|
+
.installed.cfg
|
21
|
+
*.egg
|
22
|
+
|
23
|
+
# PyPI credentials
|
24
|
+
.pypirc
|
25
|
+
|
26
|
+
# Environment
|
27
|
+
.env
|
28
|
+
.venv
|
29
|
+
env/
|
30
|
+
venv/
|
31
|
+
ENV/
|
32
|
+
|
33
|
+
# IDE
|
34
|
+
.idea/
|
35
|
+
.vscode/
|
36
|
+
*.swp
|
37
|
+
*.swo
|
38
|
+
|
39
|
+
# OS
|
40
|
+
.DS_Store
|
41
|
+
Thumbs.db
|
@@ -0,0 +1 @@
|
|
1
|
+
3.12.3
|
@@ -0,0 +1,153 @@
|
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: hyperquant
|
3
|
+
Version: 0.1.1
|
4
|
+
Summary: A minimal yet hyper-efficient backtesting framework for quantitative trading
|
5
|
+
Project-URL: Homepage, https://github.com/yourusername/hyperquant
|
6
|
+
Project-URL: Issues, https://github.com/yourusername/hyperquant/issues
|
7
|
+
Author-email: MissinA <1421329142@qq.com>
|
8
|
+
License: MIT
|
9
|
+
Keywords: backtesting,hyperquant,quant,trading
|
10
|
+
Classifier: Development Status :: 3 - Alpha
|
11
|
+
Classifier: Intended Audience :: Developers
|
12
|
+
Classifier: License :: OSI Approved :: MIT License
|
13
|
+
Classifier: Programming Language :: Python :: 3
|
14
|
+
Classifier: Topic :: Office/Business :: Financial :: Investment
|
15
|
+
Requires-Python: >=3.8
|
16
|
+
Requires-Dist: colorama>=0.4.6
|
17
|
+
Requires-Dist: pandas>=2.2.3
|
18
|
+
Requires-Dist: pyecharts>=2.0.8
|
19
|
+
Description-Content-Type: text/markdown
|
20
|
+
|
21
|
+
# minquant
|
22
|
+
|
23
|
+
minquant is a minimalistic framework for quantitative trading strategies. It allows users to quickly validate their strategy ideas with ease and efficiency.
|
24
|
+
|
25
|
+
## Core APIs
|
26
|
+
|
27
|
+
### `core.py`
|
28
|
+
主要功能包括:
|
29
|
+
- `ExchangeBase` 和 `Exchange` 类:实现基础的交易功能
|
30
|
+
- 资产管理(初始资金、已实现/未实现盈亏等)
|
31
|
+
- 下单交易(买入、卖出、平仓等)
|
32
|
+
- 仓位管理和风控
|
33
|
+
- 账户状态更新和记录
|
34
|
+
- `gen_back_time` 函数:回测时间周期管理,支持训练和测试时间区间的生成
|
35
|
+
|
36
|
+
### `draw.py`
|
37
|
+
主要功能包括:
|
38
|
+
- 支持多种图表类型:K线、曲线、柱状图等
|
39
|
+
- 提供丰富的交互功能:
|
40
|
+
- 时间轴缩放和跳转
|
41
|
+
- 自动播放功能
|
42
|
+
- 多图表联动显示
|
43
|
+
- 指标叠加功能
|
44
|
+
- 提供详细的数据标注:
|
45
|
+
- 交易信号标记
|
46
|
+
- 数据显示和提示
|
47
|
+
- 自定义颜色和样式
|
48
|
+
|
49
|
+
### `logkit.py`
|
50
|
+
主要功能包括:
|
51
|
+
- 自定义日志级别和格式化:
|
52
|
+
- DEBUG: 调试信息
|
53
|
+
- INFO: 普通信息(蓝色)
|
54
|
+
- OK: 成功信息(绿色)
|
55
|
+
- WARNING: 警告信息(黄色)
|
56
|
+
- ERROR: 错误信息(红色)
|
57
|
+
- CRITICAL: 严重错误(深红色)
|
58
|
+
- 支持多种日志输出:
|
59
|
+
- 控制台彩色输出
|
60
|
+
- 文件日志记录
|
61
|
+
- 提供便捷的日志分割线和时间戳功能
|
62
|
+
- 支持异常信息的格式化输出
|
63
|
+
- 可配置时区和时间显示
|
64
|
+
|
65
|
+
## 使用方法
|
66
|
+
|
67
|
+
### 1. 初始化交易环境
|
68
|
+
```python
|
69
|
+
from core import Exchange
|
70
|
+
# 创建交易实例,设置初始资金和交易品种
|
71
|
+
exchange = Exchange(
|
72
|
+
trade_symbols=['BTCUSDT'], # 交易品种
|
73
|
+
initial_balance=10000, # 初始资金
|
74
|
+
fee=0.0002, # 手续费率
|
75
|
+
recorded=True # 是否记录交易历史
|
76
|
+
)
|
77
|
+
```
|
78
|
+
|
79
|
+
### 2. 执行交易操作
|
80
|
+
```python
|
81
|
+
# 买入操作
|
82
|
+
exchange.Buy('BTCUSDT', price=30000, amount=0.1, time='2024-01-01')
|
83
|
+
|
84
|
+
# 卖出操作
|
85
|
+
exchange.Sell('BTCUSDT', price=31000, amount=0.1, time='2024-01-02')
|
86
|
+
|
87
|
+
# 获取账户状态
|
88
|
+
print(exchange.stats)
|
89
|
+
```
|
90
|
+
|
91
|
+
### 3. 绘制分析图表
|
92
|
+
```python
|
93
|
+
from draw import draw
|
94
|
+
import pandas as pd
|
95
|
+
|
96
|
+
# 准备数据
|
97
|
+
data_df = pd.DataFrame({
|
98
|
+
'date': [...], # 时间列
|
99
|
+
'open': [...], # 开盘价
|
100
|
+
'close': [...], # 收盘价
|
101
|
+
'high': [...], # 最高价
|
102
|
+
'low': [...], # 最低价
|
103
|
+
'volume': [...] # 成交量
|
104
|
+
})
|
105
|
+
|
106
|
+
# 配置图表
|
107
|
+
data_dict = [
|
108
|
+
{
|
109
|
+
'series_name': 'K线图',
|
110
|
+
'draw_type': 'Kline',
|
111
|
+
'height': 60,
|
112
|
+
'col': ['open', 'close', 'low', 'high']
|
113
|
+
},
|
114
|
+
{
|
115
|
+
'series_name': '成交量',
|
116
|
+
'draw_type': 'Bar',
|
117
|
+
'height': 20,
|
118
|
+
'col': 'volume'
|
119
|
+
}
|
120
|
+
]
|
121
|
+
|
122
|
+
# 绘制图表
|
123
|
+
draw(
|
124
|
+
df=data_df,
|
125
|
+
data_dict=data_dict,
|
126
|
+
date_col='date',
|
127
|
+
title='BTC/USDT'
|
128
|
+
)
|
129
|
+
```
|
130
|
+
|
131
|
+
### 4. 日志记录
|
132
|
+
```python
|
133
|
+
from logkit import get_logger
|
134
|
+
|
135
|
+
# 创建日志实例
|
136
|
+
logger = get_logger(
|
137
|
+
name='strategy', # 日志名称
|
138
|
+
file_path='logs/strategy.log', # 日志文件路径
|
139
|
+
show_time=True, # 显示时间戳
|
140
|
+
use_color=True # 使用彩色输出
|
141
|
+
)
|
142
|
+
|
143
|
+
# 记录不同级别的日志
|
144
|
+
logger.debug("调试信息")
|
145
|
+
logger.info("普通信息")
|
146
|
+
logger.ok("成功信息")
|
147
|
+
logger.warning("警告信息")
|
148
|
+
logger.error("错误信息")
|
149
|
+
logger.critical("严重错误")
|
150
|
+
|
151
|
+
# 使用分割线
|
152
|
+
logger.divider("回测开始", sep='=', display_time=True)
|
153
|
+
```
|
@@ -0,0 +1,133 @@
|
|
1
|
+
# minquant
|
2
|
+
|
3
|
+
minquant is a minimalistic framework for quantitative trading strategies. It allows users to quickly validate their strategy ideas with ease and efficiency.
|
4
|
+
|
5
|
+
## Core APIs
|
6
|
+
|
7
|
+
### `core.py`
|
8
|
+
主要功能包括:
|
9
|
+
- `ExchangeBase` 和 `Exchange` 类:实现基础的交易功能
|
10
|
+
- 资产管理(初始资金、已实现/未实现盈亏等)
|
11
|
+
- 下单交易(买入、卖出、平仓等)
|
12
|
+
- 仓位管理和风控
|
13
|
+
- 账户状态更新和记录
|
14
|
+
- `gen_back_time` 函数:回测时间周期管理,支持训练和测试时间区间的生成
|
15
|
+
|
16
|
+
### `draw.py`
|
17
|
+
主要功能包括:
|
18
|
+
- 支持多种图表类型:K线、曲线、柱状图等
|
19
|
+
- 提供丰富的交互功能:
|
20
|
+
- 时间轴缩放和跳转
|
21
|
+
- 自动播放功能
|
22
|
+
- 多图表联动显示
|
23
|
+
- 指标叠加功能
|
24
|
+
- 提供详细的数据标注:
|
25
|
+
- 交易信号标记
|
26
|
+
- 数据显示和提示
|
27
|
+
- 自定义颜色和样式
|
28
|
+
|
29
|
+
### `logkit.py`
|
30
|
+
主要功能包括:
|
31
|
+
- 自定义日志级别和格式化:
|
32
|
+
- DEBUG: 调试信息
|
33
|
+
- INFO: 普通信息(蓝色)
|
34
|
+
- OK: 成功信息(绿色)
|
35
|
+
- WARNING: 警告信息(黄色)
|
36
|
+
- ERROR: 错误信息(红色)
|
37
|
+
- CRITICAL: 严重错误(深红色)
|
38
|
+
- 支持多种日志输出:
|
39
|
+
- 控制台彩色输出
|
40
|
+
- 文件日志记录
|
41
|
+
- 提供便捷的日志分割线和时间戳功能
|
42
|
+
- 支持异常信息的格式化输出
|
43
|
+
- 可配置时区和时间显示
|
44
|
+
|
45
|
+
## 使用方法
|
46
|
+
|
47
|
+
### 1. 初始化交易环境
|
48
|
+
```python
|
49
|
+
from core import Exchange
|
50
|
+
# 创建交易实例,设置初始资金和交易品种
|
51
|
+
exchange = Exchange(
|
52
|
+
trade_symbols=['BTCUSDT'], # 交易品种
|
53
|
+
initial_balance=10000, # 初始资金
|
54
|
+
fee=0.0002, # 手续费率
|
55
|
+
recorded=True # 是否记录交易历史
|
56
|
+
)
|
57
|
+
```
|
58
|
+
|
59
|
+
### 2. 执行交易操作
|
60
|
+
```python
|
61
|
+
# 买入操作
|
62
|
+
exchange.Buy('BTCUSDT', price=30000, amount=0.1, time='2024-01-01')
|
63
|
+
|
64
|
+
# 卖出操作
|
65
|
+
exchange.Sell('BTCUSDT', price=31000, amount=0.1, time='2024-01-02')
|
66
|
+
|
67
|
+
# 获取账户状态
|
68
|
+
print(exchange.stats)
|
69
|
+
```
|
70
|
+
|
71
|
+
### 3. 绘制分析图表
|
72
|
+
```python
|
73
|
+
from draw import draw
|
74
|
+
import pandas as pd
|
75
|
+
|
76
|
+
# 准备数据
|
77
|
+
data_df = pd.DataFrame({
|
78
|
+
'date': [...], # 时间列
|
79
|
+
'open': [...], # 开盘价
|
80
|
+
'close': [...], # 收盘价
|
81
|
+
'high': [...], # 最高价
|
82
|
+
'low': [...], # 最低价
|
83
|
+
'volume': [...] # 成交量
|
84
|
+
})
|
85
|
+
|
86
|
+
# 配置图表
|
87
|
+
data_dict = [
|
88
|
+
{
|
89
|
+
'series_name': 'K线图',
|
90
|
+
'draw_type': 'Kline',
|
91
|
+
'height': 60,
|
92
|
+
'col': ['open', 'close', 'low', 'high']
|
93
|
+
},
|
94
|
+
{
|
95
|
+
'series_name': '成交量',
|
96
|
+
'draw_type': 'Bar',
|
97
|
+
'height': 20,
|
98
|
+
'col': 'volume'
|
99
|
+
}
|
100
|
+
]
|
101
|
+
|
102
|
+
# 绘制图表
|
103
|
+
draw(
|
104
|
+
df=data_df,
|
105
|
+
data_dict=data_dict,
|
106
|
+
date_col='date',
|
107
|
+
title='BTC/USDT'
|
108
|
+
)
|
109
|
+
```
|
110
|
+
|
111
|
+
### 4. 日志记录
|
112
|
+
```python
|
113
|
+
from logkit import get_logger
|
114
|
+
|
115
|
+
# 创建日志实例
|
116
|
+
logger = get_logger(
|
117
|
+
name='strategy', # 日志名称
|
118
|
+
file_path='logs/strategy.log', # 日志文件路径
|
119
|
+
show_time=True, # 显示时间戳
|
120
|
+
use_color=True # 使用彩色输出
|
121
|
+
)
|
122
|
+
|
123
|
+
# 记录不同级别的日志
|
124
|
+
logger.debug("调试信息")
|
125
|
+
logger.info("普通信息")
|
126
|
+
logger.ok("成功信息")
|
127
|
+
logger.warning("警告信息")
|
128
|
+
logger.error("错误信息")
|
129
|
+
logger.critical("严重错误")
|
130
|
+
|
131
|
+
# 使用分割线
|
132
|
+
logger.divider("回测开始", sep='=', display_time=True)
|
133
|
+
```
|
hyperquant-0.1.1/pub.sh
ADDED
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
echo "清理旧的构建文件..."
|
3
|
+
rm -rf dist/* build/*
|
4
|
+
|
5
|
+
echo "重新构建包..."
|
6
|
+
rye build
|
7
|
+
|
8
|
+
echo "发布到 PyPI..."
|
9
|
+
# 从 .pypirc 文件读取 token
|
10
|
+
TOKEN=$(grep "password" .pypirc | cut -d "=" -f2 | tr -d ' ')
|
11
|
+
|
12
|
+
# 使用 token 发布
|
13
|
+
TWINE_USERNAME=__token__ TWINE_PASSWORD=$TOKEN rye run twine upload dist/*
|
@@ -0,0 +1,41 @@
|
|
1
|
+
[project]
|
2
|
+
name = "hyperquant"
|
3
|
+
version = "0.1.1"
|
4
|
+
description = "A minimal yet hyper-efficient backtesting framework for quantitative trading"
|
5
|
+
authors = [
|
6
|
+
{ name = "MissinA", email = "1421329142@qq.com" }
|
7
|
+
]
|
8
|
+
dependencies = [
|
9
|
+
"pyecharts>=2.0.8",
|
10
|
+
"pandas>=2.2.3",
|
11
|
+
"colorama>=0.4.6",
|
12
|
+
]
|
13
|
+
readme = "README.md"
|
14
|
+
requires-python = ">= 3.8"
|
15
|
+
keywords = ["quant", "backtesting", "trading", "hyperquant"]
|
16
|
+
license = {text = "MIT"}
|
17
|
+
classifiers = [
|
18
|
+
"Development Status :: 3 - Alpha",
|
19
|
+
"Intended Audience :: Developers",
|
20
|
+
"Topic :: Office/Business :: Financial :: Investment",
|
21
|
+
"Programming Language :: Python :: 3",
|
22
|
+
"License :: OSI Approved :: MIT License",
|
23
|
+
]
|
24
|
+
|
25
|
+
[project.urls]
|
26
|
+
Homepage = "https://github.com/yourusername/hyperquant"
|
27
|
+
Issues = "https://github.com/yourusername/hyperquant/issues"
|
28
|
+
|
29
|
+
[build-system]
|
30
|
+
requires = ["hatchling"]
|
31
|
+
build-backend = "hatchling.build"
|
32
|
+
|
33
|
+
[tool.rye]
|
34
|
+
managed = true
|
35
|
+
dev-dependencies = ["twine>=6.1.0"]
|
36
|
+
|
37
|
+
[tool.hatch.metadata]
|
38
|
+
allow-direct-references = true
|
39
|
+
|
40
|
+
[tool.hatch.build.targets.wheel]
|
41
|
+
packages = ["src/hyperquant"]
|
@@ -0,0 +1,86 @@
|
|
1
|
+
# generated by rye
|
2
|
+
# use `rye lock` or `rye sync` to update this lockfile
|
3
|
+
#
|
4
|
+
# last locked with the following flags:
|
5
|
+
# pre: false
|
6
|
+
# features: []
|
7
|
+
# all-features: false
|
8
|
+
# with-sources: false
|
9
|
+
# generate-hashes: false
|
10
|
+
# universal: false
|
11
|
+
|
12
|
+
-e file:.
|
13
|
+
certifi==2025.1.31
|
14
|
+
# via requests
|
15
|
+
charset-normalizer==3.4.1
|
16
|
+
# via requests
|
17
|
+
colorama==0.4.6
|
18
|
+
# via minbacktest
|
19
|
+
docutils==0.21.2
|
20
|
+
# via readme-renderer
|
21
|
+
id==1.5.0
|
22
|
+
# via twine
|
23
|
+
idna==3.10
|
24
|
+
# via requests
|
25
|
+
jaraco-classes==3.4.0
|
26
|
+
# via keyring
|
27
|
+
jaraco-context==6.0.1
|
28
|
+
# via keyring
|
29
|
+
jaraco-functools==4.1.0
|
30
|
+
# via keyring
|
31
|
+
jinja2==3.1.6
|
32
|
+
# via pyecharts
|
33
|
+
keyring==25.6.0
|
34
|
+
# via twine
|
35
|
+
markdown-it-py==3.0.0
|
36
|
+
# via rich
|
37
|
+
markupsafe==3.0.2
|
38
|
+
# via jinja2
|
39
|
+
mdurl==0.1.2
|
40
|
+
# via markdown-it-py
|
41
|
+
more-itertools==10.6.0
|
42
|
+
# via jaraco-classes
|
43
|
+
# via jaraco-functools
|
44
|
+
nh3==0.2.21
|
45
|
+
# via readme-renderer
|
46
|
+
numpy==2.2.4
|
47
|
+
# via pandas
|
48
|
+
packaging==24.2
|
49
|
+
# via twine
|
50
|
+
pandas==2.2.3
|
51
|
+
# via minbacktest
|
52
|
+
prettytable==3.15.1
|
53
|
+
# via pyecharts
|
54
|
+
pyecharts==2.0.8
|
55
|
+
# via minbacktest
|
56
|
+
pygments==2.19.1
|
57
|
+
# via readme-renderer
|
58
|
+
# via rich
|
59
|
+
python-dateutil==2.9.0.post0
|
60
|
+
# via pandas
|
61
|
+
pytz==2025.1
|
62
|
+
# via pandas
|
63
|
+
readme-renderer==44.0
|
64
|
+
# via twine
|
65
|
+
requests==2.32.3
|
66
|
+
# via id
|
67
|
+
# via requests-toolbelt
|
68
|
+
# via twine
|
69
|
+
requests-toolbelt==1.0.0
|
70
|
+
# via twine
|
71
|
+
rfc3986==2.0.0
|
72
|
+
# via twine
|
73
|
+
rich==13.9.4
|
74
|
+
# via twine
|
75
|
+
simplejson==3.20.1
|
76
|
+
# via pyecharts
|
77
|
+
six==1.17.0
|
78
|
+
# via python-dateutil
|
79
|
+
twine==6.1.0
|
80
|
+
tzdata==2025.1
|
81
|
+
# via pandas
|
82
|
+
urllib3==2.3.0
|
83
|
+
# via requests
|
84
|
+
# via twine
|
85
|
+
wcwidth==0.2.13
|
86
|
+
# via prettytable
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# generated by rye
|
2
|
+
# use `rye lock` or `rye sync` to update this lockfile
|
3
|
+
#
|
4
|
+
# last locked with the following flags:
|
5
|
+
# pre: false
|
6
|
+
# features: []
|
7
|
+
# all-features: false
|
8
|
+
# with-sources: false
|
9
|
+
# generate-hashes: false
|
10
|
+
# universal: false
|
11
|
+
|
12
|
+
-e file:.
|
13
|
+
colorama==0.4.6
|
14
|
+
# via minbacktest
|
15
|
+
jinja2==3.1.6
|
16
|
+
# via pyecharts
|
17
|
+
markupsafe==3.0.2
|
18
|
+
# via jinja2
|
19
|
+
numpy==2.2.4
|
20
|
+
# via pandas
|
21
|
+
pandas==2.2.3
|
22
|
+
# via minbacktest
|
23
|
+
prettytable==3.15.1
|
24
|
+
# via pyecharts
|
25
|
+
pyecharts==2.0.8
|
26
|
+
# via minbacktest
|
27
|
+
python-dateutil==2.9.0.post0
|
28
|
+
# via pandas
|
29
|
+
pytz==2025.1
|
30
|
+
# via pandas
|
31
|
+
simplejson==3.20.1
|
32
|
+
# via pyecharts
|
33
|
+
six==1.17.0
|
34
|
+
# via python-dateutil
|
35
|
+
tzdata==2025.1
|
36
|
+
# via pandas
|
37
|
+
wcwidth==0.2.13
|
38
|
+
# via prettytable
|