Name | hyperquant JSON |
Version |
0.51
JSON |
| download |
home_page | None |
Summary | A minimal yet hyper-efficient backtesting framework for quantitative trading |
upload_time | 2025-09-07 20:22:40 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.9 |
license | MIT |
keywords |
backtesting
hyperquant
quant
trading
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# minquant
minquant is a minimalistic framework for quantitative trading strategies. It allows users to quickly validate their strategy ideas with ease and efficiency.
## Core APIs
### `core.py`
主要功能包括:
- `ExchangeBase` 和 `Exchange` 类:实现基础的交易功能
- 资产管理(初始资金、已实现/未实现盈亏等)
- 下单交易(买入、卖出、平仓等)
- 仓位管理和风控
- 账户状态更新和记录
- `gen_back_time` 函数:回测时间周期管理,支持训练和测试时间区间的生成
### `draw.py`
主要功能包括:
- 支持多种图表类型:K线、曲线、柱状图等
- 提供丰富的交互功能:
- 时间轴缩放和跳转
- 自动播放功能
- 多图表联动显示
- 指标叠加功能
- 提供详细的数据标注:
- 交易信号标记
- 数据显示和提示
- 自定义颜色和样式
### `logkit.py`
主要功能包括:
- 自定义日志级别和格式化:
- DEBUG: 调试信息
- INFO: 普通信息(蓝色)
- OK: 成功信息(绿色)
- WARNING: 警告信息(黄色)
- ERROR: 错误信息(红色)
- CRITICAL: 严重错误(深红色)
- 支持多种日志输出:
- 控制台彩色输出
- 文件日志记录
- 提供便捷的日志分割线和时间戳功能
- 支持异常信息的格式化输出
- 可配置时区和时间显示
## 使用方法
### 1. 初始化交易环境
```python
from core import Exchange
# 创建交易实例,设置初始资金和交易品种
exchange = Exchange(
trade_symbols=['BTCUSDT'], # 交易品种
initial_balance=10000, # 初始资金
fee=0.0002, # 手续费率
recorded=True # 是否记录交易历史
)
```
### 2. 执行交易操作
```python
# 买入操作
exchange.Buy('BTCUSDT', price=30000, amount=0.1, time='2024-01-01')
# 卖出操作
exchange.Sell('BTCUSDT', price=31000, amount=0.1, time='2024-01-02')
# 获取账户状态
print(exchange.stats)
```
### 3. 绘制分析图表
```python
from draw import draw
import pandas as pd
# 准备数据
data_df = pd.DataFrame({
'date': [...], # 时间列
'open': [...], # 开盘价
'close': [...], # 收盘价
'high': [...], # 最高价
'low': [...], # 最低价
'volume': [...] # 成交量
})
# 配置图表
data_dict = [
{
'series_name': 'K线图',
'draw_type': 'Kline',
'height': 60,
'col': ['open', 'close', 'low', 'high']
},
{
'series_name': '成交量',
'draw_type': 'Bar',
'height': 20,
'col': 'volume'
}
]
# 绘制图表
draw(
df=data_df,
data_dict=data_dict,
date_col='date',
title='BTC/USDT'
)
```
### 4. 日志记录
```python
from logkit import get_logger
# 创建日志实例
logger = get_logger(
name='strategy', # 日志名称
file_path='logs/strategy.log', # 日志文件路径
show_time=True, # 显示时间戳
use_color=True # 使用彩色输出
)
# 记录不同级别的日志
logger.debug("调试信息")
logger.info("普通信息")
logger.ok("成功信息")
logger.warning("警告信息")
logger.error("错误信息")
logger.critical("严重错误")
# 使用分割线
logger.divider("回测开始", sep='=', display_time=True)
```
Raw data
{
"_id": null,
"home_page": null,
"name": "hyperquant",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.9",
"maintainer_email": null,
"keywords": "backtesting, hyperquant, quant, trading",
"author": null,
"author_email": "MissinA <1421329142@qq.com>",
"download_url": "https://files.pythonhosted.org/packages/f0/be/070852f84ee2bd21da3133851ca26ab449a7ee64c8e49e4fd5d65b7f7d32/hyperquant-0.51.tar.gz",
"platform": null,
"description": "# minquant\n\nminquant is a minimalistic framework for quantitative trading strategies. It allows users to quickly validate their strategy ideas with ease and efficiency.\n\n## Core APIs\n\n### `core.py`\n\u4e3b\u8981\u529f\u80fd\u5305\u62ec\uff1a\n- `ExchangeBase` \u548c `Exchange` \u7c7b\uff1a\u5b9e\u73b0\u57fa\u7840\u7684\u4ea4\u6613\u529f\u80fd\n - \u8d44\u4ea7\u7ba1\u7406\uff08\u521d\u59cb\u8d44\u91d1\u3001\u5df2\u5b9e\u73b0/\u672a\u5b9e\u73b0\u76c8\u4e8f\u7b49\uff09\n - \u4e0b\u5355\u4ea4\u6613\uff08\u4e70\u5165\u3001\u5356\u51fa\u3001\u5e73\u4ed3\u7b49\uff09\n - \u4ed3\u4f4d\u7ba1\u7406\u548c\u98ce\u63a7\n - \u8d26\u6237\u72b6\u6001\u66f4\u65b0\u548c\u8bb0\u5f55\n- `gen_back_time` \u51fd\u6570\uff1a\u56de\u6d4b\u65f6\u95f4\u5468\u671f\u7ba1\u7406\uff0c\u652f\u6301\u8bad\u7ec3\u548c\u6d4b\u8bd5\u65f6\u95f4\u533a\u95f4\u7684\u751f\u6210\n\n### `draw.py`\n\u4e3b\u8981\u529f\u80fd\u5305\u62ec\uff1a\n- \u652f\u6301\u591a\u79cd\u56fe\u8868\u7c7b\u578b\uff1aK\u7ebf\u3001\u66f2\u7ebf\u3001\u67f1\u72b6\u56fe\u7b49\n- \u63d0\u4f9b\u4e30\u5bcc\u7684\u4ea4\u4e92\u529f\u80fd\uff1a\n - \u65f6\u95f4\u8f74\u7f29\u653e\u548c\u8df3\u8f6c\n - \u81ea\u52a8\u64ad\u653e\u529f\u80fd\n - \u591a\u56fe\u8868\u8054\u52a8\u663e\u793a\n - \u6307\u6807\u53e0\u52a0\u529f\u80fd\n- \u63d0\u4f9b\u8be6\u7ec6\u7684\u6570\u636e\u6807\u6ce8\uff1a\n - \u4ea4\u6613\u4fe1\u53f7\u6807\u8bb0\n - \u6570\u636e\u663e\u793a\u548c\u63d0\u793a\n - \u81ea\u5b9a\u4e49\u989c\u8272\u548c\u6837\u5f0f\n\n### `logkit.py`\n\u4e3b\u8981\u529f\u80fd\u5305\u62ec\uff1a\n- \u81ea\u5b9a\u4e49\u65e5\u5fd7\u7ea7\u522b\u548c\u683c\u5f0f\u5316\uff1a\n - DEBUG: \u8c03\u8bd5\u4fe1\u606f\n - INFO: \u666e\u901a\u4fe1\u606f\uff08\u84dd\u8272\uff09\n - OK: \u6210\u529f\u4fe1\u606f\uff08\u7eff\u8272\uff09\n - WARNING: \u8b66\u544a\u4fe1\u606f\uff08\u9ec4\u8272\uff09\n - ERROR: \u9519\u8bef\u4fe1\u606f\uff08\u7ea2\u8272\uff09\n - CRITICAL: \u4e25\u91cd\u9519\u8bef\uff08\u6df1\u7ea2\u8272\uff09\n- \u652f\u6301\u591a\u79cd\u65e5\u5fd7\u8f93\u51fa\uff1a\n - \u63a7\u5236\u53f0\u5f69\u8272\u8f93\u51fa\n - \u6587\u4ef6\u65e5\u5fd7\u8bb0\u5f55\n- \u63d0\u4f9b\u4fbf\u6377\u7684\u65e5\u5fd7\u5206\u5272\u7ebf\u548c\u65f6\u95f4\u6233\u529f\u80fd\n- \u652f\u6301\u5f02\u5e38\u4fe1\u606f\u7684\u683c\u5f0f\u5316\u8f93\u51fa\n- \u53ef\u914d\u7f6e\u65f6\u533a\u548c\u65f6\u95f4\u663e\u793a\n\n## \u4f7f\u7528\u65b9\u6cd5\n\n### 1. \u521d\u59cb\u5316\u4ea4\u6613\u73af\u5883\n```python\nfrom core import Exchange\n# \u521b\u5efa\u4ea4\u6613\u5b9e\u4f8b\uff0c\u8bbe\u7f6e\u521d\u59cb\u8d44\u91d1\u548c\u4ea4\u6613\u54c1\u79cd\nexchange = Exchange(\n trade_symbols=['BTCUSDT'], # \u4ea4\u6613\u54c1\u79cd\n initial_balance=10000, # \u521d\u59cb\u8d44\u91d1\n fee=0.0002, # \u624b\u7eed\u8d39\u7387\n recorded=True # \u662f\u5426\u8bb0\u5f55\u4ea4\u6613\u5386\u53f2\n)\n```\n\n### 2. \u6267\u884c\u4ea4\u6613\u64cd\u4f5c\n```python\n# \u4e70\u5165\u64cd\u4f5c\nexchange.Buy('BTCUSDT', price=30000, amount=0.1, time='2024-01-01')\n\n# \u5356\u51fa\u64cd\u4f5c\nexchange.Sell('BTCUSDT', price=31000, amount=0.1, time='2024-01-02')\n\n# \u83b7\u53d6\u8d26\u6237\u72b6\u6001\nprint(exchange.stats)\n```\n\n### 3. \u7ed8\u5236\u5206\u6790\u56fe\u8868\n```python\nfrom draw import draw\nimport pandas as pd\n\n# \u51c6\u5907\u6570\u636e\ndata_df = pd.DataFrame({\n 'date': [...], # \u65f6\u95f4\u5217\n 'open': [...], # \u5f00\u76d8\u4ef7\n 'close': [...], # \u6536\u76d8\u4ef7\n 'high': [...], # \u6700\u9ad8\u4ef7\n 'low': [...], # \u6700\u4f4e\u4ef7\n 'volume': [...] # \u6210\u4ea4\u91cf\n})\n\n# \u914d\u7f6e\u56fe\u8868\ndata_dict = [\n {\n 'series_name': 'K\u7ebf\u56fe',\n 'draw_type': 'Kline',\n 'height': 60,\n 'col': ['open', 'close', 'low', 'high']\n },\n {\n 'series_name': '\u6210\u4ea4\u91cf',\n 'draw_type': 'Bar',\n 'height': 20,\n 'col': 'volume'\n }\n]\n\n# \u7ed8\u5236\u56fe\u8868\ndraw(\n df=data_df,\n data_dict=data_dict,\n date_col='date',\n title='BTC/USDT'\n)\n```\n\n### 4. \u65e5\u5fd7\u8bb0\u5f55\n```python\nfrom logkit import get_logger\n\n# \u521b\u5efa\u65e5\u5fd7\u5b9e\u4f8b\nlogger = get_logger(\n name='strategy', # \u65e5\u5fd7\u540d\u79f0\n file_path='logs/strategy.log', # \u65e5\u5fd7\u6587\u4ef6\u8def\u5f84\n show_time=True, # \u663e\u793a\u65f6\u95f4\u6233\n use_color=True # \u4f7f\u7528\u5f69\u8272\u8f93\u51fa\n)\n\n# \u8bb0\u5f55\u4e0d\u540c\u7ea7\u522b\u7684\u65e5\u5fd7\nlogger.debug(\"\u8c03\u8bd5\u4fe1\u606f\")\nlogger.info(\"\u666e\u901a\u4fe1\u606f\")\nlogger.ok(\"\u6210\u529f\u4fe1\u606f\")\nlogger.warning(\"\u8b66\u544a\u4fe1\u606f\")\nlogger.error(\"\u9519\u8bef\u4fe1\u606f\")\nlogger.critical(\"\u4e25\u91cd\u9519\u8bef\")\n\n# \u4f7f\u7528\u5206\u5272\u7ebf\nlogger.divider(\"\u56de\u6d4b\u5f00\u59cb\", sep='=', display_time=True)\n```\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A minimal yet hyper-efficient backtesting framework for quantitative trading",
"version": "0.51",
"project_urls": {
"Homepage": "https://github.com/yourusername/hyperquant",
"Issues": "https://github.com/yourusername/hyperquant/issues"
},
"split_keywords": [
"backtesting",
" hyperquant",
" quant",
" trading"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "69f39e193c131d08b3b317f56608e24b1329a39ac1b7c24a5e7390fff7e77239",
"md5": "a72941dbad31f014d36aeaa0279e5de4",
"sha256": "6f9797baa43302159a05b81e911a98d7384ae336ebcd53b78f2257752723944a"
},
"downloads": -1,
"filename": "hyperquant-0.51-py3-none-any.whl",
"has_sig": false,
"md5_digest": "a72941dbad31f014d36aeaa0279e5de4",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9",
"size": 64887,
"upload_time": "2025-09-07T20:22:39",
"upload_time_iso_8601": "2025-09-07T20:22:39.267986Z",
"url": "https://files.pythonhosted.org/packages/69/f3/9e193c131d08b3b317f56608e24b1329a39ac1b7c24a5e7390fff7e77239/hyperquant-0.51-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f0be070852f84ee2bd21da3133851ca26ab449a7ee64c8e49e4fd5d65b7f7d32",
"md5": "7a4473d8d1899c9db5837fec17022930",
"sha256": "c518b38d38dfebd4b156248d6fbc72fe96ae8749e85c9cfc78a484b00bdb8bf2"
},
"downloads": -1,
"filename": "hyperquant-0.51.tar.gz",
"has_sig": false,
"md5_digest": "7a4473d8d1899c9db5837fec17022930",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9",
"size": 186023,
"upload_time": "2025-09-07T20:22:40",
"upload_time_iso_8601": "2025-09-07T20:22:40.718876Z",
"url": "https://files.pythonhosted.org/packages/f0/be/070852f84ee2bd21da3133851ca26ab449a7ee64c8e49e4fd5d65b7f7d32/hyperquant-0.51.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-07 20:22:40",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "yourusername",
"github_project": "hyperquant",
"github_not_found": true,
"lcname": "hyperquant"
}