
Fisher转换交叉策略是一种基于John Ehlers开发的Fisher变换指标的技术交易方法。该策略利用数学转换将价格数据转化为正态高斯分布,使市场转折点更加清晰,更容易识别。策略核心是基于两条线的交叉信号:Fisher线(主要转换价格值)和触发线(Fisher线的一个周期滞后)。当Fisher线向上穿越触发线且Fisher值小于1时,产生买入信号,表明可能开始出现看涨动量;当Fisher线向下穿越触发线且Fisher值大于1时,产生卖出信号,表明可能出现看跌反转。本策略每次只执行一笔交易,并且仅在K线收盘时确认入场和出场,以减少虚假信号。交易使用固定现金金额(₹20,000)进行,策略直接应用于价格图表上。Fisher线以绿色绘制,触发线以红色绘制,水平参考线设置在1级别,有助于视觉识别超买或强动量条件。
Fisher转换交叉策略的核心原理是利用Fisher变换将价格数据转换为正态分布。具体实现过程如下:
这种设计使策略能够捕捉市场动量的变化,特别是在价格反转的早期阶段。Fisher变换的数学特性使得市场转折点更加突出,有助于交易者提前识别潜在的反转机会。
Fisher转换交叉策略具有以下显著优势:
尽管Fisher转换交叉策略有许多优势,但也存在一些潜在风险:
为减轻这些风险,交易者可以考虑结合其他技术工具,如支撑和阻力水平、成交量分析或移动平均线,并实施适当的止损和止盈水平。
针对Fisher转换交叉策略,以下是几个可能的优化方向:
这些优化可以提高策略在不同市场条件下的适应性,减少假信号,并改善整体风险回报特性。
Fisher转换交叉策略是一种基于数学转换的动量交易系统,通过将价格数据转换为正态分布,使市场转折点更加清晰可辨。策略利用Fisher线和触发线的交叉作为交易信号,在Fisher线上穿触发线且Fisher值小于1时买入,在Fisher线下穿触发线且Fisher值大于1时卖出。策略的主要优势在于能够早期识别市场反转、提供清晰的交易规则、减少假信号,并适用于各种市场。然而,在横盘市场中可能产生假信号,存在参数敏感性,并且过度依赖单一指标可能忽略其他市场因素。优化方向包括动态参数调整、多时间框架确认、整合过滤器、动态仓位管理以及增强退出策略等。总体而言,Fisher转换交叉策略为交易者提供了一种基于数学原理的系统化方法,用于捕捉市场动量变化并识别潜在的交易机会,但需要谨慎应用并配合适当的风险管理措施。
/*backtest
start: 2024-08-05 00:00:00
end: 2025-08-03 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Fisher Crossover Strategy",
overlay=true,
default_qty_type=strategy.cash,
default_qty_value=20000,
calc_on_every_tick=false)
// Fisher Transform parameters
length = input.int(9, "Fisher Length")
// Calculate the raw value
value = 0.33 * 2 * ((close - ta.lowest(low, length)) / (ta.highest(high, length) - ta.lowest(low, length)) - 0.5)
value := value + 0.67 * nz(value[1])
// Fisher transform
fisher = 0.5 * math.log((1 + value) / (1 - value))
fisher := fisher + 0.5 * nz(fisher[1])
// Trigger line is previous Fisher value
trigger = nz(fisher[1])
// Conditions
longCondition = ta.crossover(fisher, trigger) and fisher < 1
exitCondition = ta.crossunder(fisher, trigger) and fisher > 1
// Ensure one trade at a time
inTrade = strategy.position_size != 0
// Entry and exit only at candle close
if barstate.isconfirmed
if (longCondition and not inTrade)
strategy.entry("Long", strategy.long, comment="Buy")
if (exitCondition and inTrade)
strategy.close("Long", comment="Exit")
// Plot Fisher & Trigger
plot(fisher, color=color.new(color.green, 0), title="Fisher")
plot(trigger, color=color.new(color.red, 0), title="Trigger")
// Reference line at 1 for clarity
hline(1, "Level 1", color=color.red)