PTrade平台内置了丰富的技术指标函数,无需手动编写计算公式,可以直接在策略中调用,快速开发策略。以下是一个使用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死叉卖出信号")
而交易集中度通常指资金在少数股票或板块上的集中程度,用于衡量组合的风险暴露。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'])
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
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 · 策略回测 · 实盘实战