트렌드를 따르는 전략

저자:차오장, 날짜: 2023-10-30 15:21:54
태그:

img

전반적인 설명

이 전략은 트렌드를 따라 트레일링 스톱 로스로 수익 논리를 사용하여 수익을 위해 지속적으로 트렌드를 타고 있습니다. 그것은 트렌드 방향을 결정하고 가격이 MA 라인을 통과 할 때 거래 신호를 생성하기 위해 이동 평균을 사용합니다. 긴 포지션을 입력 한 후 전략은 ATR 값을 기반으로 스톱 로스를 설정하고 트렌드를 따라 트레일링 스톱 로스로 로직을 조정합니다. 가격이 특정 수준으로 상승하면 일부 이익을 잠금하기 위해 부분 이익이 필요합니다.

전략 논리

  1. 사용자 입력에 기반한 백테스트 시작 및 정지 시간표를 설정합니다.

  2. 길고 짧은 스톱 가격과 후속 비율을 초기화합니다.

  3. 가격이 MA 라인을 넘어서면 장면을 입력합니다.

  4. ATR로 스톱 손실 거리를 계산하고 스톱 손실 가격을 설정합니다.

  5. 가격이 계속 상승하면서, 더 많은 수익을 확보하기 위해 손실을 멈추게 됩니다.

  6. 가격이 수익의 한계를 맞을 때, 부분적인 수익을 얻습니다.

  7. 가격이 MA 라인 아래로 넘어갈 때 마이너에 들어가세요.

  8. ATR로 스톱 손실 거리를 계산하고 스톱 손실 가격을 설정합니다.

  9. 가격이 계속 하락하면서, 더 많은 수익을 확보하기 위해 손실을 줄입니다.

  10. 가격이 수익의 한계를 맞을 때, 부분적인 수익을 얻습니다.

장점

  • 트레이닝 스톱 로스는 트렌드를 따라가면서 더 많은 수익을 얻을 수 있고 동시에 이익을 보호할 수 있습니다.

  • 동적 ATR 스톱 손실은 고정 스톱 손실보다 시장 변동에 더 잘 반응합니다.

  • 부분적으로 수익을 취하는 것은 수익을 확보하고 마감 위험을 줄이는 데 도움이 됩니다.

  • 단순하고 명확한 논리, 이해하기 쉽고 실행하기 쉽습니다.

위험성

  • 갑작스러운 트렌드 역전으로 인해 큰 손실이 발생할 수 있습니다.

  • ATR에 기반한 스톱 손실은 너무 민감하고 조기에 중단될 수 있습니다.

  • 부적절한 부분 수익률은 트렌드를 놓치고 손실을 증가시킬 수 있습니다.

  • 많은 매개 변수들이 최적화되어야 합니다. ATR 기간, 후속 비율, 이익 취득 비율과 같이요.

  • 전략은 MA와 ATR에만 의존합니다. 잘못된 신호가 발생할 수 있습니다.

최적화

  • MACD, KD와 같은 다른 지표를 추가하여 거래 신호를 필터하고 잘못된 MA 신호를 피하십시오.

  • 트렌드 강도에 기반한 동적 수익률을 고려해 봅시다.

  • 최적의 안정성을 위해 다른 ATR 기간을 테스트하거나 다른 지표를 사용하여 손실을 멈추십시오.

  • 기계 학습을 도입하여 자동으로 매개 변수를 최적화하고 동적으로 조정합니다.

  • 딥러닝 모델을 사용하여 트렌드를 감지하고 자동으로 신호를 생성합니다.

요약

이 전략은 트렌드를 따르고 드라우다운을 제어하기 위해 트레일링 스톱 로스, 동적 ATR 스톱 로스 및 부분 수익을 통합합니다. 그러나 간단한 트렌드 탐지 및 어려운 매개 변수 최적화와 같은 몇 가지 제한이 있습니다. 이것은 안정성과 수익성을 향상시키기 위해 더 많은 기술과 지표를 사용하여 전략을 더욱 개선하는 데 좋은 방향을 제시합니다. 전반적으로 라이브 거래에 대한 스톱 로스 및 수익 메커니즘을 설계하는 데 좋은 참조를 제공합니다.


/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © felipefs

//@version=4
strategy("Meu Script", overlay=true)
plot(ohlc4)

//Funçao de Datas
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(6, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false

//Funções de Trailing Stop
long_stop_price = 0.0
short_stop_price = 0.0
long_trail_perc = 0
short_trail_perc = 0

long_stop_price := if (strategy.position_size > 0)
    stopValue = close * (1 - long_trail_perc)
    max(stopValue, long_stop_price[1])
else
    0

short_stop_price := if (strategy.position_size < 0)
    stopValue = close * (1 + short_trail_perc)
    min(stopValue, short_stop_price[1])
else
    999999

//Função de Debug
debug(value) =>
    x = bar_index
    y = close
    label.new(x, y, tostring(value))
    
//Take Profit
profit = close * (1 + 0.12)
strategy.entry("Long", true)
strategy.exit("Take Profit 1 Long", from_entry="Long", limit=profit, qty_percent=50.0)
 
//ATR Stop
 
// xATRTrailingStopLong = 0.0
// xATR = atr(nATRPeriod)
// nLossLong = nATRMultipLong * xATR

// if (strategy.position_size > 0)
//     xATRTrailingStopLong := max(nz(xATRTrailingStopLong[1]), close - nLossLong)

더 많은