트렌드 황소/곰 교차 거래 전략

저자:차오장, 날짜: 2023-10-07 09:56:30
태그:

전반적인 설명

이 전략은 트렌드 방향을 결정하고 구매 및 판매 신호를 생성하기 위해 이동 평균 크로스오버 원리를 사용합니다. 간단하고 신뢰할 수 있으며 안정적인 수익을 추구하는 투자자에게 적합합니다.

원칙

이 전략은 두 개의 이동 평균, 7 일 MA를 빠른 라인과 5 개월 MA를 느린 라인으로 사용한다. 빠른 라인은 가격 변화를 빠르게 캡처하고 느린 라인은 소음을 필터하고 트렌드 방향을 결정한다. 빠른 라인이 밑에서 느린 라인의 위로 넘어가면 긴 거리의 상승 신호로 간주된다. 빠른 라인이 위에서 느린 라인을 깨면 짧은 거리의 하락 신호로 간주된다.

특히, 전략은 7일 간 간단한 이동 평균 (SMA) 과 5개월 간 SMA를 계산하여 가격 차트에 그릴 수 있다. 7일 라인이 아래로부터 5개월 라인을 넘을 때 구매 신호가 생성된다. 7일 라인이 위로부터 5개월 라인을 넘을 때 판매 신호가 트리거된다. 전략은 또한 신호 기간을 시각화한다.

장점

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 간단하고 신뢰할 수 있는 이론적 기초, 널리 알려진 이동 평균 교차 원칙에 기초합니다.

  2. 두 개의 이동 평균만 사용되며, 간단한 매개 변수 선택과 쉬운 구현이 가능합니다.

  3. 빠른 라인과 느린 라인은 동향을 파악하고 시장 소음을 필터링하기 위해 효과적으로 함께 작동합니다.

  4. 서로 다른 기간 MAs를 통해 다른 시간 프레임이 캡처되며, 여러 척도의 트렌드 변화를 감지합니다.

  5. 간단하고 이해하기 쉬운 논리로 구현

  6. 시각화 된 신호는 거래를 결정하는 데 명확하고 직관적입니다.

위험성

또한 몇 가지 위험이 있습니다.

  1. 거짓 신호에 취약한 경우, MA 교차로만 의존합니다.

  2. 트렌드 강도를 효과적으로 판단할 수 없어서, 시장에서 빈번한 스톱 로스를 초래합니다.

  3. 고정된 MA 기간은 시장 변화에 적응할 수 없어 매개 변수를 최적화해야 합니다.

  4. 입구와 출구 수준은 불분명합니다.

  5. 단순화된 이론적 근거는 성과와 수익 잠재력을 손상시킬 수 있습니다.

강화

이 전략은 다음과 같은 측면에서 개선될 수 있습니다.

  1. 입시 및 출구 수준을 결정하기 위해 다른 지표를 추가하십시오. 예를 들어, 과잉 구매/ 과잉 판매를위한 KDJ.

  2. 손실을 제한하기 위해 트레일링 스톱과 같은 스톱 손실 메커니즘을 구현하십시오.

  3. 다양한 시장 순환에 적응하기 위해 MA 기간을 최적화합니다.

  4. 부진을 방지하기 위해 볼륨 필터를 추가합니다.

  5. 트렌드 강도, 예를 들어 MA 기울기를 평가하여 지점 크기를 스케일합니다.

  6. 더 나은 트렌드 연속성을 위해 여러 시간 프레임을 포함합니다.

결론

이 전략은 MA 크로스오버 이론을 기반으로 간단하고 신뢰할 수 있는 황소/곰 트렌드를 식별합니다. 장점은 단순성과 사용 편의성이며, 단점은 트렌드를 따르는 본질적인 위험입니다. 미세 조정 매개 변수, 보조 지표 등을 추가하면 전략 성능을 향상시킬 수 있습니다. 투자자는 위험을 감수하는 것에 따라 사용할 수 있습니다.


/*backtest
start: 2022-09-30 00:00:00
end: 2023-10-06 00:00:00
period: 1d
basePeriod: 1h
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/
// © dadashkadir

//@version=4
strategy("Mount MaV - Day MaV CrossOver Strgty", shorttitle="Yusram Str.", overlay=true)
src = input(title= "Kaynak", type=input.source, defval=close)
mav = input(title="Hareketli Ortlama Tipi", defval="SMA", options=["SMA", "EMA", "WMA"])
Gbar = input(title="Günlük Bar Sayısı", defval=7, minval=1, maxval=999)
Abar = input(title="Aylık Bar Sayısı", defval=5, minval=1, maxval=999)
//displacement = input(20, minval=1, title="Displacement")
getMA(src, length) =>
    ma = 0.0
    if mav == "SMA"
        ma := sma(src, length)
        ma

    if mav == "EMA"
        ma := ema(src, length)
        ma

    if mav == "WMA"
        ma := wma(src, length)
        ma
    ma
long = "M" //Aylık
ln = security(syminfo.ticker, long, src)
lnma = getMA(ln, Abar)
gnma = getMA(src, Gbar)
col1= gnma>gnma[1]
col3= gnma<gnma[1]
colorM = col1 ? color.green : col3 ? color.navy : color.yellow
l1 = plot(lnma, title="MhO", trackprice = true, style=plot.style_line, color=color.red, linewidth=3)
l2 = plot(gnma, title="DhO", trackprice = true, style=plot.style_line, color=colorM, linewidth=3)
fill(l1, l2, color = lnma < gnma ? color.green : color.red, title="Gölgelendirme", transp=90)
zamanaralik = input (2020, title="Backtest Başlangıç Tarihi")
al  = crossover (gnma, lnma) and zamanaralik <= year
sat = crossover (lnma, gnma) and zamanaralik <= year
plotshape(al,  title = "Giriş",  text = 'Al',  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny)
plotshape(sat, title = "Çıkış", text = 'Sat', style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, transp = 0, size = size.tiny)

FromDay    = input(defval = 1, title = "Str. Başlama Tarihi Gün", minval = 1, maxval = 31)
FromMonth  = input(defval = 1, title = "Str. Başlama Tarihi Ay", minval = 1, maxval = 12)
FromYear   = input(defval = 2015, title = "Str. Başlama Tarihi Yıl", minval = 2005)
ToDay      = input(defval = 1, title = "Str. Bitiş Tarihi Gün", minval = 1, maxval = 31)
ToMonth    = input(defval = 1, title = "Str. Bitiş Tarihi Ay", minval = 1, maxval = 12)
ToYear     = input(defval = 9999, title = "Str. Bitiş Tarihi Yıl", minval = 2006)
Start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)
Finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)
Timerange() =>
    time >= Start and time <= Finish ? true : false
if al
    strategy.entry("Al", strategy.long, when=Timerange())
if sat
    strategy.entry("Sat", strategy.short, when=Timerange())


더 많은