동적 피보나치 수정 추세 추종 양적 전략

FIBONACCI RETRACEMENT TA RSI MA
생성 날짜: 2025-05-26 16:12:41 마지막으로 수정됨: 2025-05-26 16:12:41
복사: 0 클릭수: 309
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

동적 피보나치 수정 추세 추종 양적 전략 동적 피보나치 수정 추세 추종 양적 전략

개요

다이내믹 피보나치 리트랙 트렌드 트래킹 정량화 전략은 피보나치 리트랙 레벨을 기반으로 한 기술 분석 거래 시스템으로, 트렌드 시장에서 잠재적인 구매 및 판매 신호를 식별하기 위해 특별히 설계되었다. 이 전략은 가격의 고위점과 낮은점 사이의 피보나치 리트랙 레벨을 계산하여 이러한 수준을 잠재적인 지원 및 저항 영역으로 삼고, 가격이 이러한 핵심 수준과 상호 작용할 때 거래 신호를 발생시킨다. 전략의 핵심 장점은 유연성으로, 거래자가 시장 상황에 따라 트렌드 방향을 선택하도록 허용하며, 시장 상황 (上下或上下) 에 따라 진입 레벨, 정지 및 중단 변수를 정의하여 다양한 시장 환경과 위험과 선호에 적응한다.

전략 원칙

이 전략의 작동 원리는 금융 시장에서 널리 사용되는 수학 관계인 피보나치 수열의 응용을 중심으로 펼쳐진다. 구체적으로 구현하는 단계는 다음과 같다:

  1. 회귀 분석: 전략은 사용자 정의 회귀 주기 (설정 144주기) 에서 가장 높은 가격과 가장 낮은 가격을 먼저 식별하여 피보나치 회귀 수준을 계산하는 기초로 사용한다.

  2. 방향 선택: 사용자가 선택한 피보나치 방향 ((” 위에서 아래로” 또는 “아래에서 위로”) 에 따라, 전략은 다른 계산 방법을 사용합니다. 만약 “ 위에서 아래로”를 선택하면, 가장 높은 지점은 0% 수준으로 설정하고, 가장 낮은 지점은 100% 수준으로 설정합니다. 만약 “ 아래에서 위로 “를 선택하면, 반대로 니다.

  3. 수평 계산: 식별된 높고 낮은 점과 선택된 방향에 따라 전략은 4개의 중요한 피보나치 회귀 수준을 계산한다: 23.6%, 38.2%, 50% 및 61.8%

  4. 신호 생성:

    • 구매 신호: 가격이 사용자가 선택한 피보나치 레벨 (기본 61.8%) 을 넘어서 그 레벨보다 높은 마감 가격으로 트리거됩니다.
    • 판매 신호: 가격이 사용자가 선택한 피보나치 레벨 (기본 38.2%) 을 넘어서 그 수준보다 낮은 가격으로 종결하면 촉발됩니다.
  5. 위험 관리: 전략은 거래 신호가 발생했을 때 자동으로 스톱과 스톱을 설정합니다. 기본 스톱은 24 포인트, 스톱은 4 포인트이며, syminfo.mintick을 통해 10으로 가격 전환합니다.

  6. 시각화: 전략은 모든 피보나치 레벨, 최고점과 최저점, 그리고 매매 신호를 도표에 그리며 직관적인 시각적 분석을 제공합니다.

전략적 이점

  1. 유연성: 이 전략은 사용자가 현재 시장 추세에 따라 피보나치 방향을 선택할 수 있도록 허용하며, 상승 추세와 하향 추세 모두 효과적으로 적용할 수 있으며, 전략의 유연성과 유연성을 강화한다.

  2. 사용자 정의: 사용자가 개인 거래 스타일과 위험 선호도에 따라 개인화 된 전략을 향상시키기 위해 입문 레벨, 회귀 사이클, 중지 및 중단 변수를 사용자 정의 할 수 있습니다.

  3. 기술 기반이 튼튼하다: 전략은 기술 분석 분야에서 견고한 이론 기반과 실무 검증이있는 널리 인정 된 피보나치 회귀 이론에 기반하여 전략의 신뢰성을 강화합니다.

  4. 시각적 도움의 명확성: 피보나치 레벨, 최고, 최저, 거래 신호를 차트에 직관적으로 표시함으로써 거래자는 시장 구조와 전략 논리를 더 쉽게 이해하고 의사 결정 과정을 지원할 수 있습니다.

  5. 리스크 관리 통합: 전략 내장 스톱 스톱 손실 메커니즘, 거래마다 자동으로 리스크 매개 변수를 설정합니다. 이는 일관된 리스크 관리 규칙을 유지하고 자금을 보호하는 데 도움이됩니다.

  6. 실시간 동적 계산: 전략은 피보나치 레벨을 지속적으로 업데이트하여, 계산이 항상 최근의 하위/고위점을 기반으로 하고, 분석은 항상 현재 시장 조건과 관련되어 있다.

전략적 위험

  1. 회전주기 민감성: 전략은 회전주기를 기반으로 고고 낮은 시점을 결정하며, 다른 회전주기는 현저하게 다른 결과를 초래할 수 있습니다. 너무 짧은 회전은 너무 많은 잡음 신호를 유발할 수 있으며, 너무 긴 회전은 중요한 시장 전환점을 놓칠 수 있습니다. 해결 방법: 다양한 회전주기를 회전하여 특정 시장과 시간 프레임에 대한 최적의 설정을 찾는 것이 좋습니다.

  2. 흔들리는 시장에서의 가짜 신호: 가로 또는 흔들리는 시장에서 가격이 피보나치 수준을 자주 통과하여 거래 신호를 과도하게 생성하여 거래 비용을 증가시키고 지속적인 손실을 초래할 수 있습니다. 해결 방법: 트렌드 확인 지표 (예를 들어 이동 평균 또는 ADX) 와 같은 추가 필터 조건을 추가하는 것을 고려하여 가짜 신호를 줄이십시오.

  3. 고정 점수 스톱 스톱의 한계: 전략은 고정 점수를 스톱 스톱으로 사용하며, 이는 모든 시장 조건에 적합하지 않을 수 있으며, 특히 변동성이 변할 때 적합하지 않습니다. 해결 방법: 현재 시장의 변동성에 맞게 ATR ((평균 실제 범위) 를 기반으로 한 동적 스톱 스톱을 사용하는 것을 고려하십시오.

  4. 단일 지표 의존: 다른 중요한 시장 요소와 지표를 무시하여 거래 결정을 내리는 피보나치 회수에만 의존하여 신호 품질이 떨어질 수 있습니다. 해결 방법: 전략을 다른 기술 지표 또는 가격 행동 분석과 결합하여 다중 확인 시스템을 구축하십시오.

  5. 트렌드 전환 인식 지연: 전략은 트렌드 전환 시 느리게 반응할 수 있는데, 이는 과거의 하위/고위 계산 수준에 기반하기 때문이다. 해결 방법: 회귀 주기를 줄이거나 동력 지표와 같은 트렌드 전환 미리 경고 메커니즘을 추가한다.

전략 최적화 방향

  1. 통합 다중 시간 프레임 분석: 현재 전략은 단일 시간 프레임에서만 작동합니다. 예를 들어, 더 큰 시간 프레임에서 트렌드 방향을 확인한 다음 더 작은 시간 프레임에서 입문 신호를 실행하여 전략의 안정성을 향상시키는 다중 시간 프레임 분석을 통합하는 것이 고려 될 수 있습니다.

  2. 다이내믹 리스크 관리 도입: 고정 점수의 스톱 스톱 로드를 ATR 기반의 다이내믹 파라미터로 대체하여 리스크 관리가 시장의 변동성에 적응할 수 있도록 한다. 이유: ATR은 시장의 변동성을 측정할 수 있으며, 높은 변동성에서는 자동으로 스톱 로드 범위를 확장하고, 낮은 변동성에서는 좁혀 시장 실정에 더 적합하다.

  3. 거래량 확인이 추가: 신호 생성 시 거래량 분석을 추가하여 가격 돌파구가 충분한 거래량에 의해 뒷받침되는지 확인한다. 이유: 거래량이 뒷받침되는 돌파구가 더 신뢰할 수 있고, 가짜 돌파구로 인한 손실이 줄어들다.

  4. 적응형 피보나치 계산을 구현: 고정된 회귀주기를 기반으로 하는 것이 아니라, 시장의 변동성에 따라 회귀주기를 자동으로 조정하여, 높은 변동성이 있을 때 더 긴 주기를 사용하고, 낮은 변동성이 있을 때 더 짧은 주기를 사용한다. 이유: 이 적응형 방법은 진정한 시장 전환점을 더 잘 포착할 수 있다.

  5. 시장 상태 분류기를 추가: 전략에 현재 시장 상태를 식별할 수 있는 기능을 추가합니다. (트렌드, 평형 또는 전환) 다른 시장 상태에 따라 다른 거래 규칙을 사용합니다. 이유: 다른 시장 상태는 다른 거래 전략에 적합하며, 추세 시장은 추적에 적합하며, 평형 시장은 범위 거래에 적합합니다.

  6. 진입 시기를 최적화: 현재 기초에, 그래픽 형태 또는 가격 행동 분석을 추가하여 피보나치 수준 근처에서 더 정확한 진입 시기를 찾을 수 있습니다. 이유: 이것은 진입의 정확도를 높이고, 위험과 이익의 비율을 향상시킬 수 있습니다.

요약하다

다이내믹 피보나치 리트랙 트렌드 추적량화 전략은 클래식 기술 분석 이론에 기반한 체계화된 거래 방법이며, 피보나치 리트랙 레벨의 지지와 저항의 역할을 식별함으로써 거래자에게 객관적인 입시 신호와 위험 관리 프레임 워크를 제공합니다. 이 전략의 주요 장점은 다양한 시장 환경에 따라 변수 설정을 조정할 수 있는 그것의 적응성과 사용자 정의입니다. 그러나, 그것은 또한 몇 가지 과제에 직면합니다.

전략 소스 코드
/*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)