
다이내믹 피보나치 리트랙 트렌드 트래킹 정량화 전략은 피보나치 리트랙 레벨을 기반으로 한 기술 분석 거래 시스템으로, 트렌드 시장에서 잠재적인 구매 및 판매 신호를 식별하기 위해 특별히 설계되었다. 이 전략은 가격의 고위점과 낮은점 사이의 피보나치 리트랙 레벨을 계산하여 이러한 수준을 잠재적인 지원 및 저항 영역으로 삼고, 가격이 이러한 핵심 수준과 상호 작용할 때 거래 신호를 발생시킨다. 전략의 핵심 장점은 유연성으로, 거래자가 시장 상황에 따라 트렌드 방향을 선택하도록 허용하며, 시장 상황 (上下或上下) 에 따라 진입 레벨, 정지 및 중단 변수를 정의하여 다양한 시장 환경과 위험과 선호에 적응한다.
이 전략의 작동 원리는 금융 시장에서 널리 사용되는 수학 관계인 피보나치 수열의 응용을 중심으로 펼쳐진다. 구체적으로 구현하는 단계는 다음과 같다:
회귀 분석: 전략은 사용자 정의 회귀 주기 (설정 144주기) 에서 가장 높은 가격과 가장 낮은 가격을 먼저 식별하여 피보나치 회귀 수준을 계산하는 기초로 사용한다.
방향 선택: 사용자가 선택한 피보나치 방향 ((” 위에서 아래로” 또는 “아래에서 위로”) 에 따라, 전략은 다른 계산 방법을 사용합니다. 만약 “ 위에서 아래로”를 선택하면, 가장 높은 지점은 0% 수준으로 설정하고, 가장 낮은 지점은 100% 수준으로 설정합니다. 만약 “ 아래에서 위로 “를 선택하면, 반대로 니다.
수평 계산: 식별된 높고 낮은 점과 선택된 방향에 따라 전략은 4개의 중요한 피보나치 회귀 수준을 계산한다: 23.6%, 38.2%, 50% 및 61.8%
신호 생성:
위험 관리: 전략은 거래 신호가 발생했을 때 자동으로 스톱과 스톱을 설정합니다. 기본 스톱은 24 포인트, 스톱은 4 포인트이며, syminfo.mintick을 통해 10으로 가격 전환합니다.
시각화: 전략은 모든 피보나치 레벨, 최고점과 최저점, 그리고 매매 신호를 도표에 그리며 직관적인 시각적 분석을 제공합니다.
유연성: 이 전략은 사용자가 현재 시장 추세에 따라 피보나치 방향을 선택할 수 있도록 허용하며, 상승 추세와 하향 추세 모두 효과적으로 적용할 수 있으며, 전략의 유연성과 유연성을 강화한다.
사용자 정의: 사용자가 개인 거래 스타일과 위험 선호도에 따라 개인화 된 전략을 향상시키기 위해 입문 레벨, 회귀 사이클, 중지 및 중단 변수를 사용자 정의 할 수 있습니다.
기술 기반이 튼튼하다: 전략은 기술 분석 분야에서 견고한 이론 기반과 실무 검증이있는 널리 인정 된 피보나치 회귀 이론에 기반하여 전략의 신뢰성을 강화합니다.
시각적 도움의 명확성: 피보나치 레벨, 최고, 최저, 거래 신호를 차트에 직관적으로 표시함으로써 거래자는 시장 구조와 전략 논리를 더 쉽게 이해하고 의사 결정 과정을 지원할 수 있습니다.
리스크 관리 통합: 전략 내장 스톱 스톱 손실 메커니즘, 거래마다 자동으로 리스크 매개 변수를 설정합니다. 이는 일관된 리스크 관리 규칙을 유지하고 자금을 보호하는 데 도움이됩니다.
실시간 동적 계산: 전략은 피보나치 레벨을 지속적으로 업데이트하여, 계산이 항상 최근의 하위/고위점을 기반으로 하고, 분석은 항상 현재 시장 조건과 관련되어 있다.
회전주기 민감성: 전략은 회전주기를 기반으로 고고 낮은 시점을 결정하며, 다른 회전주기는 현저하게 다른 결과를 초래할 수 있습니다. 너무 짧은 회전은 너무 많은 잡음 신호를 유발할 수 있으며, 너무 긴 회전은 중요한 시장 전환점을 놓칠 수 있습니다. 해결 방법: 다양한 회전주기를 회전하여 특정 시장과 시간 프레임에 대한 최적의 설정을 찾는 것이 좋습니다.
흔들리는 시장에서의 가짜 신호: 가로 또는 흔들리는 시장에서 가격이 피보나치 수준을 자주 통과하여 거래 신호를 과도하게 생성하여 거래 비용을 증가시키고 지속적인 손실을 초래할 수 있습니다. 해결 방법: 트렌드 확인 지표 (예를 들어 이동 평균 또는 ADX) 와 같은 추가 필터 조건을 추가하는 것을 고려하여 가짜 신호를 줄이십시오.
고정 점수 스톱 스톱의 한계: 전략은 고정 점수를 스톱 스톱으로 사용하며, 이는 모든 시장 조건에 적합하지 않을 수 있으며, 특히 변동성이 변할 때 적합하지 않습니다. 해결 방법: 현재 시장의 변동성에 맞게 ATR ((평균 실제 범위) 를 기반으로 한 동적 스톱 스톱을 사용하는 것을 고려하십시오.
단일 지표 의존: 다른 중요한 시장 요소와 지표를 무시하여 거래 결정을 내리는 피보나치 회수에만 의존하여 신호 품질이 떨어질 수 있습니다. 해결 방법: 전략을 다른 기술 지표 또는 가격 행동 분석과 결합하여 다중 확인 시스템을 구축하십시오.
트렌드 전환 인식 지연: 전략은 트렌드 전환 시 느리게 반응할 수 있는데, 이는 과거의 하위/고위 계산 수준에 기반하기 때문이다. 해결 방법: 회귀 주기를 줄이거나 동력 지표와 같은 트렌드 전환 미리 경고 메커니즘을 추가한다.
통합 다중 시간 프레임 분석: 현재 전략은 단일 시간 프레임에서만 작동합니다. 예를 들어, 더 큰 시간 프레임에서 트렌드 방향을 확인한 다음 더 작은 시간 프레임에서 입문 신호를 실행하여 전략의 안정성을 향상시키는 다중 시간 프레임 분석을 통합하는 것이 고려 될 수 있습니다.
다이내믹 리스크 관리 도입: 고정 점수의 스톱 스톱 로드를 ATR 기반의 다이내믹 파라미터로 대체하여 리스크 관리가 시장의 변동성에 적응할 수 있도록 한다. 이유: ATR은 시장의 변동성을 측정할 수 있으며, 높은 변동성에서는 자동으로 스톱 로드 범위를 확장하고, 낮은 변동성에서는 좁혀 시장 실정에 더 적합하다.
거래량 확인이 추가: 신호 생성 시 거래량 분석을 추가하여 가격 돌파구가 충분한 거래량에 의해 뒷받침되는지 확인한다. 이유: 거래량이 뒷받침되는 돌파구가 더 신뢰할 수 있고, 가짜 돌파구로 인한 손실이 줄어들다.
적응형 피보나치 계산을 구현: 고정된 회귀주기를 기반으로 하는 것이 아니라, 시장의 변동성에 따라 회귀주기를 자동으로 조정하여, 높은 변동성이 있을 때 더 긴 주기를 사용하고, 낮은 변동성이 있을 때 더 짧은 주기를 사용한다. 이유: 이 적응형 방법은 진정한 시장 전환점을 더 잘 포착할 수 있다.
시장 상태 분류기를 추가: 전략에 현재 시장 상태를 식별할 수 있는 기능을 추가합니다. (트렌드, 평형 또는 전환) 다른 시장 상태에 따라 다른 거래 규칙을 사용합니다. 이유: 다른 시장 상태는 다른 거래 전략에 적합하며, 추세 시장은 추적에 적합하며, 평형 시장은 범위 거래에 적합합니다.
진입 시기를 최적화: 현재 기초에, 그래픽 형태 또는 가격 행동 분석을 추가하여 피보나치 수준 근처에서 더 정확한 진입 시기를 찾을 수 있습니다. 이유: 이것은 진입의 정확도를 높이고, 위험과 이익의 비율을 향상시킬 수 있습니다.
다이내믹 피보나치 리트랙 트렌드 추적량화 전략은 클래식 기술 분석 이론에 기반한 체계화된 거래 방법이며, 피보나치 리트랙 레벨의 지지와 저항의 역할을 식별함으로써 거래자에게 객관적인 입시 신호와 위험 관리 프레임 워크를 제공합니다. 이 전략의 주요 장점은 다양한 시장 환경에 따라 변수 설정을 조정할 수 있는 그것의 적응성과 사용자 정의입니다. 그러나, 그것은 또한 몇 가지 과제에 직면합니다.
/*backtest
start: 2025-05-18 00:00:00
end: 2025-05-19 16:00:00
period: 2m
basePeriod: 2m
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy("简单斐波那契回撤策略", overlay=true, initial_capital=1000,default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// 输入回看周期以识别高点和低点
lookback = input.int(144, title="回看周期", minval=10)
// 输入选择斐波那契计算方向
fib_direction = input.string(title="斐波那契方向", defval="从上到下", options=["从上到下", "从下到上"])
// 输入斐波那契水平
fib_level_236 = input.float(0.236, title="斐波那契 23.6% 水平")
fib_level_382 = input.float(0.382, title="斐波那契 38.2% 水平")
fib_level_50 = input.float(0.5, title="斐波那契 50% 水平")
fib_level_618 = input.float(0.618, title="斐波那契 61.8% 水平")
// 输入选择买入和卖出信号的水平
buy_entry_level = input.string(title="买入入场水平", defval="斐波那契 61.8%", options=["斐波那契 23.6%", "斐波那契 38.2%", "斐波那契 50%", "斐波那契 61.8%"])
sell_entry_level = input.string(title="卖出入场水平", defval="斐波那契 38.2%", options=["斐波那契 23.6%", "斐波那契 38.2%", "斐波那契 50%", "斐波那契 61.8%"])
// 输入止盈和止损(以点数为单位)
take_profit_pips = input.int(24, title="止盈(点数)")
stop_loss_pips = input.int(4, title="止损(点数)")
// 识别回看周期内的高点和低点
highestHigh = ta.highest(high, lookback)
lowestLow = ta.lowest(low, lookback)
// 根据选择的方向计算斐波那契水平
var float fib_0 = na
var float fib_100 = na
var float fib_236 = na
var float fib_382 = na
var float fib_50 = na
var float fib_618 = na
if fib_direction == "从上到下"
fib_0 := highestHigh
fib_100 := lowestLow
fib_236 := highestHigh - (highestHigh - lowestLow) * fib_level_236
fib_382 := highestHigh - (highestHigh - lowestLow) * fib_level_382
fib_50 := highestHigh - (highestHigh - lowestLow) * fib_level_50
fib_618 := highestHigh - (highestHigh - lowestLow) * fib_level_618
else
fib_0 := lowestLow
fib_100 := highestHigh
fib_236 := lowestLow + (highestHigh - lowestLow) * fib_level_236
fib_382 := lowestLow + (highestHigh - lowestLow) * fib_level_382
fib_50 := lowestLow + (highestHigh - lowestLow) * fib_level_50
fib_618 := lowestLow + (highestHigh - lowestLow) * fib_level_618
// 根据用户输入确定买入和卖出信号的水平
var float buy_fib_level = na
var float sell_fib_level = na
if buy_entry_level == "斐波那契 23.6%"
buy_fib_level := fib_236
if buy_entry_level == "斐波那契 38.2%"
buy_fib_level := fib_382
if buy_entry_level == "斐波那契 50%"
buy_fib_level := fib_50
if buy_entry_level == "斐波那契 61.8%"
buy_fib_level := fib_618
if sell_entry_level == "斐波那契 23.6%"
sell_fib_level := fib_236
if sell_entry_level == "斐波那契 38.2%"
sell_fib_level := fib_382
if sell_entry_level == "斐波那契 50%"
sell_fib_level := fib_50
if sell_entry_level == "斐波那契 61.8%"
sell_fib_level := fib_618
// 将点数转换为价格单位(假设1点 = 0.0001,适用于如EURUSD的货币对)
pip_value = syminfo.mintick * 10
take_profit = take_profit_pips * pip_value
stop_loss = stop_loss_pips * pip_value
// 交易信号
var bool longSignal = na
var bool shortSignal = na
if fib_direction == "从上到下"
longSignal := ta.crossover(close, buy_fib_level) and close > buy_fib_level
shortSignal := ta.crossunder(close, sell_fib_level) and close < sell_fib_level
else
longSignal := ta.crossover(close, buy_fib_level) and close > buy_fib_level
shortSignal := ta.crossunder(close, sell_fib_level) and close < sell_fib_level
// 根据信号执行交易,设置止盈和止损
if (longSignal)
strategy.entry("多头", strategy.long, comment="买入")
strategy.exit("止盈/止损", "多头", limit=close + take_profit, stop=close - stop_loss)
if (shortSignal)
strategy.entry("空头", strategy.short, comment="卖出")
strategy.exit("止盈/止损", "空头", limit=close - take_profit, stop=close + stop_loss)
// 绘制斐波那契水平
plot(fib_0, title="斐波那契 0%", color=color.blue, linewidth=1, style=plot.style_line)
plot(fib_236, title="斐波那契 23.6%", color=color.green, linewidth=1, style=plot.style_line)
plot(fib_382, title="斐波那契 38.2%", color=color.green, linewidth=1, style=plot.style_line)
plot(fib_50, title="斐波那契 50%", color=color.red, linewidth=1, style=plot.style_line)
plot(fib_618, title="斐波那契 61.8%", color=color.green, linewidth=1, style=plot.style_line)
plot(fib_100, title="斐波那契 100%", color=color.blue, linewidth=1, style=plot.style_line)
// 为斐波那契水平创建带有白色文本的标签
var label fibLabel0 = na
var label fibLabel236 = na
var label fibLabel382 = na
var label fibLabel50 = na
var label fibLabel618 = na
var label fibLabel100 = na
if (na(fibLabel0))
fibLabel0 := label.new(bar_index, fib_0, text="斐波那契 0%", color=na, textcolor=color.white, style=label.style_label_right, yloc=yloc.price)
fibLabel236 := label.new(bar_index, fib_236, text="斐波那契 23.6%", color=na, textcolor=color.white, style=label.style_label_right, yloc=yloc.price)
fibLabel382 := label.new(bar_index, fib_382, text="斐波那契 38.2%", color=na, textcolor=color.white, style=label.style_label_right, yloc=yloc.price)
fibLabel50 := label.new(bar_index, fib_50, text="斐波那契 50%", color=na, textcolor=color.white, style=label.style_label_right, yloc=yloc.price)
fibLabel618 := label.new(bar_index, fib_618, text="斐波那契 61.8%", color=na, textcolor=color.white, style=label.style_label_right, yloc=yloc.price)
fibLabel100 := label.new(bar_index, fib_100, text="斐波那契 100%", color=na, textcolor=color.white, style=label.style_label_right, yloc=yloc.price)
else
label.set_xy(fibLabel0, bar_index, fib_0)
label.set_xy(fibLabel236, bar_index, fib_236)
label.set_xy(fibLabel382, bar_index, fib_382)
label.set_xy(fibLabel50, bar_index, fib_50)
label.set_xy(fibLabel618, bar_index, fib_618)
label.set_xy(fibLabel100, bar_index, fib_100)
// 绘制信号
plotshape(series=longSignal, location=location.belowbar, color=color.green, style=shape.labelup, title="买入信号", text="买入")
plotshape(series=shortSignal, location=location.abovebar, color=color.red, style=shape.labeldown, title="卖出信号", text="卖出")
// 绘制最高点和最低点
plot(highestHigh, title="最高点", color=color.purple, linewidth=2, offset=-lookback)
plot(lowestLow, title="最低点", color=color.purple, linewidth=2, offset=-lookback)