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

적응 표준적 약점을 돌파하는 거래 전략: 동적 변동률에 기반한 다주기 최적화 시스템

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

自适应标准差突破交易策略:基于动态波动率的多周期优化系统

개요

이 거래 전략은 표준 격차 돌파를 기반으로 한 시스템으로, 가격과 이동 평균의 관계와 표준 격차를 활용하여 잠재적인 구매 기회를 식별한다. 이 전략은 주로 가격이 경로를 돌파할 때 구매 신호에 초점을 맞추고, 정지 및 중단 손실을 설정하여 위험을 관리한다. 전략의 핵심 아이디어는 가격이 비정상적으로 변동되는 동안 거래를하는 것이며, 이동 평균과 표준 격차를 통해 가능한 잘못된 신호를 필터링하는 것이다.

전략적 원칙

  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. 자금 관리를 구현: 포지션 관리 논리를 통합하여 계정 크기와 시장의 변동성 역동성에 따라 거래 당 자금 비율을 조정합니다.

요약

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

이 전략은 공백 메커니즘, 동적 파라미터 조정, 멀티 타임프레임 분석 등의 최적화 조치가 도입됨으로써 안정성과 수익성을 더욱 향상시킬 것으로 기대된다. 경험이 많은 양적 거래자에게는 이 전략은 다양한 거래 스타일과 시장 환경에 적응하기 위해 심층적인 개인화 및 최적화를 수행할 수 있는 좋은 기본 프레임워크를 제공합니다.

전반적으로, 이 적응적 표준격차 트레이딩 전략은 수량화 트레이딩의 본질적 요점을 보여 mathematical model and statistical methods를 통해 시장 기회를 포착하면서도 위험을 엄격하게 통제한다. 그것은 고변동성 있는 암호화폐 시장에만 적용되는 것이 아니라 적절한 조정을 통해 다른 금융 시장에도 적용될 수 있으며, 거래자에게 강력하고 유연한 거래 도구를 제공한다.


/*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")

관련 내용

더 많은 내용