当前位置:首页>行情>如何用PTrade指标看清行情走向并计算交易集中度?

如何用PTrade指标看清行情走向并计算交易集中度?

  • 2026-10-17 20:11:21
如何用PTrade指标看清行情走向并计算交易集中度?
PTrade平台内置了丰富的技术指标函数,无需手动编写计算公式,可以直接在策略中调用,快速开发策略。
以下是最常用的行情判断指标:
1. 趋势判断指标
2. 超买超卖指标
3. 波动率指标
4. 使用示例
以下是一个使用MACD指标判断行情走向的完整示例:
def initialize(context):    g.security = '600570.SS'    set_universe(g.security)    g.fast = 12    g.slow = 26    g.signal = 9def handle_data(context, data):    security = g.security    # 获取历史收盘价数据    close_data = get_history(100, '1d', 'close', security, fq='pre')    if len(close_data) < 60:        return    # 调用内置MACD函数    dif, dea, macd_bar = MACD(close_data['close'], g.fast, g.slow, g.signal)    # 判断金叉/死叉    # 金叉买入:DIF上穿DEA,且两者均为正    if dif[-1] > dea[-1] and dif[-2] <= dea[-2]:        if dif[-1] > 0 and dea[-1] > 0:            order_value(security, context.portfolio.cash)            log.info("MACD金叉买入信号")    # 死叉卖出:DIF下穿DEA,且两者均为负    elif dif[-1] < dea[-1] and dif[-2] >= dea[-2]:        if dif[-1] < 0 and dea[-1] < 0:            if get_position(security).amount > 0:                order_target(security, 0)                log.info("MACD死叉卖出信号")
而交易集中度通常指资金在少数股票或板块上的集中程度,用于衡量组合的风险暴露。
PTrade可以通过以下方式实现:
方法1:基于持仓市值的集中度计算
def calculate_concentration(context):    """计算投资组合的集中度"""    positions = context.portfolio.positions    total_value = context.portfolio.portfolio_value    if not positions or total_value == 0:        return 0    # 获取每只股票的持仓市值占比    weights = []    for stock in positions:        position = positions[stock]        weight = position.value / total_value        weights.append(weight)    # 计算前N大持仓的集中度(例如前3大)    weights.sort(reverse=True)    top3_concentration = sum(weights[:3])    # 计算赫芬达尔指数(HHI)- 衡量集中度的经典指标    hhi = sum(w ** 2 for w in weights)    return {        'top3_concentration': top3_concentration,  # 前3大持仓占比        'hhi': hhi,  # 赫芬达尔指数(0-1之间,越大越集中)        'num_stocks': len(weights)  # 持仓股票数量    }def handle_data(context, data):    # 每交易日计算集中度    concentration = calculate_concentration(context)    # 如果集中度过高(例如前3大持仓超过60%),发出警告    if concentration['top3_concentration'] > 0.6:        log.warning("交易集中度过高!前3大持仓占比: %.2f%%" %                      (concentration['top3_concentration'] * 100))    # 如果HHI超过0.3,说明组合极度集中    if concentration['hhi'] > 0.3:        log.warning("HHI指数过高(%.4f),建议分散投资" % concentration['hhi'])
方法2:基于成交量的市场集中度
def calculate_market_concentration(stock_list, context):    """计算市场交易集中度 - 判断行情是否集中在少数个股上"""    # 获取全市场/板块的成交额数据    volumes = {}    total_volume = 0    for stock in stock_list:        # 获取当日成交量数据        volume_data = get_history(1, '1d', 'volume', stock, fq='pre')        if volume_data is not None and len(volume_data) > 0:            vol = volume_data['volume'].iloc[-1]            volumes[stock] = vol            total_volume += vol    if total_volume == 0:        return 0    # 计算前10%股票贡献的成交量占比    sorted_volumes = sorted(volumes.values(), reverse=True)    top10_count = max(1, len(sorted_volumes) // 10)    top10_volume = sum(sorted_volumes[:top10_count])    concentration = top10_volume / total_volume    return concentration
方法3:篮子交易中的集中度控制
def adjust_portfolio_with_concentration_control(context, target_stocks, weights):    """带集中度控制的调仓"""    max_weight = 0.2  # 单只股票最大权重不超过20%    # 限制单只股票最大权重    adjusted_weights = [min(w, max_weight) for w in weights]    # 重新归一化    total_weight = sum(adjusted_weights)    normalized_weights = [w / total_weight for w in adjusted_weights]    # 执行调仓    for stock, weight in zip(target_stocks, normalized_weights):        target_value = context.portfolio.portfolio_value * weight        order_target_value(stock, target_value)
PTrade的篮子交易工具支持构建包含多只股票的投资组合,通过一键买卖和调仓操作实现分散投资。在篮子交易中,可以设置单个股票的权重上限来控制集中度。
行情判断:PTrade内置了超过100种技术指标函数,可直接调用MA、MACD、RSI、KDJ、CCI、BOLL、ATR等指标,无需自己编写计算公式;
集中度计算:可通过持仓市值占比计算前N大持仓集中度,或使用赫芬达尔指数(HHI)精准衡量组合分散程度;
动态调节:结合市场行情强度(如布林带位置占比、ADX指标等)动态调整集中度上限,在趋势市场中适当集中,在震荡市场中强制分散;
工具辅助:利用PTrade的篮子交易工具实现一键分散调仓,配合智能条件单设置止损线控制单只股票风险。
!风险提示
投资有风险,入市需谨慎。本文仅供学习参考,不构成投资建议。
QMT · MiniQMT · PTrade · 策略回测 · 实盘实战
关注本公众号,获取更多量化干货

最新文章

随机文章