이동 평균에 기초한 바닥을 넘나드는 Sawtooth 수익 중지 전략

저자:차오장, 날짜: 2023-12-21 12:26:18
태그:

img

전반적인 설명

이 전략은 이동 평균의 황금 십자 및 죽음의 십자 기반의 포지션을 열고 바닥을 가로질러 수익을 취하고 손실을 중지합니다. 주요 특징은 다음과 같습니다.

  1. 이동 평균 시스템을 사용하여 충격을 필터
  2. 동적인 자본 관리를 위해 수익을 취하고 손실을 멈추는 것을 채택하십시오.
  3. 단방향 열기를 방지하기 위해 설정 가능한 위치 필터링

전략 원칙

이 전략은 네 가지 부분으로 구성됩니다.

  1. 이동 평균 시스템

    트렌드를 결정하고 충격을 필터하기 위해 이동 평균의 황금 십자와 죽음의 십자 사용.

  2. 이사 는 이득 을 가져오고 손실 을 막는다

    이윤을 확보하고 위험을 통제하기 위해 특정 비율로 수익을 취하고 손실을 중지하여 동적인 자본 관리를 실현합니다.

  3. 위치 필터링

    위치 필터링을 활성화하는지를 설정할 수 있습니다. 이전 위치가 길다면, 다음 신호는 단위로 위치를 열어야 하며, 일방적인 유지를 피해야 합니다.

  4. ATR 스톱 손실

    ATR을 사용해서 최대 스톱 손실 범위를 제한하고 과도한 스톱 손실을 피합니다.

구체적으로, 전략은 먼저 이동 평균, 황금 십자가에 긴, 그리고 죽음의 십자가에 짧은 계산. 입력 후, 특정 비율로 이동 취득 및 중지 손실 라인을 설정합니다. 가격이 취득 라인을 만지면, 이익을 취득; 중지 손실 라인을 만지면 또는 ATR 중지 손실 범위를 초과하면, 중지 손실.

장점

이 전략의 주요 장점은 다음과 같습니다.

  1. 높은 구성성

    전략의 많은 매개 변수는 사용자가 거래 스타일에 따라 조정할 수 있습니다.

  2. 좋은 자본 관리

    이동 수익 및 스톱 손실 및 ATR 스톱 손실을 채택하면 단일 스톱 손실의 폭을 효과적으로 제어하고 우수한 자본 관리를 달성 할 수 있습니다.

  3. 트렌딩 시장에 적합합니다

    이동평균 전략 자체는 강한 트렌드 시장에서 쇼크를 효과적으로 필터하기 위해 더 적합합니다.

위험 과 대책

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

  1. 추세 잘못 판단

    복잡한 시장에서 이동 평균에 대한 판단은 완벽하지 않으며 잘못된 판단이 발생할 수 있습니다. 이 시점에서 이동 평균 매개 변수를 적절히 조정하거나 다른 지표를 결합하여 경향을 판단해야합니다.

  2. 과도한 스톱 로스

    이동 스톱 손실은 충격에서 부정 될 수 있습니다. ATR 매개 변수는 스톱 손실 범위를 설정하기 위해 결합되어야합니다.

  3. 일방적인 오픈 리스크

    포지션 필터링을 가능하게 하는 것은 거래 빈도에 어느 정도 영향을 줄 것입니다. 장기간 일방적 보유는 추가 위험을 초래할 수 있습니다.

최적화 방향

주요 최적화 방향은 다음과 같습니다.

  1. 매개 변수 최적화

    이동 평균 사이클, ATR 매개 변수, 수익 및 스톱 손실 비율 및 다른 매개 변수를 조정하여 전략 성과를 최적화하십시오.

  2. 지표 추가

    CMF, OBV 같은 지표를 추가해서 자본 흐름을 판단하고 과도한 스톱 로스를 피합니다.

  3. 다른 전략과 결합

    더 나은 결과를 얻기 위해 트렌드가 안정화 된 후 트렌드를 따르기 위해 브레이크아웃 전략과 결합하십시오.

요약

요약하자면, 이동 평균 필터와 이동 취득 및 스톱 로스를 통해이 전략은 트렌드를 기반으로 동적 자본 관리를 실현합니다. 합리적인 투자자가 자신의 스타일에 따라 조정하고 사용하는 데 적합한 높은 구성성을 가지고 있습니다. 보편적 양적 전략으로서 여전히 최적화 잠재력이 있으며 심도있는 연구에 가치가 있습니다.


/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-11 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/
// © MGULHANN

//@version=5

//İchimoku Leading Span 2 Hesaplaması ve Girişleri
strategy("Stairs Gain Strategy - MG", overlay=true, margin_long=100, margin_short=100)
laggingSpan2Periods = input.int(52, minval=1, title="Leading Periot")
displacement = input.int(1, minval=1, title="Displacement")
donchian(len) => math.avg(ta.lowest(len), ta.highest(len))
leadLine2 = donchian(laggingSpan2Periods)
p2 = plot(leadLine2, offset = displacement - 1, color=#EF9A9A,
	 title="Leading Span B")

// İşlem Tekrarını Filtrele	 
filtreUygula = input.bool(true,title="Pozisyon Sıra Filtresi Uygula")

//Kar Al / Zarar Durdur Seviyeleri Girişleri
zararDurdurmaYuzde = input.float(1.0, title='Zarar Durdurma %', step=0.01) / 100
karAlmaYuzde = input.float(2.0, title='Kar Alma %', step=0.01) / 100

//ATR Hesaplaması
atrCarpani = input.float(0.3, title="ATR Çarpanı", step= 0.01)
atrDegeri = ta.atr(14) * atrCarpani

//ATR Değer Girişleri
atrbuyukdeger = input.float(0.01, title="ATR Üst Limit", step=0.01)
atrkucukdeger = input.float(0.06, title="ATR Alt Limit", step=0.01)

//Buy ve Sell Şartları
buycross =   ta.crossover(close,leadLine2[displacement-1]) ? atrDegeri > atrbuyukdeger : strategy.position_size == 0
sellcross = ta.crossover(leadLine2[displacement-1],close) ? atrDegeri < atrkucukdeger : strategy.position_size == 0

//KONTROL
var sonPozisyonYonu = 0
//Son kapanan pozisyon long ise degiskenin degerini 1 olarak ata
if strategy.position_size[1] > 0 and strategy.position_size == 0
    sonPozisyonYonu := 1

//Son kapanan pozisyon short ise degiskenin degerini -1 olarak ata
if strategy.position_size[1] < 0 and strategy.position_size == 0
    sonPozisyonYonu := -1
    
//eger filtre uygulama seçiliyse ve son pozisyon yönü long ise 'longFiltreSonuc' degiskenine false degeri ata ve bir sonraki pozisyonun long olmasını engelle
longFiltreSonuc = filtreUygula ? sonPozisyonYonu == 1 ? false : true : true

//eger filtre uygulama seçiliyse ve son pozisyon yönü short ise 'shortFiltreSonuc' degiskenine false degeri ata ve bir sonraki pozisyonun short olmasını engelle
shortFiltreSonuc = filtreUygula ? sonPozisyonYonu == -1 ? false : true : true

//LONG GİRİŞ
strategy.entry("Long", strategy.long, when=buycross and longFiltreSonuc)
longKarAl = strategy.position_avg_price * (1 + karAlmaYuzde)
longZararDurdur = strategy.position_avg_price * (1 - zararDurdurmaYuzde)
strategy.exit("Long Exit","Long",limit=longKarAl, stop=longZararDurdur)

//SHORT GİRİŞ
strategy.entry("Short", strategy.short, when=sellcross and shortFiltreSonuc)
shortKarAl = strategy.position_avg_price * (1 - karAlmaYuzde)
shortZararDurdur = strategy.position_avg_price * (1 + zararDurdurmaYuzde)
strategy.exit("Short Exit","Short",limit=shortKarAl, stop=shortZararDurdur)

//Kar Al ve Zarar Durdur Seviyelerinin Grafikte İşaretlenmesi
plot(strategy.position_size != 0 ? strategy.position_avg_price : na, color=color.navy, linewidth=2, style=plot.style_linebr, title="İşleme Giriş Seviyesi")
plot(strategy.position_size > 0 ? longKarAl : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Long Kar Alım Seviyesi")
plot(strategy.position_size > 0 ? longZararDurdur : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Long Zarar Durdurma Seviyesi")
plot(strategy.position_size < 0 ? shortKarAl : na, color=color.green, linewidth=2, style=plot.style_linebr, title="Short Kar Alım Seviyesi")
plot(strategy.position_size < 0 ? shortZararDurdur : na, color=color.red, linewidth=2, style=plot.style_linebr, title="Short Zarar Durdurma Seviyesi")

//plotshape(buycross,size=size.small,style=shape.labelup,location=location.belowbar,color=color.green,text="Al", offset = displacement-1, textcolor=color.white)
//plotshape(sellcross,size=size.small,style=shape.labeldown,location=location.abovebar,color=color.red,text="Sat", offset = displacement-1, textcolor=color.white)


더 많은