적응형 표준 편차 돌파 거래 전략: 동적 변동성을 기반으로 한 다중 기간 최적화 시스템

MA SMA STD SL TP
생성 날짜: 2024-07-30 16:09:04 마지막으로 수정됨: 2024-07-30 16:09:04
복사: 2 클릭수: 576
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

적응형 표준 편차 돌파 거래 전략: 동적 변동성을 기반으로 한 다중 기간 최적화 시스템

개요

이 거래 전략은 표준 격차 돌파구를 기반으로 한 시스템으로, 가격과 이동 평균의 관계를 이용하고 표준 격차를 사용하여 잠재적인 구매 기회를 식별한다. 이 전략은 주로 가격이 경로를 돌파 할 때 구매 신호를 대상으로 하며, 스톱 및 스톱을 설정하여 위험을 관리한다. 전략의 핵심 아이디어는 가격이 비정상적인 변동이있을 때 거래하고, 이동 평균과 표준 격차를 통해 가짜 신호를 필터링하는 것이다.

전략 원칙

  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. 자금 관리를 구현: 포지션 관리 로직에 가입하여 계좌 규모와 시장의 변동성에 따라 거래당 자금 비율을 조정한다.

요약하다

자조적 표준 격차 돌파 거래 전략은 통계학적 원리에 기반한 정량 거래 시스템으로, 동적으로 조정된 가격 통로를 통해 시장의 비정상적인 변동으로 인한 거래 기회를 포착한다. 이 전략의 핵심 장점은 자조적 및 위험 관리 능력으로, 다양한 시장 환경에서 비교적 안정적인 성능을 유지할 수 있다는 것이다. 그러나, 전략은 또한 가짜 돌파와 파라미터 민감성 등의 도전에 직면해 있으며, 거래자가 신중하게 사용하고 지속적으로 최적화해야 한다.

공백 메커니즘, 동적 파라미터 조정, 다중 시간 프레임 분석과 같은 최적화 조치를 도입함으로써 이 전략은 안정성과 수익성을 더욱 향상시킬 것으로 예상됩니다. 이 전략은 경험이 많은 양적 거래자에게는 다양한 거래 스타일과 시장 환경에 맞게 심도있는 개인화 및 최적화를 할 수있는 훌륭한 기본 프레임 워크를 제공합니다.

종합적으로, 이 적응형 표준 격차 돌파 거래 전략은 수학 모델과 통계적 방법을 통해 시장 기회를 포착하고 위험을 엄격하게 통제하는 양적 거래의 본질을 보여줍니다. 그것은 높은 변동성이있는 암호화폐 시장뿐만 아니라 적절한 조정으로 다른 금융 시장에도 적용 될 수 있으며, 거래자에게 강력하고 유연한 거래 도구를 제공합니다.

전략 소스 코드
/*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")