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

멀티 타겟 지능형 볼륨 모멘텀 거래 전략

저자:차오장, 날짜: 2024-12-12 14:45:04
태그:SMARSITPSL

img

이 전략은 부피, 가격 동력 및 여러 가지 수익/손실 중지 수준을 결합한 지능형 거래 시스템입니다. 부피 이상 탐지, 가격 이득 및 동력 지표의 조합을 통해 잠재적 인 거래 기회를 식별하고, 레이어 된 수익 취득 및 손실 중지 관리를 사용하여 위험 보상 비율을 최적화합니다.

전략 원칙

이 전략은 세 가지 핵심 거래 신호를 기반으로 합니다. 1) 볼륨 돌파 - 현재 볼륨은 20 기간 평균 볼륨의 2 배를 초과합니다. 2) 가격 상승 - 최근 가격 상승이 설정 된 임계치를 초과합니다. 3) 모멘텀 확인 - RSI는 55 이상이며 가격은 50 기간 SMA를 초과합니다. 이 세 가지 조건이 동시에 충족되면 시스템은 긴 신호를 생성합니다. 전략은 포지션 관리를 위해 세 배 수익 (15%, 25%, 35%) 및 세 배 손실 (-2%, -5%, -10%) 수준을 사용하여 각 수준에서 유연한 포지션 크기를 사용합니다.

전략적 장점

  1. 여러 신호 확인은 거래 정확도를 향상시킵니다.
  2. 계층적 취득/손실 중지 접근 방식은 수익을 보장하고 위험을 제어합니다.
  3. 고도로 사용자 정의 가능한 매개 변수
  4. 기술 지표와 부피 분석의 조합은 더 신뢰할 수 있는 신호를 제공합니다.
  5. 실시간 알림 기능으로 적시에 기회를 잡을 수 있습니다.

전략 위험

  1. 부적절한 매개 변수 설정은 과잉 거래로 이어질 수 있습니다.
  2. 시장의 높은 변동성 중 빈번한 스톱 로스가 발생할 수 있습니다.
  3. 유동성이 낮은 시장에서 수익을 취하거나 손실을 멈추는 것을 실행하는 데 어려움이 있습니다.
  4. 중요한 기본 요소가 부족합니다.
  5. 기술 지표에 과도하게 의존하는 것은 다양한 시장에서 실패할 수 있습니다.

최적화 방향

  1. 매개 변수 적응을 위한 시장 상황 분석을 도입
  2. 잘못된 볼륨 신호를 필터하기 위해 볼륨 품질 분석을 추가
  3. 트렌드를 따르는 능력을 향상시키기 위해 트렌드 강도 지표를 포함합니다.
  4. 시장의 변동성에 대응하기 위해 수익/손실 중단 간격을 최적화
  5. 자본 곡선의 안정성을 향상시키기 위해 유출 통제를 추가하는 것을 고려하십시오.

요약

이것은 여러 가지 기술적 분석 요소를 통합하는 성숙한 거래 전략입니다. 엄격한 신호 필터링과 유연한 위치 관리를 통해 좋은 위험 통제를 유지하면서 트렌드 기회를 포착합니다. 최적화 할 여지가 있지만 전반적인 디자인은 건전하며 라이브 거래에서 검증 및 구현에 가치가 있습니다.


/*backtest
start: 2024-11-11 00:00:00
end: 2024-12-10 08:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Volume Spike & Momentum Strategy with Alerts", overlay=true)

// Inputs for customization
priceGainPercent = input.float(5, title="Minimum Price Gain (%)", minval=1)
volumeLookback = input.int(20, title="Volume Lookback Period (Bars)", minval=1)
momentumSmaLength = input.int(50, title="SMA Length for Momentum (Bars)", minval=1)
rsiThreshold = input.float(55, title="RSI Threshold for Momentum", minval=1)

// Take Profit percentages
tp1Percent = input.float(15, title="Take Profit 1 (%)", minval=1)
tp2Percent = input.float(25, title="Take Profit 2 (%)", minval=1)
tp3Percent = input.float(35, title="Take Profit 3 (%)", minval=1)

// Percentage of position to close at each take-profit
tp1ClosePercent = input.float(30, title="Close % at TP1", minval=1, maxval=100)
tp2ClosePercent = input.float(40, title="Close % at TP2", minval=1, maxval=100)
tp3ClosePercent = input.float(30, title="Close % at TP3", minval=1, maxval=100)

// Stop-loss percentages
sl1Percent = input.float(2, title="Stop Loss 1 (%)", minval=0.1)
sl2Percent = input.float(5, title="Stop Loss 2 (%)", minval=0.1)
sl3Percent = input.float(10, title="Stop Loss 3 (%)", minval=0.1)

// Percentage of position to close at each stop-loss
sl1ClosePercent = input.float(30, title="Close % at SL1", minval=1, maxval=100)
sl2ClosePercent = input.float(40, title="Close % at SL2", minval=1, maxval=100)
sl3ClosePercent = input.float(30, title="Close % at SL3", minval=1, maxval=100)

// Detect volume spikes
avgVolume = ta.sma(volume, volumeLookback)   // Average volume over the last X bars (customizable)
volumeSpike = volume > avgVolume * 2         // Spike in volume if current volume is 2x the average

// Detect price gain over the recent period (e.g., 5-10% gain over the last X bars)
priceChangePercent = (close - ta.lowest(close, 5)) / ta.lowest(close, 5) * 100
priceGainCondition = priceChangePercent >= priceGainPercent

// Check for overall momentum using an SMA and RSI
longTermSma = ta.sma(close, momentumSmaLength)
rsi = ta.rsi(close, 14)
momentumCondition = close > longTermSma and rsi >= rsiThreshold

// Store the entry price on a new trade
var float entryPrice = na
if (strategy.opentrades == 0 and (volumeSpike and priceGainCondition and momentumCondition))
    entryPrice := close  // Capture the entry price on a new trade

// Calculate take-profit levels based on the entry price
tp1Price = entryPrice * (1 + tp1Percent / 100)
tp2Price = entryPrice * (1 + tp2Percent / 100)
tp3Price = entryPrice * (1 + tp3Percent / 100)

// Calculate stop-loss levels based on the entry price
sl1Price = entryPrice * (1 - sl1Percent / 100)
sl2Price = entryPrice * (1 - sl2Percent / 100)
sl3Price = entryPrice * (1 - sl3Percent / 100)

// Exit conditions for multiple take-profits
tp1Condition = high >= tp1Price  // Exit partial if price hits take-profit 1
tp2Condition = high >= tp2Price  // Exit partial if price hits take-profit 2
tp3Condition = high >= tp3Price  // Exit full if price hits take-profit 3

// Exit conditions for multiple stop-losses
sl1Condition = low <= sl1Price  // Exit partial if price hits stop-loss 1
sl2Condition = low <= sl2Price  // Exit partial if price hits stop-loss 2
sl3Condition = low <= sl3Price  // Exit full if price hits stop-loss 3

// Buy Condition: When volume spike, price gain, and momentum conditions are met
if (volumeSpike and priceGainCondition and momentumCondition)
    strategy.entry("Buy", strategy.long)

// Alerts for conditions
alertcondition(volumeSpike and priceGainCondition and momentumCondition, title="Entry Alert", message="Entry conditions met: Volume spike, price gain, and momentum detected!")

alertcondition(tp1Condition, title="Take Profit 1", message="Take Profit 1 hit!")
alertcondition(tp2Condition, title="Take Profit 2", message="Take Profit 2 hit!")
alertcondition(tp3Condition, title="Take Profit 3", message="Take Profit 3 hit!")

alertcondition(sl1Condition, title="Stop Loss 1", message="Stop Loss 1 hit!")
alertcondition(sl2Condition, title="Stop Loss 2", message="Stop Loss 2 hit!")
alertcondition(sl3Condition, title="Stop Loss 3", message="Stop Loss 3 hit!")

// Exit conditions: Multiple take-profits and stop-losses
if (tp1Condition)
    strategy.exit("Take Profit 1", "Buy", limit=tp1Price, qty_percent=tp1ClosePercent)

if (tp2Condition)
    strategy.exit("Take Profit 2", "Buy", limit=tp2Price, qty_percent=tp2ClosePercent)

if (tp3Condition)
    strategy.exit("Take Profit 3", "Buy", limit=tp3Price, qty_percent=tp3ClosePercent)

// Stop-loss exits
if (sl1Condition)
    strategy.exit("Stop Loss 1", "Buy", stop=sl1Price, qty_percent=sl1ClosePercent)

if (sl2Condition)
    strategy.exit("Stop Loss 2", "Buy", stop=sl2Price, qty_percent=sl2ClosePercent)

if (sl3Condition)
    strategy.exit("Stop Loss 3", "Buy", stop=sl3Price, qty_percent=sl3ClosePercent)

// Plotting take-profit and stop-loss levels on the chart
plot(tp1Price, color=color.green, style=plot.style_linebr, title="TP1 Level")
plot(tp2Price, color=color.green, style=plot.style_linebr, title="TP2 Level")
plot(tp3Price, color=color.green, style=plot.style_linebr, title="TP3 Level")

plot(sl1Price, color=color.red, style=plot.style_linebr, title="SL1 Level")
plot(sl2Price, color=color.red, style=plot.style_linebr, title="SL2 Level")
plot(sl3Price, color=color.red, style=plot.style_linebr, title="SL3 Level")


관련

더 많은