在量化交易中,策略生成和因子组合是两个至关重要的步骤。它们共同决定了最终的投资决策质量及其预期回报。以下是详细的介绍:
一、策略生成
策略生成是指基于一定的逻辑或模型创建具体的交易指令的过程。
-
基础理论准备
-
需要了解市场的基本运行机制,包括但不限于宏观经济指标、行业动态以及微观层面的企业财报分析等内容。
-
掌握常见的金融工程技术手段,比如套利机会识别、风险对冲措施等。
-
-
数据收集与处理
-
收集高质量的历史价格和其他相关信息作为建模的基础素材。
-
清洗整理原始资料去除异常值并补全缺失部分以确保后续工作顺利开展。
-
-
模型构建
-
可采用传统的统计学方法或是新兴的人工智能算法来进行模式发现。
-
统计模型:线性回归、Logistic 回归等;
-
AI 模型:随机森林、梯度提升机(GBM)、卷积神经网络(CNN)等。
-
-
-
策略测试
-
在离线环境中模拟执行新制定的计划检查其可行性。
-
计算各类关键绩效指标(KPI),例如年化收益率、夏普比率、最大回撤幅度等。
-
二、因子的选择与组合
因子是一系列用于描述资产特性的变量,可以作为选股的重要依据之一。合理选择和有效整合多个因子能够显著提高投资效率。
因子选择与类别划分:
【技术指标因子】
价格动能:追踪资产价格连续变化趋势,通过移动平均线、相对强弱指标(RSI)等技术工具捕捉趋势延续性
成交量动能:分析成交量变化速率与市场参与热度,结合OBV指标、换手率等判断资金流向
K线形态:识别特定价格形态(如头肩顶、十字星)并结合波动率指标,预判市场转折信号
【宏观经济因子】
商品价格:监控原油/黄金等大宗商品期货价格波动,分析其对相关产业链的传导效应
利率指标:跟踪国债收益率曲线变化,量化货币政策调整对资产定价的重估影响
市场指数:解析股票/债券市场综合指数走势,通过指数动量效应捕捉跨资产轮动规律
三、支撑阻力线偏离比率因子
今日价格与60天支撑阻力线相比之偏差比率:60日支撑阻力线是一个用来衡量市场价格在过去60天内是否遇到某一个关键价格点的指标。这些价格点可能会形成压力或支撑,影响价格的未来走势。当价格接近压力线时,通常意味着上涨动能减弱,价格可能会回落;而当价格接近支撑线时,则表明下跌压力减弱,价格可能反弹。因此,偏差比率可以用来衡量今日收盘价与支撑阻力线之间的差异,帮助预测价格走势。选择60天作为週期,能够反映更短期的市场波动,为短期交易策略提供有效参考。
计算方法如下:
60日支撑阻力线 = (今日收盘价 - 60日支撑阻力线) / 60日支撑阻力线。
60日支撑阻力线 = 将过去60天的价格划分为10份,并找出出现次数最多的那份价格的平均值进行比较。
消除人工画线的主观性与模糊性
传统技术分析依赖交易员在K线图上手动标注支撑/阻力区间,易受情绪、经验差异影响,导致同一标的可能被不同分析师画出截然不同的关键位(如将支撑线定在局部低点或心理整数关口)。而该因子通过算法锚定客观规则(公式:60日支撑阻力线 = (今日收盘价 - 60日支撑阻力线) / 60日支撑阻力线),确保支撑阻力线的生成完全由客观历史数据驱动,规避了"随意画线"导致的误判风险。
四、量化策略开发
将今日价格与60天支撑阻力线相比之偏差比率量化为具体因子指标后,叠加不同周期因子,组成一个完整策略进行回测。
五、使用Python获取加密货币历史行情
从去中心化交易所拿到交易所数据,可直接通过访问它的 HTTP 和 Websocket 接口(通过查看官方Api文档方式)
安装 ccxt
pip install ccxt
初始化设置
import ccxt
exchange = ccxt.binance({
'enableRateLimit': True, # 防止被BAN
'timeout': 15000 # 超时:15秒
})
交易所的API都有严格的调用频率限制,enableRateLimit
会启用频率限制能力,防止触发交易所的 API 调用频率。
如果遇到网络问题,也可通过设置 proxies
切换网络环境:
exchange = ccxt.okx({
"proxies": {
"http": "http://127.0.0.1:7890",
"https": "http://127.0.0.1:7890",
}
})
获取交易所上的所有品种:
markets = exchange.load_markets()
print(list(markets.keys)[:10])
示例如何通过 ccxt 获取某个品种当前的价格,主要依赖于 fetch_ticker
函数接口。
代码为读取 BTC/USDT
交易对的最新价。
ticker = exchange.fetch_ticker('BTC/USDT')
print(f"""
实时价格:
- 最新价:{ticker['last']} USDT
- 24小时最高:{ticker['high']}
- 24小时成交量:{ticker['quoteVolume']} USDT
""")