슈퍼구스 역삼각형 이동평균 거래 전략


생성 날짜: 2023-11-21 14:05:40 마지막으로 수정됨: 2023-11-21 14:05:40
복사: 0 클릭수: 1030
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

슈퍼구스 역삼각형 이동평균 거래 전략

개요

이 전략의 주요 아이디어는 여러 다른 주기의 이동 평균을 사용하여 슈퍼 거래 신호를 구축하여 상대적으로 더 긴 주기 방향성 트렌드를 탐색하는 것입니다. 슈퍼 은 빠른 이동 평균과 느린 이동 평균의 두 개의 라인을 구성하며, 빠른 라인은 특정 입문 지점을 결정하며, 느린 라인은 전체 거래 방향을 결정합니다. 빠른 라인이 아래에서 위쪽으로 흐를 때 다단 신호를 생성하고, 위쪽으로 흐를 때 공백 신호를 생성합니다.

원칙

이 전략은 다양한 기간의 EMA 평균선을 사용한다.

  • 빠른 라인: 3주기, 6주기… 21주기 7개 라인
  • 느린 선: 24주기, 27주기… 200주기 선

고속선은 서로 교차할 때 파란색 ((상승) 과 오렌지 ((하락)) 으로, 느린선은 교차할 때 녹색 ((상승) 과 빨간색 ((하락)) 으로 나다. 고속선은 파란색이 회색에서 녹색으로 느린선으로 전환할 때 다단계 신호를 발생시키며, 반대로 녹색에서 회색으로 전환할 때 평면 다단계 신호를 발생시킨다. 회색에서 빨간색으로 전환할 때 공백 신호를 발생시킨다.

이 전략은 동시에 두 가지 모드를 제공합니다. 안정 모드는 빠른 속도 EMA가 방향을 결정한 후에만 거래합니다. 급격한 모드는 빠른 속도 EMA의 방향이 변하면 신호를 발생시킵니다.

장점

이 전략은 쌍평선 시스템의 장점을 결합하여 짧은 선주기 내의 거래 기회를 적시에 잡을 수 있으며, 느린 선을 사용하여 과도한 가짜 신호를 제거 할 수 있습니다. 구체적인 장점은 다음과 같습니다:

  1. 빠른 속도 EMA 라인이 협력하여 위험을 효과적으로 제어할 수 있습니다.
  2. 이 모드는 단기적 인 기회를 잡을 수 있습니다.
  3. 안정적인 모델은 높은 확률과 높은 수익률의 기회를 제공합니다.
  4. 수동 변수 최적화 공간은 넉넉하다.

위험

이 전략에는 몇 가지 위험도 있습니다.

  1. 큰 변동이 있을 때, 시장에 노출되는 시간이 더 길어질 수 있습니다.
  2. 다중 그룹均線 시스템, 파라미터 최적화 및 테스트 난이도가 크다.
  3. 안정 모드에서, 이윤의 일부는 빠른 EMA 라인의 지연 특성으로 전달된다.

빠른 속도 EMA 파라미터 조합을 적절히 조정하거나 손실을 중지하여 위험을 제어 할 수 있습니다.

최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 변동률에 기반한 상쇄를 증가시켜 개별 대지진 후의 손실을 효과적으로 통제할 수 있다.
  2. 기계 학습 알고리즘으로 EMA 파라미터를 최적화 해보세요. 이것은 파라미터를 활용하는 효율성을 크게 향상시킬 수 있습니다.
  3. 수량/가격 포트폴리오 필터를 추가하여 실질적인 거래 기회를 높일 수 있습니다.
  4. 다른 지표와 EMA를 교차하여 조합하는 것을 탐구하십시오. 이렇게하면 거래의 정확성을 더 높일 수 있습니다.

요약하다

이 슈퍼 전략은 여러 시간 주기적 요소를 고려하여 위험을 통제하면서 수익 기회를 향상시킵니다. 여러 가지 방법으로 최적화 할 수 있으며, 정량 거래자가 깊이 연구 할 가치가 있습니다.

전략 소스 코드
/*backtest
start: 2023-11-13 00:00:00
end: 2023-11-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


// A strategized version Daryl Guppy Super EMA's with additional options
// by default "early signals" is enabled, which will trade any green/gray or red/gray transitions of the guppy.  Disable to only take longs while green, and shorts while red.
//@version=4

strategy(title="Super Guppy Strategy", shorttitle="Super Guppy Strat", overlay = true, 
  initial_capital=100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type="percent", commission_value=0.0)

useShorts       = input(true, "Test w/Shorts?")
useEarlySignals = input(true, "Use Early Signals?")
show200Ema      = input(false, "Show 200 EMA?")
daysBackMax     = input(defval = 100000, title = "Max Days Back to Test", minval = 0)
daysBackMin     = input(defval = 0, title = "Min Days Back to Test", minval = 0)
msBackMax       = 1000 * 60 * 60 * 24 * daysBackMax
msBackMin       = 1000 * 60 * 60 * 24 * daysBackMin


src = close, 
len1 = input(3, minval=1, title="Fast EMA 1")
len2 = input(6, minval=1, title="Fast EMA 2")
len3 = input(9, minval=1, title="Fast EMA 3")
len4 = input(12, minval=1, title="Fast EMA 4")
len5 = input(15, minval=1, title="Fast EMA 5")
len6 = input(18, minval=1, title="Fast EMA 6")
len7 = input(21, minval=1, title="Fast EMA 7")
//Slow EMA
len8 = input(24, minval=1, title="Slow EMA 8")
len9 = input(27, minval=1, title="Slow EMA 9")
len10 = input(30, minval=1, title="Slow EMA 10")
len11 = input(33, minval=1, title="Slow EMA 11")
len12 = input(36, minval=1, title="Slow EMA 12")
len13 = input(39, minval=1, title="Slow EMA 13")
len14 = input(42, minval=1, title="Slow EMA 14")
len15 = input(45, minval=1, title="Slow EMA 15")
len16 = input(48, minval=1, title="Slow EMA 16")
len17 = input(51, minval=1, title="Slow EMA 17")
len18 = input(54, minval=1, title="Slow EMA 18")
len19 = input(57, minval=1, title="Slow EMA 19")
len20 = input(60, minval=1, title="Slow EMA 20")
len21 = input(63, minval=1, title="Slow EMA 21")
len22 = input(66, minval=1, title="Slow EMA 22")
len23 = input(200, minval=1, title="EMA 200")

//Fast EMA
ema1 = ema(src, len1)
ema2 = ema(src, len2)
ema3 = ema(src, len3)
ema4 = ema(src, len4)
ema5 = ema(src, len5)
ema6 = ema(src, len6)
ema7 = ema(src, len7)

//Slow EMA
ema8 = ema(src, len8)
ema9 = ema(src, len9)
ema10 = ema(src, len10)
ema11 = ema(src, len11)
ema12 = ema(src, len12)
ema13 = ema(src, len13)
ema14 = ema(src, len14)
ema15 = ema(src, len15)
ema16 = ema(src, len16)
ema17 = ema(src, len17)
ema18 = ema(src, len18)
ema19 = ema(src, len19)
ema20 = ema(src, len20)
ema21 = ema(src, len21)
ema22 = ema(src, len22)

//EMA 200
ema23 = ema(src, len23)

//Fast EMA Color Rules
colfastL = (ema1 > ema2 and ema2 > ema3 and ema3 > ema4 and ema4 > ema5 and ema5 > ema6 and ema6 > ema7)
colfastS = (ema1 < ema2 and ema2 < ema3 and ema3 < ema4 and ema4 < ema5 and ema5 < ema6 and ema6 < ema7)
//Slow EMA Color Rules
colslowL = ema8 > ema9 and ema9 > ema10 and ema10 > ema11 and ema11 > ema12 and ema12 > ema13 and ema13 > ema14 and ema14 > ema15 and ema15 > ema16 and ema16 > ema17 and ema17 > ema18 and ema18 > ema19 and ema19 > ema20 and ema20 > ema21 and ema21 > ema22
colslowS = ema8 < ema9 and ema9 < ema10 and ema10 < ema11 and ema11 < ema12 and ema12 < ema13 and ema13 < ema14 and ema14 < ema15 and ema15 < ema16 and ema16 < ema17 and ema17 < ema18 and ema18 < ema19 and ema19 < ema20 and ema20 < ema21 and ema21 < ema22 
//Fast EMA Final Color Rules
colFinal = colfastL and colslowL? color.aqua : colfastS and colslowS? color.orange : color.gray
//Slow EMA Final Color Rules
colFinal2 = colslowL  ? color.lime : colslowS ? color.red : color.gray 
// iff colSlowL then lime, otherwise is colSlowS, then red, otherwise gray

// open long:  grey to green
// close long:  green to grey
// open short: grey to red
// close short: red to grey


//Fast EMA Plots
p1=plot(ema1, linewidth=2, color=colFinal)
plot(ema2, linewidth=1, color=colFinal)
plot(ema3, linewidth=1, color=colFinal)
plot(ema4, linewidth=1, color=colFinal)
plot(ema5, linewidth=1, color=colFinal)
plot(ema6, linewidth=1, color=colFinal)
p2=plot(ema7, linewidth=2, color=colFinal)

//Slow EMA Plots
p3=plot(ema8, linewidth=1, color=colFinal2)
plot(ema9, linewidth=1, color=colFinal2)
plot(ema10,linewidth=1, color=colFinal2)
plot(ema11,linewidth=1, color=colFinal2)
plot(ema12,linewidth=1, color=colFinal2)
plot(ema13,linewidth=1, color=colFinal2)
plot(ema14,linewidth=1, color=colFinal2)
plot(ema15,linewidth=1, color=colFinal2)
plot(ema16,linewidth=1, color=colFinal2)
plot(ema17,linewidth=1, color=colFinal2)
plot(ema18,linewidth=1, color=colFinal2)
plot(ema19,linewidth=1, color=colFinal2)
plot(ema20,linewidth=1, color=colFinal2)
plot(ema21,linewidth=1, color=colFinal2)
plot(ema22,linewidth=2, color=colFinal2)
p4=plot(show200Ema==true ? ema23 : na, linewidth=2)

var isLong = false
var isShort = false

long = not isLong and ((colFinal2 == color.lime and colFinal2[1] == color.gray) or (colFinal2 == color.gray and colFinal2[1] == color.red))
short = not isShort and ((colFinal2 == color.gray and colFinal2[1] == color.lime) or (colFinal2 == color.red and colFinal2[1] == color.gray))

if long
    isLong := true
    isShort := false

if short
    isLong := false
    isShort := true

openLong = colFinal2 == color.lime and colFinal2[1] == color.gray
closeLong = colFinal2 == color.gray and colFinal2[1] == color.lime
openShort = colFinal2 == color.red and colFinal2[1] == color.gray
closeShort = colFinal2 == color.gray and colFinal2[1] == color.red


// default - no early signals
plotshape(openLong and not useEarlySignals, title="open long", text="open long", style=shape.labelup, location=location.belowbar, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
plotshape(closeLong and not useEarlySignals, title="close long", text="close long", style=shape.labeldown, location=location.abovebar, size=size.tiny, color=color.gray, textcolor=color.white, transp=0)
plotshape(openShort and useShorts and not useEarlySignals, title="open short", text="open short", style=shape.labelup, location=location.belowbar, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
plotshape(closeShort and useShorts and not useEarlySignals, title="close short", text="close short", style=shape.labeldown, location=location.abovebar, size=size.tiny, color=color.black, textcolor=color.white, transp=0)

// with early signals
plotshape(long and useEarlySignals, title="long", text="long", style=shape.labelup, location=location.belowbar, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
plotshape(short and useEarlySignals and useShorts, title="short", text="short", style=shape.labeldown, location=location.abovebar, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
plotshape(short and useEarlySignals and not useShorts, title="close long", text="close long", style=shape.labeldown, location=location.abovebar, size=size.tiny, color=color.red, textcolor=color.white, transp=0)




isWithinTimeBounds = (msBackMax == 0 or (time > (timenow - msBackMax))) and (msBackMin == 0 or (time < (timenow - msBackMin)))
strategy.entry("LONG", long=true, when=openLong and isWithinTimeBounds and not useEarlySignals)
strategy.close("LONG", when=closeLong and isWithinTimeBounds and not useEarlySignals)
strategy.entry("short", long=false, when=openShort and useShorts and isWithinTimeBounds and not useEarlySignals)
strategy.close("short", when=closeShort and useShorts and isWithinTimeBounds and not useEarlySignals)

strategy.entry("LONG", long=true, when=long and isWithinTimeBounds and useEarlySignals)
strategy.close("LONG", when=short and isWithinTimeBounds and useEarlySignals)
strategy.entry("short", long=false, when=short and useShorts and isWithinTimeBounds and useEarlySignals)
strategy.close("short", when=long and useShorts and isWithinTimeBounds and not useEarlySignals)