트렌드 다음 전략 및 손실을 중지하고 이익을 취하

저자:차오장, 날짜: 2024-02-21 14:55:41
태그:

img

전반적인 설명

이 전략의 주요 아이디어는 주간 가격 트렌드를 기반으로 긴 및 짧은 방향을 결정하는 것입니다. 상승 추세에서는 상승 촛불 패턴이있을 때 길게 간다. 가격이 미리 설정된 수익 수준으로 상승 할 때 이익을 취하고 미리 설정된 스톱 손실 수준으로 떨어지면 손실을 멈추게됩니다.

전략 논리

전략은 먼저 주간 경향을 판단하기 위한 조건을 정의합니다.

isUptrend = close > close[1]
isDowntrend = close < close[1] 

현재 종료가 이전 종료보다 높으면 상승 추세로 판단됩니다. 그렇지 않으면 하락 추세입니다.

그 다음에는 내일 거래 신호가 정의됩니다.

buyCondition = getPrevDayClose() > getPrevDayOpen() and getPrevDayOpen() > getPrevDayClose()[1] and isUptrend

즉, 이전 클로즈는 이전 오픈보다 높고, 이전 오픈은 이전 오픈보다 높고, 상승 추세입니다. 이 기준은 긴 엔트리 조건을 충족합니다.

포지션에 진입한 후, 스톱 로스는 이전 클로즈 마이너스 1.382배로 설정됩니다.

stopLoss = getPrevDayClose() - 1.382 * (getPrevDayClose() - getPrevDayOpen())

이윤을 취득하는 것은 이전 클로즈 + 이전 클로즈와 스톱 러스 사이의 차의 2배로 설정됩니다.

takeProfit = getPrevDayClose() + 2 * (getPrevDayClose() - stopLoss)

이것은 스톱 손실과 수익을 취하는 전략을 실현합니다.

이점 분석

이 전략의 장점은 다음과 같습니다.

  1. 트렌드를 따라 거래하면 역트렌드 쇼트 포스팅의 위험이 피됩니다.
  2. 엔트리 신호는 초기에 긴 엔트리를 피하기 위해 상승 촛불과 격차를 결합합니다.
  3. 한 번의 손실을 통제하기 위해 스톱 로스 포지셔닝은 합리적입니다.
  4. 이윤 범위는 넓고 이윤 잠재력이 높습니다.

위험 분석

또한 몇 가지 위험이 있습니다.

  1. 트렌드 반전 지점을 결정할 수 없으므로 전환 기회를 놓칠 수 있습니다.
  2. 스톱 손실이 너무 가깝고 함락될 확률이 높습니다.
  3. 비용 통제는 고려되지 않습니다. 높은 거래 빈도에 수익이 감소 할 수 있습니다.

이러한 위험을 통제하기 위해 몇 가지 최적화가 고려 될 수 있습니다.

  1. 스톱 손실을 추적하기 위해 스톱 손실 근처에 트레일러 설정
  2. 주문 빈도를 제한하기 위해 비용 제어 모듈을 추가
  3. 지원/항항의 판단을 추가합니다

최적화 방향

이 전략은 또한 다음과 같은 방법으로 최적화 될 수 있습니다.

  1. MA 방향, 부피 변화 등과 같은 더 많은 요소를 기반으로 추세를 결정합니다.
  2. 더 많은 촛불 패턴으로 입력 신호를 최적화
  3. 가격 변동에 따라 손실을 멈추고 이익을 동적으로 추적합니다.
  4. 위치 크기를 제어하는 데 양적 모듈을 추가
  5. 더 높은 수준의 트렌드를 기반으로 필터링을 위한 여러 시간 프레임의 조합

요약

전체적으로 이것은 트렌드를 따라 거래를 강조하면서 위험을 제어하는 매우 실용적인 전략입니다. 그것은 기본 인트라데이 거래 전략으로 작용할 수 있으며 다양한 시장과 제품을 창출하기 위해 모듈로 최적화 될 수 있습니다. 실제 사용에서는 비용을 제어하고 함정을 피하는 것이 여전히 중요합니다. 따라서 올바른 사고방식을 유지하는 것이 중요합니다.


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

//@version=5
strategy("Trend Following Strategy with Stop Loss and Take Profit", overlay=true)

// Function to get previous day's close and open
getPrevDayClose() =>
    request.security(syminfo.tickerid, "D", close[1])

getPrevDayOpen() =>
    request.security(syminfo.tickerid, "D", open[1])

// Determine weekly trend
isUptrend = close > close[1]
isDowntrend = close < close[1]

// Determine daily conditions for buy
buyCondition = getPrevDayClose() > getPrevDayOpen() and getPrevDayOpen() > getPrevDayClose()[1] and isUptrend

// Calculate stop loss and take profit
stopLoss = getPrevDayClose() - 1.382 * (getPrevDayClose() - getPrevDayOpen())
takeProfit = getPrevDayClose() + 2 * (getPrevDayClose() - stopLoss)

// Strategy logic
if (isUptrend)
    strategy.entry("Buy", strategy.long, when = buyCondition)
    strategy.exit("Take Profit/Stop Loss", from_entry="Buy", loss=stopLoss, profit=takeProfit)
    
if (isDowntrend)
    strategy.entry("Sell", strategy.short)

// Plotting the trend on the chart
plotshape(series=isUptrend, title="Uptrend", color=color.green, style=shape.triangleup, location=location.abovebar)
plotshape(series=isDowntrend, title="Downtrend", color=color.red, style=shape.triangledown, location=location.belowbar)

// Plotting stop loss and take profit levels on the chart
plot(stopLoss, color=color.red, title="Stop Loss", linewidth=2, style=plot.style_cross)
plot(takeProfit, color=color.green, title="Take Profit", linewidth=2, style=plot.style_cross)


더 많은