크로스 타임프레임 슈퍼트렌드 브레이크업 전략

저자:차오장, 날짜: 2023-11-24 10:27:52
태그:

img

전반적인 설명

이 전략은 트렌드 방향과 주요 지원/저항 수준을 식별하기 위해 여러 시간 프레임과 볼링거 밴드에서 슈퍼 트렌드 지표를 통합하고 변동성 중에 브레이크오웃에 거래를합니다. 주로 금, 은, 원유 등과 같은 매우 변동적인 재화 선물에 설계되었습니다.

전략 논리

사용자 지정 파이인 스크립트 기능pine_supertrend()다른 시간 프레임 (예: 1 분과 5 분) 을 통해 슈퍼 트렌드를 계산하고 더 큰 시간 프레임 트렌드의 방향을 결정하기 위해 구현되었습니다.

볼링거 밴드 상부/하부 밴드는 채널로 작용합니다. 브레이크오웃은 트렌드 방향성을 신호합니다. 상부 밴드 위의 클로스는 상승 브레이크오웃을 의미합니다. 하부 밴드 아래에 있는 클로스는 하향 붕괴를 의미합니다.

입력 신호:

길: 닫기 > 상단역 및 닫기 > 슈퍼트렌드 (다중 TF) 짧은: 닫기 < 하위 대역 및 닫기 < 슈퍼 트렌드 (다중 TF)

출구:

긴 출구: 닫기 < 5m 슈퍼 트렌드 짧은 출구: 닫기> 5m 슈퍼 트렌드

그래서 그것은 초상향과 BB 사이의 공명 파장을 휘발성 모멘텀에서 포착하는 것을 목표로합니다.

이점 분석

  • 높은 확신 트렌드 방향성을 결정하기 위해 시간 프레임에 걸쳐 슈퍼 트렌드를 사용합니다.
  • BB 밴드는 잘못된 파장을 피하기 위해 주요 지원/저항 수준으로 작용합니다.
  • 슈퍼트렌드는 위험을 제어하기 위해 동적 스톱 로스로 작용합니다.

위험 분석

  • 슈퍼트렌드는 전환점과 트렌드 반전에서 뒤쳐질 수 있습니다.
  • 부적절한 BB 매개 변수는 너무 많은 거래 또는 너무 적은 거래를 일으킬 수 있습니다.
  • 급격한 하루 간 간격 또는 뉴스 이벤트가 스톱 손실에 영향을 줄 수 있습니다.

위험 완화:

  • 신호를 확인하고 거짓 브레이크를 피하기 위해 더 많은 지표를 추가하십시오.
  • 최고의 균형을 위해 BB 매개 변수를 최적화
  • 격차를 수용하기 위해 스톱 로스 버퍼를 넓혀

더 나은 기회

  • 추가 신호 확인을 위해 KDJ MACD와 같은 다른 트렌드 지표를 테스트하십시오.
  • 분출 확률을 위한 ML 모델을 추가합니다.
  • 최적의 매개 변수 세트를 위한 매개 변수 조정

결론

이 전략은 높은 확률의 거래를 위해 크로스 타임프레임 분석과 채널 브레이크오웃을 사용하여 슈퍼트렌드 및 볼링거 밴드의 힘을 결합합니다. 이는 위험을 효과적으로 제어하고 휘발성 기기에서 좋은 수익을 창출 할 수 있습니다. 추가 최적화 및 지표 조합은 성능을 향상시킬 수 있습니다.


/*backtest
start: 2023-10-24 00:00:00
end: 2023-11-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ambreshc95

//@version=5
strategy("Comodity_SPL_Strategy_01", overlay=false)

// function of st
// [supertrend, direction] = ta.supertrend(3, 10)
// plot(direction < 0 ? supertrend : na, "Up direction", color = color.green, style=plot.style_linebr)
// plot(direction > 0 ? supertrend : na, "Down direction", color = color.red, style=plot.style_linebr)

// VWAP
// src_vwap = input(title = "Source", defval = hlc3, group="VWAP Settings")
// [_Vwap,stdv,_] = ta.vwap(src_vwap,false,1)
// plot(_Vwap, title="VWAP", color = color.rgb(0, 0, 0))



// The same on Pine Script®
pine_supertrend(factor, atrPeriod,len_ma) =>
    
    h= ta.sma(high,len_ma)
    l= ta.sma(low,len_ma)
    hlc_3 = (h+l)/2
    src = hlc_3
    atr = ta.atr(atrPeriod)
    upperBand = src + factor * atr
    lowerBand = src - factor * atr
    prevLowerBand = nz(lowerBand[1])
    prevUpperBand = nz(upperBand[1])

    lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand
    upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand
    int direction = na
    float superTrend = na
    prevSuperTrend = superTrend[1]
    if na(atr[1])
        direction := 1
    else if prevSuperTrend == prevUpperBand
        direction := close > upperBand ? -1 : 1
    else
        direction := close < lowerBand ? 1 : -1
    superTrend := direction == -1 ? lowerBand : upperBand
    [superTrend, direction]
len_ma_given = input(75, title="MA_SMA_ST")
[Pine_Supertrend, pineDirection] = pine_supertrend(3, 10,len_ma_given)
// plot(pineDirection < 0 ? Pine_Supertrend : na, "Up direction", color = color.green, style=plot.style_linebr)
// plot(pineDirection > 0 ? Pine_Supertrend : na, "Down direction", color = color.red, style=plot.style_linebr)
// 
// Define Supertrend parameters
atrLength = input(10, title="ATR Length")
factor = input(3.0, title="Factor")

// // Calculate Supertrend
[supertrend, direction] = ta.supertrend(factor, atrLength)

st_color = supertrend > close ? color.red : color.green
// // Plot Supertrend
// plot(supertrend, "Supertrend", st_color)
// 

// BB Ploting
length = input.int(75, minval=1)
maType = input.string("SMA", "Basis MA Type", options = ["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src = input(close, title="Source")
mult = input.float(2.5, minval=0.001, maxval=50, title="StdDev")

ma(source, length, _type) =>
    switch _type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

basis = ma(src, length, maType)
dev = mult * ta.stdev(src, length)
upper = basis + dev
lower = basis - dev
offset = input.int(0, "Offset", minval = -500, maxval = 500)
plot(basis, "Basis", color=#FF6D00, offset = offset)
p1 = plot(upper, "Upper", color=#2962FF, offset = offset)
p2 = plot(lower, "Lower", color=#2962FF, offset = offset)
fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95))





// h= ta.sma(high,60)
// l= ta.sma(low,60)
// c= sma(close,60)
// hlc_3 = (h+l)/2
// supertrend60 = request.security(syminfo.tickerid,  supertrend)

// // Define timeframes for signals
tf1 = input(title="Timeframe 1", defval="1")
tf2 = input(title="Timeframe 2",defval="5")
// tf3 = input(title="Timeframe 3",defval="30")


// // // Calculate Supertrend on multiple timeframes
supertrend_60 = request.security(syminfo.tickerid, tf1, Pine_Supertrend)
supertrend_5m = request.security(syminfo.tickerid, tf2, supertrend)
// supertrend3 = request.security(syminfo.tickerid, tf3, supertrend)

// // Plot Supertrend_60
st_color_60 = supertrend_60 > close ? color.rgb(210, 202, 202, 69) : color.rgb(203, 211, 203, 52)
plot(supertrend_60, "Supertrend_60", st_color_60)

// // Plot Supertrend_5m
st_color_5m = supertrend_5m > close ? color.red : color.green
plot(supertrend_5m, "Supertrend_5m", st_color_5m)



ma21 = ta.sma(close,21)
// rsi = ta.rsi(close,14)
// rsima = ta.sma(rsi,14)

// Define the Indian Standard Time (IST) offset from GMT
ist_offset = 5.5 // IST is GMT+5:30

// Define the start and end times of the trading session in IST
// start_time = timestamp("GMT", year, month, dayofmonth, 10, 0) + ist_offset * 60 * 60
// end_time = timestamp("GMT", year, month, dayofmonth, 14, 0) + ist_offset * 60 * 60
// Check if the current time is within the trading session
// in_trading_session = timenow >= start_time and timenow <= end_time

in_trading_session = not na(time(timeframe.period, "0945-1430"))
// bgcolor(inSession ? color.silver : na)
out_trading_session = not na(time(timeframe.period, "1515-1530"))
// // // Define buy and sell signals
buySignal = close>upper and close > supertrend_5m and close > supertrend_60 and close > ma21  and in_trading_session //close > supertrend and
sellSignal = close<lower and close < supertrend_5m and close < supertrend_60 and close < ma21  and in_trading_session //close < supertrend and

var bool long_position = false
var bool long_exit = false
var float long_entry_price = 0
var float short_entry_price = 0

if buySignal and not long_position
    // label.new(bar_index, na, yloc = yloc.belowbar, style = label.style_label_up, color = color.green, size = size.small)
    long_position := true
    strategy.entry("Buy",strategy.long)

long_exit := (close < supertrend_5m)
if long_position and long_exit
    // label.new(bar_index, na, yloc = yloc.belowbar, style = label.style_xcross, color = color.green, size = size.tiny)
    long_position := false
    strategy.exit("Exit","Buy",stop = close)

var bool short_position = false
var bool short_exit = false
if sellSignal and not short_position
    // label.new(bar_index, na, yloc = yloc.abovebar, style = label.style_label_down, color = color.red, size = size.small)
    short_position := true
    strategy.entry("Sell",strategy.short)

short_exit := (close > supertrend_5m)
if short_position and short_exit
    // label.new(bar_index, na, yloc = yloc.belowbar, style = label.style_xcross, color = color.red, size = size.tiny)
    short_position := false
    strategy.exit("Exit","Sell", stop = close)

if out_trading_session
    long_position := false
    strategy.exit("Exit","Buy",stop = close)
    short_position := false
    strategy.exit("Exit","Sell", stop = close)

// if long_position
//     long_entry_price := close[1] + 50//bar_index

// if short_position
//     short_entry_price := close[1] - 50//bar_index

// if (long_position and high[1] > long_entry_price)
//     label.new(bar_index, na, yloc = yloc.abovebar, style = label.style_triangledown, color = color.yellow, size = size.tiny)

// if (short_position and low[1] < short_entry_price)
//     label.new(bar_index, na, yloc = yloc.belowbar, style = label.style_triangleup, color = color.yellow, size = size.tiny)




더 많은