3 이동 평균 변동 간격 역전 전략

저자:차오장, 날짜: 2024-02-18 11:18:51
태그:

img

전반적인 설명

이 전략은 MACD 지표와 RSI 지표 및 부피 특성을 보완한 3일 고속 이동 평균, 10일 느린 이동 평균 및 16일 신호 평형 이동 평균을 사용하여 시장 트렌드의 과도한 확장, 범위 스윙 트렌드 형성 및 수익 취득을 위한 반전 긴 또는 짧은 엔트리를 결정하기 위해 다차원적인 K 라인 특성을 설정합니다.

이 전략은 지역 과잉 구매 또는 과잉 판매 수준에서 빠른 가격 반전을 포착하는 것을 목표로합니다. 일반적으로 15m 시간 프레임을 사용하는 0DTE SPY 옵션에 잘 수행됩니다.

전략 논리

이 전략은 주로 MACD 지표를 형성하기 위해 3일 빠른 이동 평균 빼기 10일 느린 이동 평균을 사용하며, 평형화를 위해 16일 신호선을 사용하여 표준 MACD 전략을 구성합니다. 또한 추진량 특성을 결정하기 위해 구매 및 판매 부피의 볼륨 분석을 결합합니다. RSI 지표는 과소매 또는 과소매 수준을 결정하기 위해 도입됩니다. 여러 지표의 조합을 통해 시장 특성을 판단하고 진입 신호를 구성하기 위해 간격 스윙 트렌드의 변화를 감지합니다.

특히, MACD 라인과 신호 라인 사이의 관계, 그리고 기울기 변화의 관찰을 통해, 상승과 하락 세력의 기복과 흐름을 결정하여 반전 기회를 발견합니다. 동시에, 구매 및 판매 부피의 변화는 상승 및 하락 추진력의 변화를 반영합니다. 과잉 구매 및 과잉 판매 조건을 결정하기 위해 RSI 지표의 변화와 결합하여, 이러한 지표는 현지화 된 시장 프로필 특징과 잠재적 인 반전 타이밍을 확인 할 수 있습니다.

이 전략은 총 3개의 진입 신호를 설정합니다.

  1. 긴 구매 부피는 판매 부피에 대한 장점이 없습니다, 상승하는 동안 41 이하의 RSI, MACD 신호는 중요한 편차가 없습니다.

  2. 구매량이 판매량보다 강할 때 긴, 45-55 범위에서 RSI와 상승, MACD와 신호 라인이 함께 상승;

  3. MACD가 임계값을 넘어서고 상승할 때 단축

이 세 가지 시나리오 모두 방향적 과잉 확장에서 지역적 범위의 변동을 반영하며, 역방향 엔트리에 대한 적절한 반전 타이밍으로 판단됩니다.

출구는 수익을 취하고 손실을 멈추는 것으로 설정됩니다. 인출을 제어하고 이익을 실현하기 위해.

이점 분석

이 전략은 다양한 지표와 과잉 구매 / 과잉 판매 조건을 결정하기 위해 여러 지표를 결합하며 명확한 반전 수익 취득 논리를 사용합니다. 입시에 대한 추가 확신을 위해 볼륨 분석을 사용합니다. 스톱 로스와 취득 또한 수익을 조기에 확보하면서 한 방향으로 과잉 거래를 피하는 데 도움이됩니다.

특히 이점으로는 다음과 같은 것들이 있습니다.

  1. MACD는 부피 가중된 모멘텀 오시일레이터로서 단순화된 기술 분석을 피합니다.

  2. 부피 조건은 입국 확신을 더합니다.

  3. RSI는 잠재적인 반전을 발견하는데 도움을 줍니다.

  4. 스톱 손실 및 수익을 취하는 것은 과도한 마감과 수익을 차단합니다.

위험 분석

승률을 높이기 위한 지표들을 결합했음에도 불구하고 모든 전략에는 위험성이 있습니다. 주요 문제는 다음과 같습니다.

  1. 초기 역전 후 계속되는 것과 같은 잘못된 신호의 확률

  2. 적당한 스톱 로스 설정과 이익 취득 설정이 너무 큰 마감으로 이어지고 수익을 확보하지 못하는 경우

  3. MA 길이, RSI 기간, 수익률 비율과 같은 매개 변수 조정은 추가 최적화가 필요할 수 있습니다.

이 위험은 추가 최적화로 감소 할 수 있습니다. 다음 섹션에서 구체적인 방법이 설명됩니다.

최적화 방향

더 많은 최적화를 위한 여지가 남아 있습니다. 주로:

  1. 가장 좋은 결과를 얻기 위해 다른 MA 매개 변수 조합을 테스트합니다.

  2. RSI 검색 기간을 테스트하여 최적의 오버구입/오버판매 판단자를 찾습니다.

  3. 이윤을 취득하고 손실을 멈추는 비율을 최적화하여 적립과 이윤 포착을 균형 잡습니다.

  4. 기계 학습 모델을 도입하고 더 많은 데이터를 활용하여 잘못된 판단을 줄이고 승률을 향상시킵니다.

이러한 방법은 보다 체계적인 백테스트를 통해 구현될 수 있습니다. 매개 변수 공간이 확장되고 표본 크기가 증가함에 따라 전략 승률과 수익성 또한 향상됩니다.

결론

이 전략은 시장 범위 특성을 결정하기 위해 MACD, RSI 및 볼륨 분석을 결합하고, 리트레이싱 움직임을 포착하기 위해 반전 구역에 항목을 설정합니다. 논리는 명확하며, 트렌드와 반전을 균형있게합니다. 추가 최적화로 강력한 양성 전략으로 강력한 수익 잠재력을 가지고 있습니다. 매개 변수 조정 및 모델 도입은 매우 효율적인 알고리즘으로 향상시킬 수 있습니다.


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

//@version=5
strategy("3 1 Oscillator Profile Flagging", shorttitle="3 1 Oscillator Profile Flagging", overlay=false)

signalBiasValue = input(title="Signal Bias", defval=0.26)
macdBiasValue = input(title="MACD Bias", defval=0.7)
shortLookBack = input( title="Short LookBack", defval=3)
longLookBack = input( title="Long LookBack", defval=6)
takeProfit = input( title="Take Profit", defval=2)
stopLoss = input( title="Stop Loss", defval=0.7)

fast_ma = ta.sma(close, 3)
slow_ma = ta.sma(close, 10)
macd = fast_ma - slow_ma
signal = ta.sma(macd, 16)
hline(0, "Zero Line", color = color.black)

buyVolume = volume*((close-low)/(high-low))
sellVolume = volume*((high-close)/(high-low))
buyVolSlope = buyVolume - buyVolume[1]
sellVolSlope = sellVolume - sellVolume[1]
signalSlope = ( signal - signal[1] )
macdSlope = ( macd - macd[1] )
plot(macd, color=color.blue, title="Total Volume")
plot(signal, color=color.orange, title="Total Volume")
plot(macdSlope, color=color.green, title="MACD Slope")
plot(signalSlope, color=color.red, title="Signal Slope")
intrabarRange = high - low
rsi = ta.rsi(close, 14)
rsiSlope = rsi - rsi[1]
plot(rsiSlope, color=color.black, title="RSI Slope")

getRSISlopeChange(lookBack) =>
    j = 0
    for i = 0 to lookBack
        if ( rsi[i] - rsi[ i + 1 ] ) > -5
            j += 1
    j

getBuyerVolBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if buyVolume[i] > sellVolume[i]
            j += 1
    j

getSellerVolBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if sellVolume[i] > buyVolume[i]
            j += 1
    j

getVolBias(lookBack) =>
    float b = 0.0
    float s = 0.0
    for i = 1 to lookBack
        b += buyVolume[i]
        s += sellVolume[i]
    b > s

getSignalBuyerBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] > signalBiasValue
            j += 1
    j

getSignalSellerBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] < ( 0.0 - signalBiasValue )
            j += 1
    j

getSignalNoBias(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if signal[i] < signalBiasValue and signal[i] > ( 0.0 - signalBiasValue )
            j += 1
    j

getPriceRising(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if close[i] > close[i + 1]
            j += 1
    j


getPriceFalling(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if close[i] < close[i + 1] 
            j += 1
    j

getRangeNarrowing(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if intrabarRange[i] < intrabarRange[i + 1] 
            j+= 1
    j

getRangeBroadening(lookBack) =>
    j = 0
    for i = 1 to lookBack
        if intrabarRange[i] > intrabarRange[i + 1] 
            j+= 1
    j

bool isNegativeSignalReversal = signalSlope < 0.0 and signalSlope[1] > 0.0
bool isNegativeMacdReversal = macdSlope < 0.0 and macdSlope[1] > 0.0

bool isPositiveSignalReversal = signalSlope > 0.0 and signalSlope[1] < 0.0
bool isPositiveMacdReversal = macdSlope > 0.0 and macdSlope[1] < 0.0

bool hasBearInversion = signalSlope > 0.0 and macdSlope < 0.0
bool hasBullInversion = signalSlope < 0.0 and macdSlope > 0.0

bool hasSignalBias = math.abs(signal) >= signalBiasValue
bool hasNoSignalBias = signal < signalBiasValue and signal > ( 0.0 - signalBiasValue )

bool hasSignalBuyerBias = hasSignalBias and signal > 0.0
bool hasSignalSellerBias = hasSignalBias and signal < 0.0

bool hasPositiveMACDBias = macd > macdBiasValue
bool hasNegativeMACDBias = macd < ( 0.0 - macdBiasValue )

bool hasBullAntiPattern = ta.crossunder(macd, signal)
bool hasBearAntiPattern = ta.crossover(macd, signal)

bool hasSignificantBuyerVolBias = buyVolume > ( sellVolume * 1.5 )
bool hasSignificantSellerVolBias = sellVolume > ( buyVolume * 1.5 )


// 202.30 Profit 55.29% 5m
if ( ( getVolBias(longLookBack) == false ) and rsi <= 41 and math.abs(rsi - rsi[shortLookBack]) > 1 and hasNoSignalBias and rsiSlope > 1.5 and close > open)
    strategy.entry("5C1", strategy.long, qty=1)
strategy.exit("TPS", "5C1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 171.70 Profit 50.22% 5m
if ( getVolBias(longLookBack) == true and rsi > 45 and rsi < 55 and macdSlope > 0 and signalSlope > 0)
    strategy.entry("5C2", strategy.long, qty=1)
strategy.exit("TPS", "5C2", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 309.50 Profit 30.8% 5m 2 tp .7 sl 289 trades
if ( macd > macdBiasValue and macdSlope > 0)
    strategy.entry("5P1", strategy.short, qty=1)
strategy.exit("TPS", "5P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)


더 많은