동적 이동 평균 교차 추세 추종 전략

SMA MA TP SL
생성 날짜: 2024-12-27 15:08:40 마지막으로 수정됨: 2024-12-27 15:08:40
복사: 4 클릭수: 398
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

동적 이동 평균 교차 추세 추종 전략

개요

이 전략은 이중 이동 평균 교차 신호에 기초한 추세 추적 시스템으로, 동적 손절매 및 손절매 메커니즘과 결합되었습니다. 이 전략은 5기간과 12기간 단순 이동 평균(SMA)을 사용하여 거래 신호를 생성하고, 이익실현 및 손절매 수준을 동적으로 조정하여 위험-수익 비율을 최적화합니다. 초기 이익 실현은 10%로 설정되고 손절매는 5%로 설정됩니다. 가격이 유리한 방향으로 움직이면 이익 실현 수준을 20%로 조정하고 손절매를 2.5%로 조입니다. 이익을 보호하기 위해서.

전략 원칙

이 전략의 핵심 논리는 빠르게 움직이는 평균(5개 기간)과 느리게 움직이는 평균(12개 기간)의 교차 관계에 기초합니다. 빠른 선이 아래에서 위로 느린 선을 교차하면, 시스템은 롱 신호를 생성하고 포지션을 엽니다. 빠른 선이 위에서 아래로 느린 선을 교차하면 시스템은 포지션을 닫습니다. 이 전략의 독특성은 역동적인 위험 관리 메커니즘에 있습니다. 포지션이 확립되면 시스템은 실시간으로 가격 추세를 모니터링하고 가격 변화에 따라 이익 실현 및 손절 수준을 동적으로 조정하여 위험을 제어하면서 이익을 극대화합니다. .

전략적 이점

  1. 이 시스템은 고전적인 이중 이동 평균 교차 전략을 채택하여 신호가 명확하고 이해하기 쉬우며 실행하기 쉽습니다.
  2. 동적 손절매 및 손절매 메커니즘은 실현된 이익을 효과적으로 보호하고 인출을 방지할 수 있습니다.
  3. 전략 매개변수는 강력한 적응력으로 다양한 시장 특성에 따라 유연하게 조정 가능합니다.
  4. 위험 관리 메커니즘이 완벽하여 단일 거래의 위험을 효과적으로 제어할 수 있습니다.
  5. 코드 구조가 명확하고 유지 관리 및 최적화가 쉽습니다.

전략적 위험

  1. 변동성이 큰 시장은 잘못된 신호를 생성하여 잦은 거래로 이어질 수 있습니다.
  2. 급격한 반전으로 큰 폭의 반등이 발생할 수 있습니다.
  3. 잘못된 매개변수 설정은 전략 성능에 영향을 미칠 수 있습니다.
  4. 시장 유동성이 부족하면 손절매 실행에 영향을 미칠 수 있습니다. 위험 관리를 위해 다음과 같은 조치가 권장됩니다.
  • 트렌드 필터 추가
  • 최적화 매개변수 선택
  • 시장 유동성 실시간 모니터링
  • 건전한 기금관리체계 구축

전략 최적화 방향

  1. 충격 시장 신호를 필터링하기 위한 추세 강도 지표 도입
  2. 신호 안정성을 개선하려면 볼륨 요소를 추가하는 것을 고려하세요
  3. 위험 대비 수익률 비율을 개선하기 위해 손절매 및 손절매 매개변수를 최적화합니다.
  4. 시장 변동성 적응 메커니즘 추가
  5. 창고 관리 시스템 개선

요약하다

이 전략은 고전적인 이동평균선 교차 신호와 혁신적인 동적 위험 관리 메커니즘을 결합하여 추세를 효과적으로 파악하고 위험을 동적으로 제어합니다. 전략 설계 개념은 명확하고, 구현 방법은 간결하고 효과적이며, 실용성과 확장성이 좋습니다. 이 전략은 지속적인 최적화와 개선을 통해 실제 거래에서 안정적인 수익 실적을 달성할 것으로 기대됩니다.

전략 소스 코드
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("My Moving Average Crossover Strategy with Take Profit and Stop Loss", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
//risk_free_rate = float(request.security("IRUS", "D", close)/request.security("IRUS", "D", close[1]) - 1  ))




// MA periods
fastLength = input.int(5, title="Fast MA Length")
slowLength = input.int(12, title="Slow MA Length")




// Take Profit and Stop Loss
takeProfitLevel = input(10, title="Take Profit (пункты)") // Take profit % from the last price
stopLossLevel = input(5, title="Stop Loss (пункты)") // Stop loss  % from the last price
takeProfitLevel_dyn = input(20, title="Dynamic Take Profit (пункты)") // Move TP if current_price higher buy_px
stopLossLevel_dyn =  input(2.5, title="Dynamic Stop Loss (пункты)") // S Move SL if current_price higher buy_px


// Вычисление скользящих средних
fastMA = ta.sma(close, fastLength)
slowMA= ta.sma(close, slowLength)


// Conditions for Sell and Buy
longCondition = ta.crossover (fastMA, slowMA) // покупаем, если короткая MA персекает длинную снизу-вверх
shortCondition = ta.crossunder(fastMA, slowMA) // продаем, если короткая MA персекает длинную сверху-вниз




// Buy position condition
if (longCondition)
    strategy.entry("Buy", strategy.long)






// Dynamic TP SL leveles
takeProfitPrice = strategy.position_avg_price * (1+ takeProfitLevel / 100)
stopLossPrice = strategy.position_avg_price * (1-stopLossLevel / 100)


entryPrice = strategy.position_avg_price




if (strategy.position_size > 0) // если есть открытая позиция




    // takeProfitPrice := entryPrice * (1+ takeProfitLevel / 100)
    // stopLossPrice := entryPrice * (1-stopLossLevel / 100)


    // // Перемещение Stop Loss и Take Profit
    if (close > entryPrice)
   
        takeProfitPrice := close * (1+ takeProfitLevel_dyn / 100)
        stopLossPrice := close * (1- stopLossLevel_dyn/ 100)






if (shortCondition)
    strategy.close("Buy")




strategy.exit("Take Profit/Stop loss", "Buy", limit=takeProfitPrice, stop=stopLossPrice)


// Drawing MA lines
plot(fastMA, color=color.blue, title="Fast Moving Average")
plot(slowMA, color=color.orange, title="Slow Moving Average")




// Визуализация
plot(longCondition ? na : takeProfitPrice, title="Take Profit Level", color=color.green, linewidth=1, style=plot.style_line)
plot(longCondition ? na: stopLossPrice, title="Stop Loss Level", color=color.red, linewidth=1, style=plot.style_line)