本文目录导读:

在量化投资和金融分析领域,“基本面”和“技术面”通常被认为是不一致的,甚至是相互矛盾的,基本面分析侧重于研究公司的内在价值(如财务报表、宏观经济、行业前景),而技术面分析侧重于研究市场行为(如价格走势、成交量、指标形态)。
在实际的编程案例(如Python量化交易)中,我们经常通过代码将两者结合起来,寻找它们“共振”或“背离”的时刻。
下面我将从理论差异、代码案例(如何结合)以及实际结论三个方面来解答。
为什么说它们“不一致”?
- 时间维度不同:
- 基本面:关注长期趋势(几个月到几年),认为价格最终会回归价值。
- 技术面:关注短期波动(分钟到几周),认为价格包含了一切市场情绪。
- 逻辑基础不同:
- 基本面:基于因果关系(因为公司盈利好,所以股价涨)。
- 技术面:基于概率和统计(因为历史会重演,所以出现金叉可能涨)。
- 冲突点:一家公司基本面极差(亏损、负债高),但技术面可能因为资金炒作而连续涨停,此时两者完全背离。
Python案例:如何用代码判断两者是否“一致”?
在实际量化案例中,我们不会问“它们是否一致”,而是问:“当基本面和技术面同时发出买入信号时,胜率是否更高?”
下面是一个简化的Python案例,使用 pandas 和 yfinance 演示如何将两者结合:
案例场景:
- 基本面信号:市盈率(PE)低于行业平均,且净资产收益率(ROE)大于15%。
- 技术面信号:收盘价突破20日均线,且MACD金叉。
- 目标:找出两者同时满足的股票。
import yfinance as yf
import pandas as pd
import numpy as np
# 1. 获取股票数据(以苹果公司为例)
ticker = "AAPL"
data = yf.download(ticker, start="2023-01-01", end="2024-01-01")
# 2. 技术面计算
# 计算20日均线
data['MA20'] = data['Close'].rolling(window=20).mean()
# 计算MACD
exp12 = data['Close'].ewm(span=12, adjust=False).mean()
exp26 = data['Close'].ewm(span=26, adjust=False).mean()
data['MACD'] = exp12 - exp26
data['Signal'] = data['MACD'].ewm(span=9, adjust=False).mean()
# 技术面买入信号:收盘价 > MA20 且 MACD > Signal
data['Tech_Signal'] = (data['Close'] > data['MA20']) & (data['MACD'] > data['Signal'])
# 3. 基本面数据(简化处理,实际需从财报接口获取)
# 假设我们已知当前基本面达标(ROE > 15%, PE < 30)
# 这里用布尔值模拟
fundamental_ok = True # 实际案例中应动态计算
# 4. 综合判断
if fundamental_ok:
# 找出技术面发出信号的日期
buy_days = data[data['Tech_Signal']].index
print(f"基本面达标,且技术面发出买入信号的日期共有 {len(buy_days)} 天")
print(buy_days)
else:
print("基本面不达标,忽略技术面信号")
# 5. 回测逻辑(简化)
# 如果两者一致,则买入并持有5天
if fundamental_ok and len(buy_days) > 0:
first_buy = buy_days[0]
buy_price = data.loc[first_buy, 'Close']
# 假设5天后卖出
sell_day = data.index[data.index.get_loc(first_buy) + 5]
sell_price = data.loc[sell_day, 'Close']
return_rate = (sell_price - buy_price) / buy_price
print(f"两者一致时买入,5天后收益率: {return_rate:.2%}")
fundamental_ok = True且Tech_Signal = True,我们认为两者一致。fundamental_ok = True但Tech_Signal = False,两者不一致(基本面好但技术面弱)。fundamental_ok = False但Tech_Signal = True,两者不一致(技术面好但基本面差)。
实际金融案例中的结论
在真实的量化基金中,基本面和技术面很少完全一致,但可以通过以下方式处理:
| 策略类型 | 基本面 | 技术面 | 是否一致 | 典型操作 |
|---|---|---|---|---|
| 纯价值投资 | 买入 | 忽略 | 不一致 | 越跌越买 |
| 纯趋势跟踪 | 忽略 | 买入 | 不一致 | 追涨杀跌 |
| 多因子模型 | 打分 | 打分 | 部分一致 | 加权综合 |
| 量化择时 | 过滤 | 触发 | 一致时开仓 | 共振买入 |
经典案例:
- 2015年A股牛市:很多股票基本面极差(亏损),但技术面连续涨停,此时两者严重背离。
- 2020年茅台:基本面优秀(高ROE),技术面也持续走强,此时两者高度一致,被称为“戴维斯双击”。
- 理论上:基本面和技术面不一致,因为它们研究的是不同的维度(价值 vs 价格)。
- 编程案例中:我们通常不追求它们“一致”,而是寻找共振点(同时看多)或背离点(一个看多一个看空)作为交易信号。
- 实际应用:成熟的量化策略会将两者结合,
- 用基本面选股(过滤掉垃圾股);
- 用技术面择时(决定买入卖出时机)。
最终答案:在Python案例中,基本面和技术面通常被视为两个独立的因子,它们不一定一致,但可以组合使用以提高胜率。