트렌드를 따르는 변수 위치 그리드 전략

저자:차오장날짜: 2024-03-29 15:23:23
태그:EMARSIMACDATRADX

img

전반적인 설명

이 전략은 주로 EMA, RSI 및 삼키는 패턴을 사용하여 트렌드 방향과 입점 시기를 결정하는 트렌드 다음 변수 위치 그리드 전략입니다. 이 전략은 삼키는 패턴의 크기에 따라 스톱 로스 및 영업 포지션을 조정하면서 사용자가 단장, 단장 또는 둘 다 선택할 수 있습니다. 또한 전략은 MACD를 트렌드 필터로 사용할 수 있습니다.

전략 원칙

이 전략은 전체 트렌드 방향을 결정하기 위해 200주기 EMA를 사용한다. 가격이 EMA 위에 있을 때 상승 추세로 간주되고, EMA 아래에 있을 때 하락 추세로 간주된다. 9주기 RSI는 추진력을 측정하기 위해 사용되며, 50 이상의 RSI는 더 강한 상승 동력을 나타내고 50 이하는 더 강한 하락 동력을 나타낸다. 이 전략은 또한 상승과 하락 포식 패턴을 입점 신호로 사용합니다. EMA, RSI, 그리고 포식 패턴 신호가 동의하면 전략은 포지션을 개척한다.

스톱 로스 포지션은 포괄 패턴의 크기에 따라 결정된다. 스톱 로스는 포괄 패턴의 크기의 두 배로 설정되며, 작은 스톱 로스 거리에 의한 빈번한 스톱 아웃을 피하기 위해 엔트리 가격의 최소 스톱 로스 비율은 0.3%이다. 포괄 포지션은 포괄 패턴의 크기에 따라 결정된다. 또한, 전략은 고정된 리스크 로드 비율을 보장하기 위해 사전 정의된 리스크 로드 비율로 스톱 로스 거리를 곱하여 설정된다. 또한, 전략은 MACD 라인이 신호 라인의 위에 있을 때 더 강한 상승 추세와 MACD 라인이 신호 라인의 아래에 있을 때 더 강한 하락 추세를 고려하여 트렌드 필터로 MACD를 사용할 수 있는 옵션을 제공한다.

전략적 장점

  1. 트렌드 추적: 전략은 트렌드를 결정하기 위해 여러 지표를 사용하여 트렌드 형성의 초기 단계에서 진입하고 트렌드 움직임을 파악하는 데 도움이됩니다.

  2. 동적 스톱 로스 및 트레이프: 포괄 패턴의 크기에 따라 스톱 로스 및 트레이프 포지션을 조정함으로써 트렌드가 강한 경우 스톱 로스 범위를 확장하고 트렌드가 약한 경우 스톱 로스 범위를 좁혀 유연한 포지션 관리를 허용합니다.

  3. 사용자는 다른 사용자 요구에 맞게 거래 방향, 위험 선호도 및 기타 매개 변수를 사용자 정의 할 수 있습니다.

  4. 트렌드 필터로 MACD를 사용하는 옵션은 트렌드 강도를 더욱 확인하고 입력 정확도를 향상시킵니다.

전략 위험

  1. 잘못된 트렌드 식별: 전략은 트렌드를 결정하기 위해 여러 지표를 사용하지만, 트렌드가 잘못 식별되어 손실로 이어지는 경우가있을 수 있습니다.

  2. 좁아지는 범위: 포용 패턴의 몸체가 작다면, 스톱-러스와 트레이프 (take-profit) 거리는 매우 가깝게 될 것이며, 이로 인해 리스크/어워드 비율이 악화됩니다. 이 상황은 불안정한 시장에서 더 일반적입니다.

  3. 매개 변수 최적화: 최적의 매개 변수는 다른 도구와 시간 프레임에 따라 크게 다를 수 있으므로 사용자가 지속적으로 테스트하고 최적화해야합니다.

전략 최적화 방향

  1. 트렌드 식별: 트렌드 식별의 정확성을 향상시키기 위해 볼링거 밴드, 평균 방향 지표 (ADX) 등과 같은 추가 트렌드 확인 도구를 도입하는 것을 고려하십시오.

  2. 스톱 로스 및 트레이프 오프티마이징: ATR와 같은 변동성 관련 지표를 통합하여 스톱 로스 및 트레이프 오프티마이징 거리를 동적으로 조정하여 작은 범위와 관련된 위험을 줄이는 것을 고려하십시오.

  3. 포지션 크기: 트렌드 강도, 계정 수익성 등에 따라 포지션 크기를 동적으로 조정하여 트렌드가 강력하고 지속적으로 수익성이있을 때 포지션 크기를 증가시키고 빈번한 거래 비용을 줄입니다.

  4. 다중 시간 프레임 및 다중 도구 조정: 단일 도구 또는 시간 프레임의 위험을 다양화하면서 트렌드 식별의 정확성을 향상시키기 위해 시간 프레임 및 도구에 걸쳐 트렌드 신호를 검증합니다.

요약

이 트렌드를 따르는 변수 포지션 그리드 전략은 트렌드 방향과 강도를 결정하기 위해 여러 지표를 사용하여 트렌드 시장에서 잘 수행하며, 동적으로 스톱 로스, 테이크-프로프트 및 포지션 사이징을 조정하여 트렌드를 파악하고 과도한 수익을 달성합니다. 그러나 전략의 성능은 불분명하거나 자주 변동하는 시장에서 평균입니다. 따라서이 전략을 사용할 때 트렌드 도구를 선택하고 시장 조건이 변화함에 따라 매개 변수를 조정하는 데 초점을 맞추는 것이 중요합니다. 또한 트렌드 식별, 스톱 로스 및 테이크-프로프트 배치, 포지션 사이징 및 멀티 타임프레임 및 멀티 인스트루먼트 조정에서 추가 최적화에 대한 여지가 있습니다.


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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © niosupetranmartinez
//@version=5
strategy("Trend Follower Scalping Strategy", overlay=true, process_orders_on_close = true)

// Inputs
emaLen = input(200, 'EMA Length')
rsiLen = input(9, 'RSI Length')
trendDirection = input.string("Both", 'Trend Direction', options=["Long Only", "Short Only", "Both"])
risk_reward_ratio = input(2, 'Risk Reward Ratio')
useMacdFilter = input.bool(true, "Use MACD Filter")
macdTimeframe = input("5", "MACD Timeframe")

// EMA and RSI
ema200 = ta.ema(close, emaLen)
customRsi = ta.rsi(close, rsiLen)

// MACD Filter
[macdLine, signalLine, _] = request.security(syminfo.tickerid, macdTimeframe, ta.macd(close, 12, 26, 9))


// Majority Body Candle Identification Function
isMajorityBodyCandle(candleOpen, candleClose, high, low) =>
    bodySize = math.abs(candleClose - candleOpen)
    fullSize = high - low
    bodySize / fullSize > 0.6

// Engulfing Patterns
isBullishEngulfing = close > open and close[1] < open[1] and (close - open) > (open[1] - close[1]) and isMajorityBodyCandle(open, close, high, low)
isBearishEngulfing = close < open and close[1] > open[1] and (open - close) > (close[1] - open[1]) and isMajorityBodyCandle(open, close, high, low)

// Entry Conditions with MACD Filter
longCondition = close > ema200 and customRsi > 50 and isBullishEngulfing and (not useMacdFilter or macdLine > signalLine)
shortCondition = close < ema200 and customRsi < 50 and isBearishEngulfing and (not useMacdFilter or macdLine < signalLine)

// Trade Execution
var float stopLossPrice = na
var float entryPrice = na

// Long Entry
if (longCondition and (trendDirection == "Long Only" or trendDirection == "Both"))
    entryPrice := close
    engulfingBodySize = math.abs(close - open)
    minimumStopLoss = entryPrice * 0.997
    calculatedStopLoss = entryPrice - (engulfingBodySize * 2)
    stopLossPrice := calculatedStopLoss < minimumStopLoss ? calculatedStopLoss : minimumStopLoss
    risk = entryPrice - stopLossPrice
    takeProfitPrice = entryPrice + (risk_reward_ratio * risk)
    strategy.entry("Long", strategy.long)
    strategy.exit("Exit Long", "Long", stop = stopLossPrice, limit = takeProfitPrice)

// Short Entry
if (shortCondition and (trendDirection == "Short Only" or trendDirection == "Both"))
    entryPrice := close
    engulfingBodySize = math.abs(open - close)
    minimumStopLoss = entryPrice * 1.003
    calculatedStopLoss = entryPrice + (engulfingBodySize * 2)
    stopLossPrice := calculatedStopLoss > minimumStopLoss ? calculatedStopLoss : minimumStopLoss
    risk = stopLossPrice - entryPrice
    takeProfitPrice = entryPrice - (risk_reward_ratio * risk)
    strategy.entry("Short", strategy.short)
    strategy.exit("Exit Short", "Short", stop = stopLossPrice, limit = takeProfitPrice)

// Plotting
plot(ema200, color=color.blue, linewidth=2, title="EMA 200")

관련

더 많은