가격 변동 탐지용 세 가지 요인 모델

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

img

전반적인 설명

가격 변동 탐지 세 요인 모델은 판단을 위해 여러 요인을 통합하는 단기 거래 전략입니다. 이 전략은 가격 변동을 감지하고 단기 거래 기회를 발견하기 위해 볼륨 비율, RSI, MACD 및 신호 라인과 같은 요인을 고려합니다.

전략 논리

이 전략의 핵심 논리는 다음과 같습니다.

  1. 빠른 MA, 느린 MA, MACD 및 신호 라인 등의 기술 지표를 계산합니다.

  2. 부피 비율, RSI, MACD 및 신호 라인을 포함한 여러 요소 조건을 판단합니다.

  3. 현재 가격 변동 단계와 여러 요인 분석을 기반으로 구매/판매 기회를 확인합니다.

  4. LONG 또는 SHORT 포지션을 취하고 수익을 취하고 손실을 중지합니다.

  5. 가격이 상승하면 포지션을 닫습니다.

이 전략은 가격 변동을 감지하고 단기 기회를 포착하기 위해 볼륨 비율, RSI, MACD 및 신호 라인 등의 요인을 유연하게 사용합니다. 여러 요인의 조합은 단일 요인으로부터 잘못된 신호를 피하고 정확성을 향상시킵니다.

이점 분석

이 전략의 장점:

  1. 여러 가지 요소가 정확성을 향상시키고 잘못된 신호를 피합니다.
  2. 큰 수익 공간을 가진 가격 변동에서 단기 기회를 포착합니다.
  3. 자동으로 리스크를 제어하기 위해 수익을 취하고 손실을 멈추도록 설정합니다.
  4. 단순하고 명확한 논리, 실행하기 쉬운.

위험 분석

이 전략의 위험은:

  1. 알고리즘은 너무 역사적인 데이터에 의존하고 시장 변화에 민감합니다.
  2. 여러 요인을 결합한 접근법은 잘못된 판단의 가능성이 있는 추가 최적화가 필요할 수 있습니다.
  3. 스톱 로스 포인트는 전략의 안정성에 직접적인 영향을 미칩니다.

위 위험에 대응하기 위해 최적화 사항은 다음과 같습니다.

  1. 시장 데이터 변화의 영향을 줄이기 위해 표본 사이클을 확장합니다.
  2. 적응적 최적화를 달성하기 위해 요인 사이의 무게를 조정합니다.
  3. 최적의 위치를 찾기 위해 다른 스톱 손실 지점을 테스트합니다.

최적화 방향

주요 최적화 방향:

  1. 동적으로 요인 가중을 최적화합니다. 적응력을 향상시키기 위해 시장 조건에 따라 가중을 조정 할 수 있습니다.

  2. 요소의 적응적 최적화를 달성하기 위해 기계 학습 알고리즘을 도입합니다. 신경 네트워크 및 유전자 알고리즘과 같은 알고리즘은 모델을 훈련하고 매개 변수를 최적화하는 데 사용될 수 있습니다.

  3. 스톱 손실 전략을 최적화합니다. 최고의 솔루션을 찾기 위해 스톱 손실 추적 및 이동 스톱 손실의 다른 조합을 테스트 할 수 있습니다.

  4. 첨단 기술 지표를 포함합니다. 변동성 스윙과 운동 변동과 같은 더 많은 지표가 요인을 풍부하게 할 수 있습니다.

결론

가격 오스실레이션 검출을 위한 세 가지 요인 모델은 효율적인 단기 거래 전략을 구현하기 위해 가격 오스실레이션의 특성을 완전히 활용합니다. 그것은 볼륨, RSI, MACD 및 신호 라인과 같은 여러 가지 요인에 따라 최고의 입문 및 출구 지점을 판단합니다. 여러 가지 요인은 정확성을 향상시키고 안정적인 수익을 가져옵니다. 적응적 최적화를 위해 기계 학습을 통해 더 많은 최적화가 이루어질 수 있으며, 더 나은 전략 성능이 발생합니다.


/*backtest
start: 2024-01-26 00:00:00
end: 2024-02-25 00:00:00
period: 4h
basePeriod: 15m
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.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.0)
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.0)
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.0)
strategy.exit("TPS", "5P1", limit=strategy.position_avg_price - takeProfit, stop=strategy.position_avg_price + stopLoss)


더 많은