리소스 로딩... 로딩...

다중 EMA 크로스오버와 피보나치 확장 트렌드

저자:차오장, 날짜: 2024-07-29 16:42:56
태그:EMA

img

전반적인 설명

이 전략은 트렌드를 따르는 시스템으로, 여러 가지 기하급수적 이동 평균 (EMA) 크로스오버와 피보나치 연장 수준을 결합한다. 이 전략은 잠재적 인 트렌드 시작과 끝을 식별하기 위해 다른 기간의 EMA 간의 상호 작용을 활용하며, 수익 목표를 결정하기 위해 피보나치 연장 수준을 사용합니다. 이 전략은 또한 위험을 관리하고 이익을 보호하기 위해 특정 스톱 로스 규칙을 포함합니다.

전략 원칙

이 전략의 핵심은 트렌드의 시작과 종료를 포착하기 위해 여러 시간 프레임에 걸쳐 EMA 크로스오버를 사용하는 데 있습니다. 구체적으로 5 기간, 10 기간 및 30 기간 EMA를 사용합니다. 전략에는 네 가지 다른 입시 조건이 포함되어 있으며, 각각은 다른 시장 시나리오를 포착하도록 설계되었습니다.

  1. 첫 번째 입상 조건은 가격이 30주기 EMA를 만지거나 그 아래로 떨어지지만 그 위에 닫을 때 발생하며, 10주기 EMA는 5주기 EMA보다 높고, 30주기 EMA는 5주기 EMA보다 1% 낮습니다.

  2. 두 번째 입시 조건은 5주기 EMA가 30주기 EMA를 넘어서고, 30주기 EMA가 지난 6바에서 5주기 EMA를 넘어서면 발생한다.

  3. 세 번째 입시 조건은 이전 두 바의 최고가 각각의 5주기 EMA보다 낮고, 5주기 EMA는 10주기 EMA보다 낮고, 이전 바의 최고가 현재 종료보다 낮을 때 발생한다.

  4. 네 번째 입시 조건은 10주기 EMA가 30주기 EMA를 넘어섰을 때, 5주기 EMA가 지난 4바리 내에서 30주기 EMA를 넘어섰을 때, 10주기 EMA와 5주기 EMA의 현재 값이 이전 값보다 높을 때 발생한다.

스톱 로스 (stop loss) 를 위해 전략은 각기 다른 입시 조건에 대한 구체적인 규칙을 정합니다.

  • 첫 번째 조건에서는 30주기 EMA가 10주기 EMA를 넘으면 포지션이 종료됩니다.
  • 다른 조건의 경우, 포지션은 포지션 종료 가격이 이전 세 개의 바의 가장 낮은 하위값 아래로 떨어지면 종료됩니다.

이윤 목표는 0.618, 0.786, 1.0 및 1.618 레벨을 포함한 피보나치 연장 수준에 따라 설정됩니다. 전략은 특정 규칙에 따라이 수준에 도달하면 포지션을 닫습니다.

또한 이 전략에는 이윤 잠금 조건이 포함됩니다. 마지막 두 바의 최저가 5주기 EMA보다 높고 EMA가 상승 순서로 정렬되면 (5 > 10 > 30) 이윤을 잠금하기 위해 포지션은 닫습니다.

전략적 장점

  1. 여러 확인: 여러 EMA 및 입시 조건을 사용하여 전략은 트렌드의 시작과 지속을 더 정확하게 식별 할 수 있습니다. 이 여러 확인 메커니즘은 잘못된 신호를 줄이고 거래 정확성을 향상시킬 수 있습니다.

  2. 높은 적응력: 네 가지 다른 입시 조건은 전략이 다양한 시장 환경에 적응하여 빠른 브레이크 또는 느린 트렌드 형식으로 거래 기회를 포착 할 수 있습니다.

  3. 위험 관리: 전략에는 각 거래의 위험을 제어하는 데 도움이되는 특정 스톱 로스 규칙이 포함되어 있습니다. 다른 입시 조건이 다른 스톱 로스 전략에 대응하여 전략의 위험 관리에 중점을 두는 것을 나타냅니다.

  4. 명확한 수익 목표: 수익 목표로 피보나치 연장 수준을 사용하는 것은 거래자에게 명확한 출구 지점을 제공합니다. 이것은 조기 수익을 취하거나 지위를 너무 오래 유지하는 것을 피하는 데 도움이됩니다.

  5. 이윤 보호: 이윤 잠금 조건은 트렌드가 역전될 때 얻은 이윤을 보호하는 데 도움이됩니다. 많은 트렌드 다음 전략에서 종종 간과되는 중요한 측면입니다.

  6. 기술 지표의 조합: 전략은 EMA와 피보나치 도구를 결합하여 이 두 가지 인기있는 기술 분석 도구의 강점을 활용합니다.

전략 위험

  1. 과잉 거래: 여러 가지 입시 조건이 특히 매우 변동적인 시장에서 과잉 거래로 이어질 수 있습니다. 이것은 거래 비용을 증가시키고 더 많은 잘못된 신호로 이어질 수 있습니다.

  2. 매개 변수 민감성: 전략은 여러 고정 EMA 기간과 비율의 임계치를 사용합니다. 이러한 매개 변수는 다른 시장과 시간 프레임에 따라 조정해야 할 수도 있습니다. 그렇지 않으면 전략 성과가 좋지 않을 수 있습니다.

  3. 트렌드 의존성: 트렌드를 따르는 전략으로서, 범위 또는 변동 시장에서 성적이 좋지 않을 수 있습니다. 이러한 시장 환경에서 여러 가지 잘못된 신호와 작은 손실을 발생시킬 수 있습니다.

  4. 지연: EMA는 본질적으로 지연 지표입니다. 빠르게 변화하는 시장에서 전략은 트렌드 전환점을 제때 파악할 수 없을 수 있습니다.

  5. 복잡성: 전략의 여러 조건과 규칙은 그 복잡성을 증가시키고, 이해와 유지를 어렵게 할 수 있으며, 또한 과도한 적합성의 위험을 증가시킵니다.

전략 최적화 방향

  1. 동적 매개 변수 조정: 시장 변동성에 기초한 EMA 기간 및 기타 매개 변수를 동적으로 조정하는 적응 메커니즘을 도입하는 것을 고려하십시오. 이것은 다른 시장 환경에서 전략의 적응력을 향상시킬 수 있습니다.

  2. 부피 지표를 포함: 부피 분석을 결합하면 진입 및 출입 결정의 정확성을 향상시킬 수 있습니다. 예를 들어, 트렌드 강도를 확인하기 위해 진입 시 부피를 증가시키는 것이 필요합니다.

  3. 시장 환경 필터링: 트렌드 추적에 적합하지 않은 환경에서 거래를 중단하기 위해 ATR (평균 진정한 범위) 또는 변동성 지표를 사용하는 것과 같은 시장 환경 식별 메커니즘을 도입하십시오.

  4. 스톱 로스 메커니즘을 최적화: 고정 스톱 대신 후속 스톱을 사용하는 것을 고려하십시오. 이것은 이익을 보호 할 수 있으며 계속 성장 할 수 있습니다.

  5. 시간 필터링을 추가하십시오. 전략 안정성을 향상시킬 수있는 매우 변동성 또는 낮은 유동성 기간을 피하여 특정 기간에 거래를 제한하십시오.

  6. 머신러닝을 도입: 매개 변수 선택 및 입시 결정을 최적화하기 위해 머신러닝 알고리즘을 사용하여 전략의 적응력과 성능을 향상시킬 수 있습니다.

  7. 멀티 타임프레임 분석: 진입 결정의 정확성을 향상시키고 주요 트렌드에 반대되는 진입을 피하기 위해 더 긴 시간 프레임에서 트렌드 분석을 통합하십시오.

결론

이 다중 EMA 크로스오버와 피보나치 연장 트렌드 추적 전략은 여러 기술적 지표와 거래 개념을 결합한 포괄적인 거래 시스템을 보여줍니다. 여러 EMA 및 입시 조건을 사용하여 전략은 트렌드를 캡처하고 잘못된 신호를 줄이는 것 사이의 균형을 맞추려고 시도합니다. 피보나치 연장 레벨의 사용은 수익 목표를 설정하는 객관적 인 근거를 제공하며, 특정 스톱 로스 및 수익 잠금 규칙은 위험 관리에 대한 강조를 반영합니다.

이 전략은 여러 번의 확인과 높은 적응력으로 장점을 가지고 있지만, 매개 변수 선택에 대한 복잡성과 민감성 또한 특정 과제를 제기합니다. 전략의 안정성과 성능을 더욱 향상시키기 위해 동적 매개 변수 조정, 시장 환경 필터링 및 멀티 타임프레임 분석을 최적화 방향으로 도입하는 것이 고려 될 수 있습니다.

전체적으로, 이 전략은 트렌드 추적을 위한 흥미로운 틀을 제공하지만, 거래자는 그것을 실제 적용할 때 철저한 백테스팅과 매개 변수 최적화를 수행하고, 특정 시장과 거래 스타일에 따라 적절한 조정을 해야 한다. 지속적인 모니터링과 최적화를 통해, 이 전략은 효과적인 트렌드 추적 도구가 될 가능성이 있다.


/*backtest
start: 2024-06-01 00:00:00
end: 2024-06-30 23:59:59
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA Combined Strategy with Specific Stop Loss", overlay=true)

// Define the EMAs
ema30 = ta.ema(close, 30)
ema10 = ta.ema(close, 10)
ema5 = ta.ema(close, 5)

// Define the conditions for opening an order
open_condition1 = low <= ema30 and close > ema30  and ema10 > ema5 and ema30 * 1.01 < ema5
open_condition2 = ta.crossover(ema5, ema30) and (ta.crossover(ema30[1], ema5[1]) or ta.crossover(ema30[2], ema5[2]) or ta.crossover(ema30[3], ema5[3]) or ta.crossover(ema30[4], ema5[4])  or ta.crossover(ema30[5], ema5[5]) or ta.crossover(ema30[6], ema5[6]) )
open_condition3 = high[2] < ema5[2] and high[1] < ema5[1] and ema5 < ema10 and ema10 < ema30 and high[1] < close 
open_condition4 = ta.crossover(ema10, ema30) and (ta.crossover(ema5[0], ema30[0]) or ta.crossover(ema5[1], ema30[1]) or ta.crossover(ema10[2], ema30[2]) or ta.crossover(ema10[3], ema30[3])) and ema10[1] < ema10 and ema5[1] <ema5

// Calculate the lowest low of the previous two bars
lowest_low_prev_two_bars = ta.lowest(low, 3)

// Track the entry price and the lowest low of the previous two bars for open_condition3
var float entry_price = na
var float low_entry_price = na
var float entry_lowest_low1 = na
var float entry_lowest_low2 = na
var float entry_lowest_low3 = na
var float entry_lowest_low4 = na

var bool order1 = false
var bool order2 = false
var bool order3 = false
var bool order4 = false
// Fibonacci extension levels based on the last significant swing
var float fib_extension_level_0_618 = na
var float fib_extension_level_0_786 = na
var float fib_extension_level_1 = na
var float fib_extension_level_1_618 = na

    // Calculate Fibonacci extension levels
var float swing_low = na
var float swing_high = na
// Here we assume the latest swing low and swing high, adjust based on your logic
swing_low := ta.lowest(low, 20)
swing_high := ta.highest(high, 20)

// Open a long order when any of the conditions are met
if open_condition1 and not order2 and not order1 and not order3 and not order4
    strategy.entry("Long", strategy.long, comment="<ema30")
    entry_lowest_low1 := lowest_low_prev_two_bars
    low_entry_price := low
    fib_extension_level_0_618 := low_entry_price + (swing_high - swing_low) * 0.618
    fib_extension_level_0_786:= low_entry_price + (swing_high - swing_low) * 0.786
    fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1
    fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1.618
    entry_price := close
    order1 := true
if open_condition2 and not order2 and not order1 and not order3 and not order4
    strategy.entry("Long", strategy.long, comment="ema5xema30")
    entry_lowest_low2 := lowest_low_prev_two_bars
    low_entry_price := low
    fib_extension_level_0_618 := low_entry_price + (swing_high - swing_low) * 0.618
    fib_extension_level_0_786:= low_entry_price + (swing_high - swing_low) * 0.786
    fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1
    fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1.618
    entry_price := close
    order2 := true

if open_condition3 and not order2 and not order1 and not order3 and not order4
    strategy.entry("Long", strategy.long, comment="high<ema5")
    entry_price := close
    low_entry_price := low
    entry_lowest_low3 := lowest_low_prev_two_bars
    fib_extension_level_0_618 := low_entry_price + (swing_high - swing_low) * 0.618
    fib_extension_level_0_786:= low_entry_price + (swing_high - swing_low) * 0.786
    fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1
    fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1.618
    order3 := true

if open_condition4 and not order2 and not order1 and not order3 and not order4
    strategy.entry("Long", strategy.long, comment="high<ema5444")
    entry_price := close
    low_entry_price := low
    entry_lowest_low4 := lowest_low_prev_two_bars
    fib_extension_level_0_618 := low_entry_price + (swing_high - swing_low) * 0.618
    fib_extension_level_0_786:= low_entry_price + (swing_high - swing_low) * 0.786
    fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1
    fib_extension_level_1:= low_entry_price + (swing_high - swing_low) * 1.618
    order4 := true




// Set a stop loss only if the order was opened with the specified conditions
if (not na(entry_price))
    if order1
        if ta.crossover(ema30,ema10)
            strategy.close("Long", comment="stop loss1" )
            entry_price := na
            order1 := false
            low_entry_price := na


    if order2
        if close < entry_lowest_low2
            strategy.close("Long", comment="stop loss2" )
            entry_price := na
            order2 := false
            low_entry_price := na

    if order3
        if close < entry_lowest_low3
            strategy.close("Long", comment="stop loss3" )
            entry_price := na
            order3 := false
            low_entry_price := na

    if order4
        if close < entry_lowest_low4
            strategy.close("Long", comment="stop loss4" )
            entry_price := na
            order4 := false
            low_entry_price := na


    if   low[1] > ema5[1] and low > ema5  and ema5 > ema10 and ema10 > ema30 
        strategy.close("Long", comment="profit low > ema5")
        entry_price := na
        order1 := false
        order2 := false
        order3 := false
        order4 := false
        low_entry_price := na

    // Take profit at Fibonacci extension levels
    if high >= fib_extension_level_0_618 and close <= fib_extension_level_0_618
        strategy.close("Long", comment="at 0.618 Fib")
        entry_price := na
        order1 := false
        order2 := false
        order3 := false
        order4 := false
        low_entry_price := na

    if  high >= fib_extension_level_0_786 and close < fib_extension_level_0_786
        strategy.close("Long", comment="at 0.786 Fib")
        entry_price := na
        order1 := false
        order2 := false
        order3 := false
        order4 := false
        low_entry_price := na

    if  high >= fib_extension_level_1 and close < fib_extension_level_1
        strategy.close("Long", comment="at 1 Fib")
        entry_price := na
        order1 := false
        order2 := false
        order3 := false
        order4 := false
        low_entry_price := na
    if  high >= fib_extension_level_1_618
        strategy.close("Long", comment="at 1 Fib")
        entry_price := na
        order1 := false
        order2 := false
        order3 := false
        order4 := false
        low_entry_price := na


// Plot the EMAs for visual reference
plot(ema30, color=color.blue, title="EMA 30")
plot(ema10, color=color.orange, title="EMA 10")
plot(ema5, color=color.red, title="EMA 5")

관련

더 많은