云计算百科
云计算领域专业知识百科平台

A股量化策略回测实战:从行情数据到绩效评估(第 24 篇):资金、技术复合策略

A股量化策略回测实战:从行情数据到绩效评估(第 24 篇):资金、技术复合策略

前言

第 21–23 篇是资金视角(板块/北向/机构),第 5–10 篇是技术视角。单一维度都有盲区:资金流可能"拉高出货"、技术信号可能"无量假突破"。把它们投票融合——资金看多且技术看多才出手——用多源共识降低单维噪音。本篇做资金×技术的复合策略。

一、接口原始字段梳理

本篇是融合层,输入来自前文真实接口(零编造):

维度接口关键字段
板块资金 hizj/zjh net5(5 日净流额)
北向 ht/nbzj/bxpm jrcg(个股净买额)
技术-均线 hsstock/history/ma ma5, ma20
技术-MACD hsstock/history/macd diff, dea

复合器对每只标的,资金维给一票、技术维给一票,多数看多才买。

二、自研衍生统计指标

  • 资金票 vote_fund = +1 if (net5>0 或 jrcg>0) else −1:有资金流入看多。
  • 技术票 vote_tech = +1 if (ma5>ma20 且 diff>dea) else −1:均线多头 + MACD 金叉看多。
  • 复合信号 = vote_fund + vote_tech:>= +2 买入、<= −2 卖出、否则持有。
  • 两票独立来源、低相关,融合后噪音显著低于单维。

三、数据表设计

CREATE TABLE IF NOT EXISTS fundtech_signal (
stock TEXT NOT NULL,
t TEXT NOT NULL,
vote_fund INTEGER,
vote_tech INTEGER,
sig TEXT, — BUY/SELL/HOLD
PRIMARY KEY (stock, t)
);

四、完整代码

4.1 资金 × 技术 双票融合

import sqlite3, json, time

BASE = "https://api.biyingapi.com"
LICENCE = "YOUR_LICENCE_HERE"
DB_PATH = "backtest.db"

def biying_api_get_retry(url, timeout=15, max_retry=3):
import urllib.request
last = None
for i in range(max_retry):
try:
req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
with urllib.request.urlopen(req, timeout=timeout) as r:
return json.loads(r.read().decode('utf-8', 'ignore'))
except Exception as e:
last = e
if i < max_retry – 1:
time.sleep(1 + i)
raise last

def fetch_one(stock, api, start, end, adj='f', level='d', lt=1200):
url = (f"{BASE}/hsstock/history/{api}/{stock}/{level}/{adj}/{LICENCE}"
f"?st={start}&et={end}&lt={lt}")
data = biying_api_get_retry(url)
bars = data if isinstance(data, list) else data.get('data', [])
return sorted(bars, key=lambda b: b['t'])

def fundtech_vote(bar_ma, bar_macd, net5=None, jrcg=None):
"""资金票 + 技术票 融合(纯计算)。"""
vote_fund = 0
if (net5 is not None and net5 > 0) or (jrcg is not None and jrcg > 0):
vote_fund = 1
elif (net5 is not None and net5 < 0) or (jrcg is not None and jrcg < 0):
vote_fund = –1
vote_tech = 0
if bar_ma.get('ma5') and bar_ma.get('ma20'):
vote_tech += 1 if float(bar_ma['ma5']) > float(bar_ma['ma20']) else –1
if bar_macd.get('diff') and bar_macd.get('dea'):
vote_tech += 1 if float(bar_macd['diff']) > float(bar_macd['dea']) else –1
total = vote_fund + vote_tech
sig = 'BUY' if total >= 2 else ('SELL' if total <= –2 else 'HOLD')
return vote_fund, vote_tech, sig

def demo_ft():
ma = {'ma5': 10.5, 'ma20': 9.8}
macd = {'diff': 0.2, 'dea': 0.1}
print("资金+技术票:", fundtech_vote(ma, macd, net5=30.0, jrcg=5.0))

if __name__ == '__main__':
demo_ft()

五、关键业务说明

  • 低相关源融合才降噪:资金(博弈维度)与技术(价格维度)信息来源不同,共识比单维可靠;若两源本质同源(如均来自价格),融合增益有限。
  • 权重可不对称:资金票可给更高权重(机构/北向更"聪明"),或技术票更灵敏;权重是过拟合源(第 29 篇)。
  • 仍是事件级信号:复合后信号仍需"下一根开盘"成交(第 3 篇对齐),避免前视。
  • 与第 10 篇区别:第 10 篇融的是多个技术指标(同源),本篇融的是"资金+技术"跨维度,降噪更实质。
  • 可作组合底层:复合信号作为第 25–28 篇组合的选股输入。

六、拓展练习

  • 给资金票权重 2、技术票权重 1,对比等权融合的绩效。
  • 加入第 17 篇盈利质量作第三票(基本面维度),做三维融合。
  • 接第 25 篇组合,把复合信号为 BUY 的标的等权买入。
  • 统计复合信号 BUY 后的胜率,对比单资金/单技术信号。
  • 下篇预告

    系列第 25 篇:等权、市值加权组合策略 —— 单标的策略讲完,下一篇进入组合层:把多个信号标的按等权或市值加权构建组合,看分散化如何降波动、稳收益。

    免责申明:本篇全部代码与回测结果仅作为量化编程与策略研究的学习演示,所有回测均为方法演示,不构成任何投资建议。市场有风险,投资需谨慎。

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » A股量化策略回测实战:从行情数据到绩效评估(第 24 篇):资金、技术复合策略
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!