윌리엄스의 악어 전략

저자:차오장, 날짜: 2023-11-13 10:58:22
태그:

img

전반적인 설명

윌리엄스 알리게이터 전략 (Williams Alligator Strategy) 은 트렌드 방향을 결정하기 위해 다른 기간의 세 개의 이동 평균선을 사용하여 트렌드 방향을 결정하는 트렌드 다음 전략이다. 빠른 선이 중간 선 위에 있고 중간 선이 느린 선 위에 있을 때, 상향 트렌드 알리게이터 입이 길어지기 위해 형성된다. 빠른 선이 중간 선 아래에 있고 중간 선이 느린 선 아래에 있을 때, 하향 트렌드 알리게이터 입이 짧아지기 위해 형성된다. 빌 윌리엄스에 의해 발명되었으며 트렌드 판단 능력을 결합하여 이동 평균의 트렌드를 효과적으로 포착한다.

어떻게 작동 합니까?

이 전략은 다른 기간 길이의 세 개의 SMA를 사용합니다. 빠른 라인 sma1, 중간 라인 sma2, 느린 라인 sma3, 여기서 sma1은 가장 짧은 기간을 가지고 있으며 sma3는 가장 길습니다.

sma1가 sma2를 넘고 sma2가 sma3를 넘으면 시장이 상승 추세에 있음을 나타냅니다. 트렌드 거래 이론에 따르면 긴 포지션을 입력해야합니다.

반대로, sma1가 sma2 아래로 넘어가고 sma2가 sma3 아래로 넘어가면 시장이 하락 추세에 있음을 나타내고 하락 악어 입을 형성합니다. 짧은 포지션을 입력해야합니다.

출구 조건은 세 개의 라인이 다시 정렬될 때, 중간에 있는 빠른 라인이 중간에 있는 중간 라인 아래에 있거나 중간에 있는 느린 라인 아래에 있는 중간 라인이 중간에 있는 중간 라인 아래입니다. 포지션은 종료되어야 합니다.

이 전략은 또한 추세 방향을 식별하기 위해 배경 색상을 그립니다. 상승 추세에 대해 녹색, 하락 추세에 대해 빨간색.

요약하자면, 전략은 트렌드 방향을 결정하고 그에 따라 거래하기 위해 이동 평균 및 악어 입 패턴의 강점을 활용합니다. 그것은 전형적인 트렌드 다음 전략입니다.

이점 분석

  • 악어 입은 트렌드 방향을 효과적으로 파악합니다.
  • 다른 주기선들의 조합은 패턴의 정확성을 향상시킵니다.
  • 트렌드 트레이딩은 트렌드 트레이딩 이론과 일치합니다.
  • 배경 색상은 시각적 판단에 도움이 됩니다.
  • 단순하고 명확한 논리, 실행하기 쉬운.

위험 분석

  • 다양한 시장에서 여러 가지 위험을 감수합니다.
  • 포지션을 닫기 위해 라인을 다시 정렬할 때 높은 위험.
  • 트렌드 강도를 결정할 수 없거나 트렌드를 잘못 입력할 수 있습니다.
  • 손해를 막지 않고, 높은 마감 위험.
  • 고정 기간은 시장 변화에 적응할 수 없습니다.

위험을 해결하기 위해 다음과 같은 개선이 가능합니다.

  1. 트렌드 필터를 추가해서 시장의 변화율을 줄일 수 있습니다.

  2. 트렌드 지표를 사용하여 출구 조건을 최적화합니다.

  3. 단일 트레이드 손실을 제어하기 위해 스톱 로스 전략을 추가합니다.

  4. 적응적인 이동평균을 사용해서 주기율을 동적으로 조정합니다.

개선 방향

이 전략은 다음 측면에서 더 이상 최적화 될 수 있습니다.

  1. 트렌드 강도 필터를 추가하여 약한 트렌드에 조기 진입을 피합니다. MACD, KDJ와 같은 지표가 도움이 될 수 있습니다.

  2. 역 테스트를 통해 최상의 조합을 찾기 위해 이동 평균 기간을 최적화합니다.

  3. 적응적인 이동평균을 사용해서 시기가 시장 동력에 따라 적응하도록 합니다.

  4. 트레일링 스톱 로스, 계좌 잔액 스톱 로스 같은 스톱 로스 전략을 추가하여 위험을 제어합니다.

  5. 진입 조건을 개선하기 위해 볼링거 밴드 등을 사용하세요.

  6. 라인이 교차할 때 지표로 트렌드 반전 가능성을 판단하여 출구 조건을 개선합니다.

결론

윌리엄스 알리거터 전략은 트렌드를 따르는 전형적인 전략이다. 트렌드와 거래를 결정하기 위해 세 개의 이동 평균으로 형성된 알리거터 입을 사용합니다. 장점은 간단하고 명확한 논리입니다. 단점은 추세 정확성과 위험 통제가 약합니다. 추가 지표, 매개 변수 최적화, 정지 손실을 추가하여 복잡한 시장 조건에 더 견고하게 할 수 있습니다.


/*backtest
start: 2023-10-13 00:00:00
end: 2023-11-12 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=3
strategy(title = "Noro's Alligator Strategy by Bill Williams", shorttitle = "Alligator", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len1 = input(50, defval = 50, minval = 1, title = "MA 1 Length")
len2 = input(100, defval = 100, minval = 1, title = "MA 2 Length")
len3 = input(200, defval = 200, minval = 1, title = "MA 3 Length")
src = input(close, title = "Source")
showbg = input(false, title = "Show Background")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//MAs
sma1 = sma(src, len1)
sma2 = sma(src, len2)
sma3 = sma(src, len3)
plot(sma1, color = lime, linewidth = 2)
plot(sma2, color = blue, linewidth = 2)
plot(sma3, color = red, linewidth = 2)

//Signals
up = sma1 > sma2 and sma2 > sma3
dn = sma1 < sma2 and sma2 < sma3

//Background
trend = 0
trend := up ? 1 : dn ? -1 : trend[1]
col = showbg == false ? na : trend == 1 ? lime : red
bgcolor(col)

//Trading
size = strategy.position_size
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
if up
    strategy.entry("Long", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if dn
    strategy.entry("Short", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

더 많은