신성한 잔 전략

저자:차오장, 날짜: 2023-12-01 15:27:39
태그:

img

신성한 잔 전략

신성 잔 전략은 양적 거래 전략으로 ADX 지표와 이중 이동 평균 시스템을 결합합니다. 트렌드의 방향과 강도를 파악하고 트렌드 역전 시 거래하는 것을 목표로합니다.

전략 원칙

이 전략은 20일 지수 이동 평균 (EMA) 와 ADX 지표를 사용하여 진입 기회를 식별합니다. 구체적으로 다음 두 가지 경우에 거래 신호를 발행합니다.

  1. ADX 값이 30보다 낮을 때 (더 약한 경향을 나타냅니다) 그리고 가격이 아래로부터 20일 EMA를 깨면, 길게 이동합니다.

  2. ADX 값이 30보다 높을 때 (더 강한 경향을 나타냅니다) 그리고 가격이 20일 EMA를 넘어서면 짧습니다.

이 전략은 ADX에 의존하여 트렌드의 강도와 방향을 판단하고, 이동 평균의 지지와 저항을 결합하여 반전 기회를 찾는 것을 볼 수 있습니다. 트렌드를 따르는 개념과 평균 반전을 통합합니다.

이점 분석

신성 잔 전략의 가장 큰 장점은 트렌드의 방향과 강도를 모두 고려하여 잘못된 브레이크를 효과적으로 방지하고 스톱 로스 가능성을 줄일 수 있다는 것입니다. 구체적으로이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 이중 이동평균 시스템을 사용하면 트렌드를 효과적으로 식별할 수 있습니다.
  2. ADX의 도움으로 트렌드의 강도를 평가하면 무효 브레이크오웃을 피할 수 있습니다.
  3. 반전과 트렌드 거래 개념을 결합하면 트렌드를 포착하고 전환점에 반전할 수 있습니다.
  4. 운영 규칙은 명확하고 간단하고 실행하기 쉽습니다.

위험 분석

신성한 잔 전략은 또한 다음과 같은 영역에서 주로 몇 가지 위험을 가지고 있습니다.

  1. ADX는 보조 판단 지표로도 잘못된 신호를 발산합니다.
  2. 이중 이동 평균의 크로스오버는 작은 상승으로 인한 손실을 완전히 피할 수 없습니다.
  3. 부적절한 매개 변수 설정 (ADX 목표 값, 이동 평균 기간 등) 은 신호가 너무 자주 또는 보수적 인 원인이 될 수 있습니다.

위의 위험을 줄이기 위해, 매개 변수를 가장 좋은 효과를 얻기 위해 조정할 수 있다. 또한 단 하나 손실을 제어하기 위해 스톱 로스를 설정할 수 있다. 또한, 다양한 품종과 주기에 대한 전략을 테스트하는 것도 필요하다.

최적화 방향

여전히 많은 최적화 방향이 있습니다.

  1. 가중화 가중화 등 다양한 종류의 이동 평균을 시도해보세요.
  2. ADX 목표값은 매개 변수로 최적화될 수 있습니다.
  3. 10일, 30일 EMA와 같은 다양한 사이클 매개 변수를 테스트할 수 있습니다.
  4. 거래 신호를 확인하기 위해 RSI, 볼링거 밴드 등 기타 보조 지표가 추가 될 수 있습니다.

매개 변수를 조정하거나 새로운 지표를 추가하면 전략의 수익성 또는 승률이 증가 할 수 있습니다. 그러나 모든 최적화는 안정성을 보장하기 위해 충분한 백테스팅이 필요합니다.

요약

요약하자면, 신성 잔 전략은 이중 이동 평균과 ADX 지표의 장점을 결합하고 트렌드 반전을 포착하기 위해 명확한 거래 규칙을 사용합니다. 좋은 성과를 낼 잠재력이 있습니다. 그러나 거래자는 여전히 다른 시장 환경에 적응하기 위해 매개 변수 조합과 스톱 손실 규칙을 최적화해야합니다. 게다가 아무리 개선되었더라도 모든 거래 전략이 직면하는 딜레마인 스톱 손실을 완전히 피할 수는 없습니다.


/*backtest
start: 2022-11-24 00:00:00
end: 2023-11-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("LAT Holy Grail v3", overlay=true)

/////////////TEST TIME ////////////////////////
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(4, "Backtest Start Month")
testStartDay = input(15, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)

testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(5, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)

// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)

testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
//////////////////////////////////////////////////////////////////////

myema= ema(close, 20)
plot(myema, color=green, title="eMA", linewidth=3)



//longCondition = (crossover(close, myema)) //and adx3 < target
//if (longCondition)
    //strategy.entry("My Long Entry Id", strategy.long)

//shortCondition = (crossunder(close, myema)) //and adx3 > target
//if (shortCondition)
    //strategy.entry("My Short Entry Id", strategy.short)
    
    //////////////////////////////////////////////////////////
    ///////////////////////////////////////   DMI  ///////////////////////////////////////////////
len3 = input(14, minval=1, title="DI Length")                           /////////////////////
lensig3 = input(14, title="ADX Smoothing", minval=1, maxval=50)         ////////////////////
up3 = change(high)                                                      ///////////////////
down3 = -change(low)                                                    //////////////////
plusDM3 = na(up3) ? na : (up3 > down3 and up3 > 0 ? up3 : 0)            /////////////////
minusDM3 = na(down3) ? na : (down3 > up3 and down3 > 0 ? down3 : 0)     ////////////////
trur3 = rma(tr, len3)                                                   ///////////////
plus3 = fixnan(100 * rma(plusDM3, len3) / trur3)                        //////////////
minus3 = fixnan(100 * rma(minusDM3, len3) / trur3)                      /////////////
sum3 = plus3 + minus3                                                   ////////////
adx3 = 100 * rma(abs(plus3 - minus3) / (sum3 == 0 ? 1 : sum3), lensig3) ///////////
//plot(plus3, color=green, style=circles, linewidth=2, title="+DI")     //////////
//plot(minus3, color=red, style=circles, linewidth=2, title="-DI")      /////////
plot(adx3, color=aqua, style=line, linewidth=3, title="ADX")            ////////
target = input(30, title=" ADX Target Line")                            ///////
plot(target, color=yellow, title="ADX Target Line")                     //////
/////////////////////////////////////////////////////////////////////////////////////////////////
                                                                                        
plot(hl2)


///////////////////////////////////////////////  eMA SIGNAL LINE   ///////////////////////////////////////

//////////////////////////////////////////////////////////////////////////////////////////////////////////

//////////////////////////////////////// HOLY GRAIL STRATEGY ///////////////////////////////////////////////////////////////////

if (adx3 <= target) and crossover(close, myema)
    strategy.entry("HolyGrail", strategy.long, comment="Long")
 
if (adx3 >= target) and crossunder(close, myema)
    strategy.entry("HolyGrail", strategy.short, comment="Short")
    


더 많은