数字货币交易市场日益成熟,量化交易因其高效、自动化的特点,成为众多交易者的选择。HowTrader 是一款专为数字货币市场设计的开源量化交易框架,基于 VNPY 进行优化,修复了部分 BUG,增强了对 TradingView 信号的支持,并增加了 网格交易 等功能。本文将详细介绍 HowTrader 的功能、安装方法及使用示例,帮助新手快速上手.
HowTrader 的特点与优势
HowTrader 在 VNPY 的基础上进行了多项优化,使其更适合数字货币量化交易:
交易数据精度提升:
OrderData
(订单数据)、TradeData
(成交数据)、ContractData
(交易对信息)等核心数据结构采用Decimal
而非float
,提高计算精度。
交易回调顺序优化:
- VNPY 先推送
on_order
,后推送on_trade
,导致仓位计算可能滞后。HowTrader 先推送on_trade
,再推送on_order
,确保仓位信息的实时性。
交易网关优化:
- 增强了 断线重连 及 异常处理机制,提高系统稳定性。
支持 TradingView 信号对接:
- 允许通过 HTTP Webhook 接收来自 TradingView 的交易信号,实现自动化交易。
精简代码,减少依赖:
- 相较于 VNPY,删除了部分冗余代码,仅保留核心交易功能,降低学习成本,提高运行效率。
安装与环境配置
由于 HowTrader 依赖 pandas
、numpy
等科学计算库,推荐使用 Anaconda 进行安装。
1. 安装 Anaconda
可通过官网下载 Anaconda 或 Miniconda:
- Anaconda 下载地址
- Miniconda 下载地址
2. 安装 Git
HowTrader 源码托管在 GitHub,需要 Git 来进行克隆:
# Ubuntu/Debian 系统sudo apt install git# macOS 系统brew install git# Windows 用户请参考 Git 官网安装:[https://git-scm.com/downloads](https://git-scm.com/downloads)
3. 创建 Python 虚拟环境
HowTrader 推荐使用 Python 3.9:
conda create -n mytrader python=3.9conda activate mytrader
4. 安装 HowTrader
pip install git+https://github.com/51bitquant/howtrader.git
如需更新:
pip install git+https://github.com/51bitquant/howtrader.git -U
5. 检查安装
安装完成后,可以通过以下命令检查:
import howtraderprint(howtrader.__version__)
HowTrader 的基本使用
1. 启动主程序
创建 main.py
文件,输入以下代码:
from howtrader.trader.ui import create_qapp, MainWindowfrom howtrader.trader.engine import MainEnginefrom howtrader.event import EventEnginefrom howtrader.gateway.binance import BinanceSpotGateway
# 初始化qapp = create_qapp()event_engine = EventEngine()main_engine = MainEngine(event_engine)
# 添加 Binance 现货交易网关main_engine.add_gateway(BinanceSpotGateway)
# 创建主窗口main_window = MainWindow(main_engine, event_engine)main_window.showMaximized()
qapp.exec()
运行 python main.py
,即可启动 HowTrader 主界面。
2. 开发交易策略
HowTrader 提供了基于 CTA(趋势跟随) 的策略框架,用户可自行开发策略。
示例:双均线交易策略
from howtrader.trader.object
import BarDatafrom howtrader.trader.strategy
import CtaTemplatefrom howtrader.trader.utility
import ArrayManagerclass DualMA(CtaTemplate):
author = "51bitquant"
fast_window = 10
slow_window = 20
fast_ma = 0
slow_ma = 0
parameters = ["fast_window", "slow_window"]
variables = ["fast_ma", "slow_ma"]
def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
super().__init__(cta_engine, strategy_name, vt_symbol, setting)
self.am = ArrayManager()
def on_init(self):
self.write_log("策略初始化")
self.load_bar(10)
def on_bar(self, bar: BarData):
self.am.update_bar(bar)
if not self.am.inited:
return
self.fast_ma = self.am.sma(self.fast_window)
self.slow_ma = self.am.sma(self.slow_window)
if self.fast_ma > self.slow_ma:
self.buy(bar.close_price, 1)
elif self.fast_ma < self.slow_ma:
self.sell(bar.close_price, 1)
3. 运行回测
在 HowTrader 中,回测是评估策略效果的重要步骤,以下代码展示了如何进行回测:
from howtrader.app.cta_strategy.backtesting import BacktestingEngine
from datetime import datetime
from howtrader.trader.object import Interval
from strategies.dual_ma_strategy import DualMA
engine = BacktestingEngine()
engine.set_parameters(
vt_symbol="BTCUSDT.BINANCE",
interval=Interval.MINUTE,
start=datetime(2021, 1, 1),
end=datetime(2022, 1, 1),
rate=0.0004,
slippage=0.01,
size=1,
pricetick=0.01,
capital=100000
)
engine.add_strategy(DualMA, {})
engine.load_data()
engine.run_backtesting()
df = engine.calculate_result()
engine.calculate_statistics()
engine.show_chart()
TradingView 信号对接
HowTrader 支持接收来自 TradingView 的交易信号,实现全自动化交易。
1.配置 Webhook 服务器
from flask import Flask, request
from howtrader.event import Event, EventEngine
from howtrader.trader.event import EVENT_TV_SIGNAL
app = Flask(__name__)
event_engine = EventEngine()
@app.route('/webhook', methods=['POST'])
def webhook():
data = request.json
event = Event(EVENT_TV_SIGNAL, data)
event_engine.put(event)
return {"status": "success"}
if __name__ == "__main__":
app.run(host="0.0.0.0", port=9999)
2.在 TradingView 中添加 Webhook
- 进入 TradingView,创建一个新策略
- 选择 Webhook URL
- 输入
http://your-server-ip:9999/webhook
- 交易信号触发时,HowTrader 将自动执行对应的交易指令
总结
HowTrader 作为一款开源的数字货币量化交易框架,在 VNPY 的基础上进行了优化,支持多交易所、多策略,并可与 TradingView 结合使用,实现全自动化交易。对于量化交易爱好者,HowTrader 提供了一种高效、灵活的开发方式。
🔗 项目地址:https://github.com/51bitquant/howtrader