在数字货币交易领域,量化策略已成为获取稳定收益的重要手段。本文将深入解析Python量化策略API的核心功能和使用方法,帮助开发者快速构建高效的数字货币交易系统。
快速入门指南
策略逻辑简介
量化策略通过与行情交易柜台建立连接,发送订阅请求后,系统通过一系列回调函数向用户推送市场数据。用户可在不同回调函数中调用功能函数,实现行情获取、下单、时间回调等交易逻辑。
重要提示:策略文件应与功夫安装目录位于同一盘符下,且文件路径最好不包含空格。在运行策略前,务必确认启动的账户柜台进程(td)和行情源柜台进程(md)与策略中填写的柜台ID一致。
以下是一个基础策略示例:
import kungfu.yijinjing.time as kft
from kungfu.wingchun.constants import *
from pykungfu import wingchun as wc
source = "okx"
account = "test"
tickers = ["BTC-USDT", "LTC-USDT"] # 现货
tickers_COINF = ["BTC-USD-240628"] # 币本位-USD-
tickers_UF = ["LTC-USDT-SWAP"] # U本位-USDT-
EXCHANGE_SPOT = Exchange.OKX_SPOT
EXCHANGE_UF = Exchange.OKX_USD_FUTURE
EXCHANGE_CoinF = Exchange.OKX_COIN_FUTURE
def pre_start(context):
context.log.info("pre_start {}".format(context.now()))
context.add_account(source, account)
context.subscribe(source, tickers, EXCHANGE_SPOT)
context.subscribe(source, tickers_UF, EXCHANGE_UF)
context.subscribe(source, tickers_COINF, EXCHANGE_CoinF)
def post_start(context):
context.log.info("post_start {}".format(context.now()))
def on_quote(context, quote, location, dest):
context.log.info('[on_quote] {}'.format(quote))
order_id = context.insert_order(quote.instrument_id, EXCHANGE_SPOT, source, account,
quote.last_price, 1, PriceType.Limit, Side.Buy, Offset.Open)
context.log.info("ticker insert order instrument_id: {},order_id: {}".format(quote.instrument_id, order_id))
核心功能函数详解
基础回调方法
pre_start 启动前回调
在策略启动前调用,用于完成添加交易账户、订阅行情、策略初始化计算等准备工作。
参数:
- context: Python对象,策略的全局变量
示例:
def pre_start(context):
context.add_account(source, account)
context.subscribe(source, tickers, exchange)
post_start 启动后回调
策略连接上行情交易柜台后调用,此函数回调后,策略可以执行添加时间回调、获取策略持仓、报单等操作。
参数:
- context: Python对象,策略的全局变量
on_quote 行情回调
收到快照行情时自动触发,行情信息通过quote对象获取。
参数:
- context: 策略全局变量
- quote: Quote对象,包含行情数据
- location: Location对象,数据来源进程信息
- dest: int类型,与location配合确定数据存储位置
交易执行函数
context.insert_order 报单函数
用于下达交易订单,支持多种订单类型和参数配置。
参数:
- instrument_id: 合约ID
- exchange_id: 交易所ID
- source_id: 柜台ID
- account_id: 交易账号
- limit_price: 价格
- volume: 数量
- priceType: 报单类型
- side: 买卖方向
- offset: 开平方向
返回:订单ID
示例:
order_id = context.insert_order("BTC-USDT", Exchange.OKX_SPOT, "okx", "acc_1",
price, 1, PriceType.Limit, Side.Buy, Offset.Open)
👉 查看实时交易工具
context.cancel_order 撤单函数
用于撤销已下的订单。
参数:
- order_id: 订单ID
返回:订单操作ID
投资组合管理
策略持仓维护
功夫系统支持四种不同的持仓维护模式,根据context.hold_book()和context.hold_positions()方法的调用情况决定:
- 默认模式:只维护当前订阅的标的,持仓数据从柜台同步
- 保持账本模式:维护历史交易过的所有标的
- 保持持仓模式:使用本地存储的历史持仓记录
- 完全保持模式:同时保持账本和持仓记录
资金与持仓信息获取
通过context.book获取策略投资组合信息,包括资金情况、持仓列表、委托信息等:
def post_start(context):
book = context.book
context.log.warning("[strategy capital] (avail){} (margin){}".format(book.asset.avail, book.asset.margin))
# 获取账户持仓信息
account_book = context.get_account_book(source, account)
long_positions = account_book.long_positions
for key in long_positions:
pos = long_positions[key]
context.log.info("多头持仓: {}(数量){}(昨仓){}".format(
pos.instrument_id, pos.volume, pos.yesterday_volume))
常见问题
策略开发基础
Q: 如何开始编写第一个量化策略? A: 首先需要导入必要的模块,定义交易账户和标的,然后在pre_start中添加账户和订阅行情,在on_quote等回调函数中实现交易逻辑。
Q: 策略运行前需要注意哪些事项? A: 确保策略文件与安装目录在同一盘符下,路径不含空格,并确认启动的柜台进程与策略中设置的ID一致。
交易执行相关
Q: 如何正确下单和撤单? A: 使用context.insert_order函数下单,返回order_id,需要撤单时使用context.cancel_order(order_id)。建议在收到订单回报后再进行撤单操作。
Q: 如何处理不同的数字货币合约类型? A: 数字货币有现货、U本位合约、币本位合约等类型,需要正确设置exchange_id参数:OKX_SPOT(现货)、OKX_USD_FUTURE(U本位)、OKX_COIN_FUTURE(币本位)。
数据与风控
Q: 如何获取账户资金和持仓信息? A: 通过context.get_account_book(source, account)获取指定账户的投资组合信息,包括资金情况、持仓列表等。
Q: 如何监控策略性能? A: 系统会自动维护策略收益和持仓记录,可以通过context.book获取策略投资组合信息,实时监控策略表现。
👉 获取进阶交易策略
高级功能应用
时间回调机制
功夫系统提供了灵活的时间回调功能,可以在指定时间点执行特定操作:
# 单次定时回调
context.add_timer(context.now() + 10*1000000000, lambda ctx, event: callback_function(ctx))
# 间隔定时回调
timer_id = context.add_time_interval(60*1000000000, lambda ctx, event: periodic_task(ctx))
# 取消定时器
context.clear_timer(timer_id)
静态数据获取
通过context.static_data可以获取标的的基本信息、费率信息等静态数据:
static_data = context.static_data
instruments = static_data.instruments
for key in instruments:
instrument = instruments[key]
context.log.info("标的: {}, 交易所: {}".format(instrument.instrument_id, instrument.exchange_id))
最佳实践建议
- 风控优先:在实盘前充分回测,设置合理的止损止盈机制
- 日志完善:合理使用context.log记录关键操作和异常情况
- 异常处理:妥善处理网络中断、柜台连接异常等情况
- 性能优化:避免在回调函数中执行复杂计算,保持策略响应速度
通过掌握这些核心API功能,开发者能够构建出高效、稳定的数字货币量化交易策略,在波动的市场中获取稳定收益。