다시간주기 MACD 제로축 교차 역전 전략

저자:차오장, 날짜: 2024-02-18 15:27:21
태그:

多时间周期MACD零轴交叉反转策略

개요

다시간주기 MACD 제로축 교차 역전 전략은 다른 주기의 MACD 지표를 계산하여 가격이 역전될 가능성이 있는 신호를 식별하고, 트렌드 추적 스톱 손실 방식을 사용하여 높은 자본 활용 효율성을 추구한다.

전략적 원칙

이 전략은 3주기 및 10주기의 SMA 이동 평균을 동시에 계산하고, 빠른 라인을 구축하고, MACD 지표와 신호 라인을 다시 계산한다. 빠른 라인과 신호 라인이 상향 또는 하향의 제로 축을 교차할 때, 가격이 절정점에 도달하면 반전이 발생할 수 있음을 나타낸다. 또한, 이 전략은 거래량, RSI 지표 등을 결합하여 반전 신호의 신뢰성을 식별한다. 반전 신호가 특정 신뢰성 요구 사항을 달성할 때, 더하거나 비활성화한다.

특히, 전략은 다음과 같은 방법으로 가격을 결정합니다. 1. MACD 제로축 교차점, 가격이 절정점에 도달한 것을 나타냅니다.
2. 거래량 매출 압력 결정 빈도 상태
3. RSI 지표는 하락 동력을 보고 MACD 기울기 변화와 결합하여 역전 신호 강도를 판단합니다.
4. 고속선과 신호선이 역으로 교차하여 반전 신호를 형성합니다.

리버스 신호의 신뢰성이 높을 때, 전략은 트렌드 추적 스톱 손실 방식을 도입하여 높은 수익을 추구합니다.

장점 분석

이 전략은 다음과 같은 몇 가지 장점을 가지고 있습니다:

  1. 여러 지표 판단, 반전 신호를 더 신뢰할 수 있습니다.
  2. MACD 제로축 교차 판단 역점 지점, 높은 정확도
  3. RSI 지표와 거래량 보조 판단, 높은 신뢰성
  4. 트렌드를 추적하고 손실을 멈추고 더 높은 자본 활용 효율성을 추구합니다.

위험 분석

이 전략에는 몇 가지 위험이 있습니다.

  1. MACD 지표가 잘못된 신호를 발산할 가능성이 높고, 쉽게 덫에 걸립니다.
  2. 다공간 교대 과정에서, 스톱손상이 통과될 확률이 높습니다.
  3. 파라미터 설정이 잘못되면 너무 빈번한 거래로 인해 거래 비용이 증가하고 슬라이드 포인트 손실이 발생할 수 있습니다.

이러한 위험은 다음과 같은 방법으로 줄일 수 있습니다. 1. 손해배출을 적절히 완화하여 부착되지 않도록 한다.
2. 매개 변수를 최적화하고 거래 빈도를 줄이십시오.
3. 중요한 지지 저항 부위의 근처에만 진입을 고려하십시오.

최적화 방향

이 전략은 다음과 같은 방향으로 더 최적화 될 수 있습니다.

  1. 기계 학습 알고리즘을 추가하여 반전 신호의 신뢰성을 판단하는 데 도움이 됩니다.
  2. 감정 지표를 높여서 더 많은 빈자리를 판단하는 심리적 측면
  3. 핵심 지원 저항 지점과 결합하여 진입 정밀도를 향상시킵니다.
  4. 손실을 막는 방법을 최적화하고 자금 활용 효율성을 더욱 향상시킵니다.
  5. 최적의 변수 조합을 테스트하고 거래 빈도를 줄입니다.

요약

다시간주기 MACD 제로축 교차회전 전략은 가격, 거래량, 변동 지표 등 여러 차원의 정보를 종합적으로 고려하여, 다중 지표 판단을 통해 회전 출입 시기를 결정하고, 수익이 충분한 후 적시에 손실을 중지하여 회전 시장에서 더 나은 수익을 얻을 수 있습니다. 이 전략은 기계 학습 및 키비트 최적화와 같은 방법을 통해 추가적으로 개선될 것으로 기대되며 거래 빈도와 위험을 줄이고 수익 공간을 높일 수 있습니다.


/*backtest
start: 2023-02-11 00:00:00
end: 2024-02-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

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

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")
intrabarRange = high - low
rsi = ta.rsi(close, 14)
rsiSlope = rsi - rsi[1]

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 )

// 393.60 Profit 52.26% 15m
if ( hasBullInversion and rsiSlope > 1.5 and volume > 300000.0 )
    strategy.entry("15C1", strategy.long, qty=10.0)
strategy.exit("TPS", "15C1", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 356.10 Profit 51,45% 15m
if ( getVolBias(shortLookBack) == false and rsiSlope > 3.0 and signalSlope > 0)
    strategy.entry("15C2", strategy.long, qty=10.0)
strategy.exit("TPS", "15C2", limit=strategy.position_avg_price + takeProfit, stop=strategy.position_avg_price - stopLoss)

// 124 Profit 52% 15m
if ( rsiSlope < -11.25 and macdSlope < 0.0 and signalSlope < 0.0)
    strategy.entry("15P1", strategy.short, qty=10.0)
strategy.exit("TPS", "15P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)

// 455.40 Profit 49% 15m
if ( math.abs(math.abs(macd) - math.abs(signal)) < .1 and buyVolume > sellVolume and hasBullInversion)
    strategy.entry("15P2", strategy.short, qty=10.0)
strategy.exit("TPS", "15P2", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)

더 많은 내용