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

적응형 표준편차 브레이크오웃 거래 전략: 동적 변동성에 기반한 다기간에 최적화 시스템

저자:차오장, 날짜: 2024-07-30 16:09:04
태그:MASMA성병SLTP

img

전반적인 설명

이 거래 전략은 표준편차 브레이크아웃을 기반으로 한 시스템으로, 가격과 이동 평균, 그리고 표준편차 사이의 관계를 활용하여 잠재적 인 구매 기회를 식별합니다. 이 전략은 주로 가격이 하위 대역을 통과 할 때 구매 신호에 초점을 맞추고 수익 및 스톱-러스 수준을 설정함으로써 위험을 관리합니다. 전략의 핵심 아이디어는 비정상적인 가격 변동성 기간 동안 거래를하는 데이며 이동 평균과 표준편차를 사용하여 잠재적 인 잘못된 신호를 필터링합니다.

전략 원칙

  1. 이동 평균 (MA) 을 계산합니다. 간단한 이동 평균 (SMA) 을 사용하여 특정 기간의 평균 라인을 계산합니다.

  2. 표준편차를 계산합니다. 같은 기간에 기초한 가격의 표준편차를 계산합니다.

  3. 상부와 하부 밴드를 구성합니다.

    • 상단역 = MA + (표준편차 * 곱)
    • 하위 대역 = MA - (표준편차 * 곱)
  4. 구매 신호를 생성합니다. 가격이 아래쪽에서 하단 범위를 넘을 때 구매 신호를 유발합니다.

  5. 위험 관리:

    • 취득 가격 설정: 입시 가격 * (1 + 취득 비율)
    • 스톱 로스 가격을 설정합니다: 입시 가격 * (1 - 스톱 로스 비율)
  6. 백테스팅 시간 범위: 전략은 사용자가 백테스팅을 위해 특정 시작 및 종료 시간을 설정하여 지정된 시간 범위 내에서만 거래를 수행 할 수 있습니다.

전략적 장점

  1. 높은 적응력: 표준편차를 사용하여 전략은 시장 변동성에 따라 거래 범위를 자동으로 조정하여 다른 시장 환경에 적응할 수 있습니다.

  2. 포괄적 리스크 제어: 이윤을 취하고 손실을 멈추는 메커니즘을 통합하여 각 거래의 위험을 효과적으로 제어합니다.

  3. 높은 유연성: 사용자가 다른 시장과 개인 위험 선호도에 따라 조정 할 수있는 표준 오차 기간, 곱셈자, 수익 및 스톱 로스 비율과 같은 여러 매개 변수를 사용자 정의 할 수 있습니다.

  4. 좋은 시각화: 전략은 움직이는 평균, 상위 및 하위 밴드 및 차트에서 구매 신호를 그래프로 표시하여 직관적인 이해와 분석을 촉진합니다.

  5. 강력한 백테스팅 기능: 사용자는 특정 시장 조건에서 전략 성과를 평가하는 데 도움이되는 백테스팅 시간 범위를 정확하게 설정할 수 있습니다.

전략 위험

  1. 가짜 브레이크 위험: 옆 또는 낮은 변동성 시장에서 빈번한 가짜 브레이크가 발생할 수 있으며 과도한 거래 및 불필요한 거래 수수료 손실로 이어질 수 있습니다.

  2. 지연에 따른 트렌드: 이 전략은 이동 평균과 표준편차를 기반으로 하기 때문에 강력한 트렌드 시장에 대한 초기 진입 기회를 놓칠 수 있습니다.

  3. 매개 변수 민감성: 전략의 성능은 매개 변수 설정에 크게 의존합니다. 다른 매개 변수 조합은 크게 다른 결과를 초래할 수 있으므로 광범위한 백테스팅과 최적화가 필요합니다.

  4. 일방적인 거래 제한: 전략은 현재 장기 논리만을 구현하고 있으며, 시장의 하락 추세에서 기회를 놓칠 수 있거나 상당한 손실을 입을 수 있습니다.

  5. 시장 환경 의존성: 전략은 매우 변동적이고 저용량 암호화폐 시장에서 더 잘 수행 할 수 있지만 다른 시장 환경에서 효과는 다를 수 있습니다.

전략 최적화 방향

  1. 쇼트 세일 메커니즘을 도입: 가격이 상위 범위를 넘을 때 쇼트 세일 로직을 추가하여 양방향 시장에서 이윤을 창출 할 수 있습니다.

  2. 동적 매개 변수 조정: 시장 조건에 따라 표준 오차 곱셈자 및 수익/손실 중지 비율과 같은 매개 변수를 자동으로 조정하는 기능을 구현하여 전략의 적응력을 향상시킵니다.

  3. 멀티 타임프레임 분석: 신호 신뢰성 및 입력 타이밍 정확성을 향상시키기 위해 더 길고 짧은 기간의 데이터를 통합합니다.

  4. 볼륨 필터링을 추가합니다. 저용량 기간 동안 잘못된 브레이크오웃 신호를 필터링하기 위해 볼륨 지표를 도입하여 거래 품질을 향상시킵니다.

  5. 수익 및 손해 중지 메커니즘을 최적화: 시장 변동에 더 잘 적응하기 위해 후속 중지 또는 ATR 기반의 손해 중지 설정을 도입하는 것과 같은 동적 수익 및 손해 중지 메커니즘을 구현합니다.

  6. 필터링 조건을 높여 다른 기술 지표 또는 기본 데이터를 결합하여 추가 거래 조건을 설정하여 잘못된 신호를 줄입니다.

  7. 자금 관리를 구현하십시오: 계좌 크기 및 시장 변동성에 따라 각 거래에 대한 자금 비율을 동적으로 조정하기 위해 위치 사이징 논리를 추가하십시오.

요약

적응 표준 오차 브레이크아웃 거래 전략 (Adaptive Standard Deviation Breakout Trading Strategy) 은 통계적 원리에 기반을 둔 양적 거래 시스템으로, 동적으로 조정된 가격 채널을 통해 시장 이상으로 인한 거래 기회를 포착합니다. 이 전략의 핵심 장점은 적응력과 위험 관리 능력에 있으며, 다른 시장 환경에서 비교적 안정적인 성능을 유지할 수 있습니다. 그러나 전략은 또한 잘못된 브레이크아웃과 매개 변수 민감성과 같은 도전에 직면하며, 거래자가 신중하게 사용하고 지속적으로 최적화해야합니다.

단장 매매 메커니즘, 동적 매개 변수 조정, 멀티 타임프레임 분석 및 기타 최적화 조치를 도입함으로써이 전략은 안정성과 수익성을 더욱 향상시킬 가능성이 있습니다. 경험이 많은 양적 거래자에게는이 전략이 다양한 거래 스타일과 시장 환경에 적응하도록 깊이 사용자 정의 및 최적화 할 수있는 훌륭한 기본 프레임워크를 제공합니다.

전체적으로, 이 적응 표준 오차 브레이크아웃 거래 전략은 수량 거래의 본질을 보여줍니다. 수학 모델과 통계 방법을 통해 시장 기회를 포착하면서 위험을 엄격하게 제어합니다. 그것은 매우 변동적인 암호화폐 시장에만 적용될 수있을뿐만 아니라 적절한 조정으로 다른 금융 시장에도 적용될 수 있으며, 거래자에게 강력하고 유연한 거래 도구를 제공합니다.


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

//@version=5
strategy("MikEy Scali 3 STD Dev Buy Strategy with TP and SL", overlay=true)

// Input parameters for the strategy
length = input.int(20, title="Standard Deviation Length", minval=1)
src = input(close, title="Source")
mult = input.float(3.0, title="Standard Deviation Multiplier", step=0.1)

// Input for the take profit and stop loss percentages
takeProfitPerc = input.float(1.0, title="Take Profit Percentage", step=0.1) / 100
stopLossPerc = input.float(0.5, title="Stop Loss Percentage", step=0.1) / 100

// Input parameters for the backtesting range
testStartYear = input.int(2023, title="Backtest Start Year", minval=2000)
testStartMonth = input.int(1, title="Backtest Start Month", minval=1, maxval=12)
testStartDay = input.int(1, title="Backtest Start Day", minval=1, maxval=31)

testEndYear = input.int(2024, title="Backtest End Year", minval=2000)
testEndMonth = input.int(12, title="Backtest End Month", minval=1, maxval=12)
testEndDay = input.int(31, title="Backtest End Day", minval=1, maxval=31)

// Define the backtesting range
testStartTime = timestamp(testStartYear, testStartMonth, testStartDay, 00, 00)
testEndTime = timestamp(testEndYear, testEndMonth, testEndDay, 23, 59)

// Determine if the current bar is within the backtesting range
inBacktestRange = (time >= testStartTime) and (time <= testEndTime)

// Calculate the moving average and standard deviation
ma = ta.sma(src, length)
std_dev = ta.stdev(src, length)

// Calculate upper and lower bands
upper_band = ma + (std_dev * mult)
lower_band = ma - (std_dev * mult)

// Buy condition within the backtesting range
buyCondition = inBacktestRange and ta.crossover(src, lower_band)

// Plot the buy signal on the chart
plotshape(series=buyCondition, location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")

// Execute buy orders based on the condition within the backtesting range
if (buyCondition)
    strategy.entry("Buy", strategy.long)

// Calculate the take profit and stop loss prices when a position is opened
entryPrice = na(strategy.opentrades.entry_price(0)) ? src : strategy.opentrades.entry_price(0)
takeProfitPrice = entryPrice * (1 + takeProfitPerc)
stopLossPrice = entryPrice * (1 - stopLossPerc)

// Take profit condition
takeProfitCondition = strategy.position_size > 0 and close >= takeProfitPrice

// Stop loss condition
stopLossCondition = strategy.position_size > 0 and close <= stopLossPrice

// Execute sell order when take profit condition is met within the backtesting range
if (takeProfitCondition and inBacktestRange)
    strategy.close("Buy", "Take Profit")

// Execute sell order when stop loss condition is met within the backtesting range
if (stopLossCondition and inBacktestRange)
    strategy.close("Buy", "Stop Loss")

// Plot the moving average and the bands
plot(ma, color=color.blue, title="Moving Average")
plot(upper_band, color=color.red, title="Upper Band (3 STD)")
plot(lower_band, color=color.green, title="Lower Band (3 STD)")

// Optional: Plot the source
plot(src, color=color.gray, title="Source")

// Add labels for clarity
bgcolor(buyCondition ? color.new(color.green, 90) : na, offset=-1, title="Buy Signal Background")

// Optional: Highlight the backtesting range on the chart
bgcolor(inBacktestRange ? color.new(color.blue, 90) : na, title="Backtest Range Background")

// Plot the take profit and stop loss levels if a position is open
plot(strategy.position_size > 0 ? takeProfitPrice : na, color=color.orange, title="Take Profit Level")
plot(strategy.position_size > 0 ? stopLossPrice : na, color=color.red, title="Stop Loss Level")

관련

더 많은