추세와 이동평균선 교차를 기반으로 한 다기능 양적 거래 전략


생성 날짜: 2023-12-08 12:14:50 마지막으로 수정됨: 2023-12-08 12:14:50
복사: 0 클릭수: 631
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

추세와 이동평균선 교차를 기반으로 한 다기능 양적 거래 전략

개요

이 전략은 여러 가지 기술적 지표와 거래 개념을 통합하여 자동으로 구매 및 판매 신호를 생성 할 수 있습니다. 주요 특징은 트렌드 분석 지표와 결합하여 최적화된 스톱 로스를 구현하고, 평행선 교차를 사용하여 거래 신호를 생성하는 것입니다.

전략 원칙

기술 지표

  • 맞춤형 UTSTC 지표: 평균 실제 파장을 기반으로 적응된 스톱로스 지표가 구현되어 시장의 변동성에 따라 스톱로스 범위를 조정할 수 있다.

  • STC 지표: 빠른 간단한 이동 평균과 느린 간단한 이동 평균의 차이는 시장 추세 방향과 잠재적인 반전점을 판단하기 위해 사용됩니다.

  • 간단한 이동 평균 ((SMA) 과 지수 이동 평균 ((EMA): 다른 주기의 이동 평균을 계산하고 그림을 그리며, 트렌드를 판단하는 추가 정보를 제공한다.

거래 신호

  • 구매 신호: 종전 가격에 UTSTC 지표가 통과되고 STC 지표가 부자 상태일 때 발생한다.

  • 팔기 신호: 종결 가격이 UTSTC 지표를 아래로 돌파하고 STC 지표가 하향 상태에 있을 때 발생한다.

전략적 이점

  • 여러 지표들을 통합하여 시장의 흐름을 판단하여 신호의 정확도를 높일 수 있다.

  • UTSTC 지표는 실제 파장에 따라 자동으로 스톱 로즈 범위를 조정하여 각 손실을 효과적으로 제어합니다.

  • 평행선 교차를 이용하여 간단한 효과적인 거래 신호를 생성한다.

  • 다양한 파라미터 설정 조합은 더 많은 시장 환경에 적합합니다.

전략적 위험

  • STC와 같은 트렌드 판단 지표가 뒤쳐져 있고, 단기 반전 기회를 놓칠 수 있다.

  • 평선 교차 신호는 가짜 신호를 생성할 수 있다.

  • 각 변수 설정을 신중하게 평가해야 하며, 부적절한 조합은 수익을 감소시키거나 손실을 증가시킬 수 있다.

  • 너무 큰 손실 범위는 손실 위험을 증가시킬 수 있고 너무 작은 손실 범위는 조기 중단 될 수 있습니다.

최적화 방향

  • 다양한 길이의 주기의 STC 지표 변수를 테스트하여 전략에 가장 적은 영향을 미치는 설정을 찾습니다.

  • KDJ, MACD 등과 같은 다른 지표와 함께 필터링하는 것을 시도하십시오.

  • 피드백 결과에 따라 스톱로스 파라미터를 조정하여 최적의 파라미터 조합을 찾습니다.

  • 다양한 포지션 시간 설정을 평가하여 최적의 포지션 기간을 찾습니다.

요약하다

이 전략은 트렌드 판단, 자동 중지 관리 및 거래 신호 판단의 여러 모듈을 통합하여 보다 포괄적인 수치화 거래 프로그램을 형성한다. 매개 변수 조정 및 기능 확장으로 안정적인 수익을 얻을 수 있다. 그러나 어떤 전략도 손실을 완전히 피할 수 없으며, 신중한 유효성 검증과 위험을 잘 제어해야 한다.

전략 소스 코드
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("OB+LQ+UTSTC+SMA+EMA-NORA-MIP21-Jashore-Bangladesh-OneMinuteTF", shorttitle="OB+LS+UTSTC-MIP21-Jashore-Bangladesh-OneMinuteTF", overlay=true)

// Order Block + Liquidity Swings [NORA] Settings
pivot_length = input(14, title="Pivot Lookback")
bull_ext_last = input(3, title="Bullish OB Extension")
bear_ext_last = input(3, title="Bearish OB Extension")
swing_length = input(5, title="Swing Length")
area = input("Wick Extremity", title="Swing Area", options=["Wick Extremity", "Full Range"])
min_profit = input(0.5, title="Minimum Profit Target")
max_loss = input(0.5, title="Maximum Loss Stop")

// Variables
var float bull_ob_price = na
var float bear_ob_price = na
var float swing_high = na
var float swing_low = na

// Calculate Order Block Prices
var float low_lowest = na
var float high_highest = na
if bar_index >= pivot_length
    low_lowest := lowest(low, pivot_length)
    high_highest := highest(high, pivot_length)
    bull_ob_price := low_lowest
    bear_ob_price := high_highest

// Calculate Swing High/Low Prices
var float low_lowest_swing = na
var float high_highest_swing = na

if area == "Wick Extremity"
    low_lowest_swing := lowest(low, swing_length)
    high_highest_swing := highest(high, swing_length)
else
    low_lowest_swing := lowest(high - low, swing_length)
    high_highest_swing := highest(high - low, swing_length)

swing_low := low_lowest_swing
swing_high := high_highest_swing

// Trading Logic for Order Block + Liquidity Swings
buy_liquidity = crossover(close, bull_ob_price) and close > swing_low
sell_liquidity = crossunder(close, bear_ob_price) and close < swing_high

// Plot Buy/Sell Signals for Order Block + Liquidity Swings
plotshape(series=buy_liquidity, style=shape.labelup, location=location.belowbar, color=color.rgb(39, 166, 175), size=size.small, title="Bullish LQ")
plotshape(series=sell_liquidity, style=shape.labeldown, location=location.abovebar, color=color.rgb(248, 95, 215), size=size.small, title="Bearish LQ")

// UTSTC-SMA-EMA-NORA-New Settings
keyvalue = input(3, title="UT Bot Key Value", step=0.5)
atrperiod = input(10, title="UT Bot ATR Period")
src = close

xATR = atr(atrperiod)
nLoss = keyvalue * xATR
xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))
pos = 0   
pos := iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue
plot(xATRTrailingStop, color=xcolor, title="UT Bot Trailing Stop")

// STC Settings
stc_length = input(12, title="STC Length")
fastLength = input(26, title="STC Fast Length")
slowLength = input(50, title="STC Slow Length")
fastMA = ema(close, fastLength)
slowMA = ema(close, slowLength)
STC = fastMA - slowMA
STCColor = STC > STC[1] ? color.green : color.red
plot(STC, color=STCColor, title="STC")

// Add SMAs
sma21 = sma(close, 21)
sma44 = sma(close, 44)
plot(sma21, color=color.blue, title="SMA 21")
plot(sma44, color=color.orange, title="SMA 44")

// Add EMA
ema5 = ema(close, 5)
plot(ema5, color=color.yellow, title="EMA 5")

// Combined Strategy
buySignal = crossover(src, xATRTrailingStop) and STC < 25 and STCColor == color.green
sellSignal = crossunder(src, xATRTrailingStop) and STC > 75 and STCColor == color.red

// Plot Buy and Sell signals as triangles
plotshape(series=buySignal, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(series=sellSignal, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)

strategy.entry("Buy", strategy.long, when=buySignal)
strategy.entry("Sell", strategy.short, when=sellSignal)