채널 브레이크아웃 이동 평균 추종 전략


생성 날짜: 2024-01-15 12:25:26 마지막으로 수정됨: 2024-01-15 12:25:26
복사: 0 클릭수: 639
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

채널 브레이크아웃 이동 평균 추종 전략

개요

이 전략은 가격 채널 기반의 브레이크 전략으로, 평평선 지표와 트래킹 스톱/스트로프를 결합하여 입문과 출구를 한다. 그것은 높은 낮은 가격의 평평선을 사용하여 가격 채널을 구축하고, 가격이 채널을 뚫을 때 상장/공백을 하고, 고정된 스톱 또는 트래일링 스톱을 사용하여 위험을 통제한다.

전략 원칙

이 전략은 높은 가격과 낮은 가격의 평균선을 계산하여 가격 채널을 형성한다. 구체적으로, 10의 길이를 계산하여 높은 가격과 낮은 가격의 SMA 평균선을 계산하여 채널의 상류와 하류를 형성한다. 가격이 하류에서 상류로 돌파 할 때, 더 많은 입장을 취하고, 가격이 상류에서 하류로 돌파 할 때, 공백 입장을 취한다.

입문 후, 전략은 고정된 손실 또는 trailing stop를 사용하여 입지를 종료한다. trailing stop는 두 가지 변수를 포함합니다: 고정된 중지 및 activating offset. 가격이 활성화 오차량을 달성 할 때, 중단은 trail 추적됩니다. 이것은 이익을 잠금화 할 수 있지만 수익을 창출 할 수있는 공간을 유지할 수 있습니다.

이 전략은 동시에 시기를 필터링하고, 지정된 역사적 날짜 내에서만 재검토하여, 다른 시장 단계의 성능을 테스트할 수 있다.

우위 분석

이 전략은 가격 채널과 트렌드 추적 스톱을 사용하여 중장선 트렌드의 방향을 잡을 수 있습니다. 단순한 이동 평균 전략에 비해 가격 변동으로 인한 무효 거래를 줄여줍니다. 트레일링 스톱을 통해 가격을 동적으로 트레일하여 수익을 고정 할 수 있습니다.

전체적으로, 이 전략은 명확한 논리를 가지고 있으며, 지표와 파라미터를 적게 사용하고, 재검토가 쉽고, 중·장선 트렌드 거래에 적합하며, 강세를 보면 수익을 얻을 수 있다.

위험 분석

이 전략은 충격적인 상황에서 빠져나갈 수 있으며 지속적인 수익을 얻지 못합니다. 또한 극단적인 상황에서 가격이 직접적으로 막부 지점을 돌파하여 큰 손실을 초래할 수 있습니다.

매개 변수 설정은 상대적으로 주관적이며, 다른 시장 단계에 따라 매개 변수를 조정할 필요가 있다. 고정된 정지점과 활성화 편향량은 시장의 변동 정도에 따라 조정할 수 없다.

최적화 방향

거래량, 브린 벨트 등과 같은 다른 지표와 함께 진입 신호를 필터링하는 것을 고려할 수 있습니다. 또는 ATR 또는 가격 변동 정도에 따라 동적 스톱을 사용하여 스톱 지점을 설정하십시오.

탈퇴 규칙은 이동 스톱 또는 들리어 엑시트로 최적화할 수 있다. 가격들이 채널로 다시 들어갈 때 부분 탈퇴를 고려할 수도 있다. 입구 필터링과 탈퇴 규칙의 최적화는 전략의 안정성을 크게 향상시킬 수 있다.

요약하다

이 전략은 전체적으로 가격 채널, 트렌드 추적, 스톱/스톱 관리를 기반으로 한 정량화 전략이다. 명확한 논리 구조, 간단한 파라미터 구조를 가지고 있으며, 이해하기 쉽고 재검토가 가능하며, 정량화 거래를 학습하는 데 적합하다. 이 전략은 여러 가지 방법으로 최적화되어 안정성과 수익성을 향상시킬 수 있다.

전략 소스 코드
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-21 23:59:59
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Generalized SSL Backtest w/ TSSL", shorttitle="GSSL Backtest", overlay=true )
// Generalized SSL:
//  This is the very first time the SSL indicator, whose acronym I ignore, is on Tradingview. 
//  It is based on moving averages of the highs and lows. 
//  Similar channel indicators can be found, whereas 
//  this one implements the persistency inside the channel, which is rather tricky.
//  The green line is the base line which decides entries and exits, possibly with trailing stops.
//  With respect to the original version, here one can play with different moving averages.
//  The default settings are (10,SMA)
//
// Vitelot/Yanez/Vts March 2019

lb = input(10, title="Lb", minval=1)
maType = input( defval="SMA", title="MA Type", options=["SMA","EMA","HMA","McG","WMA","Tenkan"])

fixedSL = input(title="SL Activation", defval=300)
trailSL = input(title="SL Trigger", defval=1)
fixedTP = input(title="TP Activation", defval=150)
trailTP = input(title="TP Trigger", defval=1)

FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2019, title = "From Year", minval = 2017)
ToMonth   = input(defval = 6, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 19, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2020, title = "To Year", minval = 2017)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
startTimeOk()  => true // create function "within window of time" if statement true
// QUANDL:BCHAIN/ETRVU is USD-denominated daily transaction value on BTC blockchain
// QUANDL:BCHAIN/MKTCP is USD-denominated Bitcoin marketcap

hma(sig, n) => // Hull moving average definition
    wma( 2*wma(sig,round(n/2))-wma(sig,n), round(sqrt(n)))

mcg(sig,length) => // Mc Ginley MA definition
    mg = 0.0
    mg := na(mg[1]) ? ema(sig, length) : mg[1] + (sig - mg[1]) / (length * pow(sig/mg[1], 4))

tenkan(sig,len) =>
    0.5*(highest(sig,len)+lowest(sig,len))

ma(t,sig,len) =>
    sss=na
    if t =="SMA"
        sss := sma(sig,len)
    if t == "EMA"
        sss := ema(sig,len)
    if t == "HMA"
        sss := hma(sig,len)
    if t == "McG" // Mc Ginley
        sss := mcg(sig,len)
    if t == "Tenkan"
        sss := tenkan(sig,len)
    if t == "WMA"
        sss := wma(sig,len)
    sss

base(mah, mal) =>
    bbb = na
    inChannel = close<mah and close>mal
    belowChannel = close<mah and close<mal
    bbb := inChannel? bbb[1]: belowChannel? -1: 1
    uuu = bbb==1? mal: mah
    ddd = bbb==1? mah: mal
    [uuu, ddd]

maH = ma(maType, high, lb)
maL = ma(maType, low, lb)

[up, dn] = base(maH,maL)

plot(up, title="High MA", color=lime, linewidth=3)
plot(dn, title="Low MA", color=orange, linewidth=3)

long = crossover(dn,up)
short = crossover(up,dn)

// === STRATEGY - LONG POSITION EXECUTION ===
strategy.entry("Long", strategy.long, when= long and startTimeOk())
strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP) 
strategy.exit("Exit", when= short)
// === STRATEGY - SHORT POSITION EXECUTION ===
strategy.entry("Short", strategy.short, when= short and startTimeOk())
strategy.exit("Exit", qty_percent = 100, loss=fixedSL, trail_offset=trailTP, trail_points=fixedTP)
strategy.exit("Exit", when= long)