核心内容摘要
StructBERT情感分类:5分钟搭建中文情绪分析工具
前言交易时机的选择直接影响策略表现。
选择合适的交易时机可以降低交易成本、提高成交质量、减少滑点损失。
本文将介绍如何识别和选择最佳交易时机。
本文将介绍交易时机的重要性市场微观结构分析流动性评估波动率时机选择时间窗口优化
为什么选择天勤量化TqSdkTqSdk交易时机选择支持功能说明实时行情支持实时Tick和K线数据订单薄支持订单薄深度数据成交量支持实时成交量数据时间管理支持交易时间管理安装方法pipinstalltqsdk pandas numpy
交易时机基础
1 时机选择因素因素说明影响流动性市场流动性水平影响成交速度和滑点波动率市场波动率水平影响价格波动成交量成交量大小影响成交质量时间交易时间段影响市场活跃度
2 时机选择目标目标说明降低滑点选择流动性好的时机提高成交率选择活跃时段减少成本避开高波动时段优化执行选择最佳执行窗口
流动性评估
1 流动性指标#!/usr/bin/env python# -*- coding: utf-8 -*- 功能流动性评估 说明本代码仅供学习参考 importpandasaspdimportnumpyasnpfromtqsdkimportTqApi,TqAuth apiTqApi(authTqAuth(快期账户,快期密码))SYMBOLSHFE.rb2510klinesapi.get_kline_serial(SYMBOL,60,
# 1分钟K线api.wait_update()defassess_liquidity(df,window
: 评估流动性 参数: df: K线数据 window: 窗口大小 liquiditypd.DataFrame()#
成交量liquidity[volume]df[volume]liquidity[avg_volume]df[volume].rolling(window).mean()liquidity[volume_ratio]df[volume]/liquidity[avg_volume]#
价格波动波动小说明流动性好returnsdf[close].pct_change()liquidity[volatility]returns.rolling(window).std()#
买卖价差如果有订单薄数据# 简化使用高低价差liquidity[spread](df[high]-df[low])/df[close]#
综合流动性评分# 成交量高、波动小、价差小 流动性好liquidity[score](liquidity[volume_ratio]*
4(1-liquidity[volatility]/liquidity[volatility].max())*
3(1-liquidity[spread]/liquidity[spread].max())*
0.
returnliquidity# 评估流动性liquidityassess_liquidity(klines)print(流动性评估:)print(f 平均成交量比率:{liquidity[volume_ratio].mean():.2f})print(f 平均波动率:{liquidity[volatility].mean():.4f})print(f 平均价差:{liquidity[spread].mean():.4f})print(f 平均流动性评分:{liquidity[score].mean():.3f})# 找出流动性最好的时段best_liquidityliquidity.nlargest(10,score)print(f\n流动性最好的10个时段:)print(best_liquidity[[volume_ratio,volatility,spread,score]])api.close()
波动率时机选择
1 波动率过滤#!/usr/bin/env python# -*- coding: utf-8 -*- 功能波动率时机选择 说明本代码仅供学习参考 importpandasaspdimportnumpyasnpfromtqsdkimportTqApi,TqAuth apiTqApi(authTqAuth(快期账户,快期密码))SYMBOLSHFE.rb2510klinesapi.get_kline_serial(SYMBOL,60,
api.wait_update()classVolatilityTiming:波动率时机选择def__init__(self,low_vol_threshold
3,high_vol_threshold
0.
: 初始化 参数: low_vol_threshold: 低波动率分位数阈值 high_vol_threshold: 高波动率分位数阈值 self.low_vol_thresholdlow_vol_threshold self.high_vol_thresholdhigh_vol_thresholddefassess_timing(self,df,window
: 评估交易时机 参数: df: K线数据 window: 窗口大小 returnsdf[close].pct_change()volatilityreturns.rolling(window).std()# 计算波动率分位数vol_percentilevolatility.rolling(window*
.apply(lambdax:pd.Series(x).rank(pctTrue).iloc[-1]iflen(x)0else
0.
# 判断时机timingpd.Series(normal,indexdf.index)timing[vol_percentileself.low_vol_threshold]good# 低波动好时机timing[vol_percentileself.high_vol_threshold]bad# 高波动差时机returntiming,volatility,vol_percentile# 使用示例timing_managerVolatilityTiming(low_vol_threshold
3,high_vol_threshold
0.
timing,volatility,vol_percentiletiming_manager.assess_timing(klines)print(波动率时机选择:)timing_countstiming.value_counts()forstate,countintiming_counts.items():print(f{state}:{count}({count/len(timing):.2%}))api.close()
时间窗口优化
1 最佳交易时段#!/usr/bin/env python# -*- coding: utf-8 -*- 功能最佳交易时段分析 说明本代码仅供学习参考 importpandasaspdimportnumpyasnpfromtqsdkimportTqApi,TqAuth apiTqApi(authTqAuth(快期账户,快期密码))SYMBOLSHFE.rb2510klinesapi.get_kline_serial(SYMBOL,60,
# 1分钟K线api.wait_update()defanalyze_trading_hours(df): 分析交易时段表现 参数: df: K线数据需要包含时间戳 # 提取小时ifdatetimeindf.columns:df[hour]pd.to_datetime(df[datetime]).dt.hourelse:# 如果没有datetime列使用索引df[hour]df.index%24# 简化处理# 计算各时段的指标returnsdf[close].pct_change()hourly_statsdf.groupby(hour).agg({volume:[mean,sum],close:lambdax:returns[x.index].mean()iflen(returns[x.index])0else0})hourly_stats.columns[avg_volume,total_volume,avg_return]# 计算流动性评分hourly_stats[liquidity_score](hourly_stats[avg_volume]/hourly_stats[avg_volume].max()*
7(1-abs(hourly_stats[avg_return])/abs(hourly_stats[avg_return]).max())*
0.
returnhourly_stats.sort_values(liquidity_score,ascendingFalse)# 分析交易时段hourly_statsanalyze_trading_hours(klines)print(最佳交易时段按流动性评分:)print(hourly_stats.head(
)api.close()
综合时机选择
1 多因素时机选择#!/usr/bin/env python# -*- coding: utf-8 -*- 功能综合时机选择 说明本代码仅供学习参考 importpandasaspdimportnumpyasnpfromtqsdkimportTqApi,TqAuthclassComprehensiveTiming:综合时机选择def__init__(self):初始化passdefassess_timing(self,df,current_index): 综合评估交易时机 参数: df: K线数据 current_index: 当前索引 ifcurrent_index20:returnFalse,{}window20#
流动性评估volumedf[volume].iloc[current_index]avg_volumedf[volume].iloc[current_index-window:current_index].mean()volume_scoremin(volume/avg_volume,
2.
/
0# 归一化到
#
波动率评估returnsdf[close].pct_change()volatilityreturns.iloc[current_index-window:current_index].std()avg_volatilityreturns.rolling(window*
.std().iloc[current_index]vol_score1-min(volatility/(avg_volatility1e-
,
2.
/
0#
价差评估spread(df[high].iloc[current_index]-df[low].iloc[current_index])/df[close].iloc[current_index]avg_spread((df[high]-df[low])/df[close]).iloc[current_index-window:current_index].mean()spread_score1-min(spread/(avg_spread1e-
,
2.
/
0# 综合评分composite_scorevolume_score*
4vol_score*
3spread_score*
3# 判断是否适合交易is_good_timingcomposite_score
6factors{volume_score:volume_score,vol_score:vol_score,spread_score:spread_score,composite_score:composite_score}returnis_good_timing,factors# 使用示例apiTqApi(authTqAuth(快期账户,快期密码))SYMBOLSHFE.rb2510klinesapi.get_kline_serial(SYMBOL,60,
api.wait_update()timing_managerComprehensiveTiming()good_timings[]foriinrange(20,len(klines)):is_good,factorstiming_manager.assess_timing(klines,i)ifis_good:good_timings.append((i,factors))print(f找到{len(good_timings)}个良好交易时机)print(f\n前5个时机:)fori,(idx,factors)inenumerate(good_timings[:5],
:print(f{i}. 位置{idx}, 综合评分:{factors[composite_score]:.3f})api.close()
八、
常见问题Q1: 交易时机选择一定重要吗A: 重要特别是大单交易时机影响很大高频交易时机至关重要滑点敏感需要选择好时机成本控制时机影响交易成本Q2: 如何平衡时机选择和信号执行A: 建议设置时机等待时间上限优先级信号 时机使用限价单等待好时机考虑机会成本Q3: 时机选择会增加延迟吗A: 可能但可以设置最大等待时间使用异步执行并行评估多个时机优化时机判断逻辑
九、
总结要点说明流动性评估评估市场流动性水平波动率过滤避开高波动时段时间窗口选择最佳交易时段综合评估多因素综合判断时机执行平衡时机和信号下一步学习建议学习订单薄深度分析研究TWAP/VWAP算法探索机器学习时机预测学习实时时机优化免责声明本文仅供学习交流使用不构成任何投资建议。
期货交易有风险入市需谨慎。
更多资源天勤量化官网https://www.shinnytech.comGitHub开源地址https://github.com/shinnytech/tqsdk-python官方文档https://doc.shinnytech.com/tqsdk/latest