윌리엄스
이 전략은 다른 기간 길이의 세 개의 SMA를 사용합니다. 빠른 라인 sma1, 중간 라인 sma2, 느린 라인 sma3, 여기서 sma1은 가장 짧은 기간을 가지고 있으며 sma3는 가장 길습니다.
sma1가 sma2를 넘고 sma2가 sma3를 넘으면 시장이 상승 추세에 있음을 나타냅니다. 트렌드 거래 이론에 따르면 긴 포지션을 입력해야합니다.
반대로, sma1가 sma2 아래로 넘어가고 sma2가 sma3 아래로 넘어가면 시장이 하락 추세에 있음을 나타내고 하락 악어 입을 형성합니다. 짧은 포지션을 입력해야합니다.
출구 조건은 세 개의 라인이 다시 정렬될 때, 중간에 있는 빠른 라인이 중간에 있는 중간 라인 아래에 있거나 중간에 있는 느린 라인 아래에 있는 중간 라인이 중간에 있는 중간 라인 아래입니다. 포지션은 종료되어야 합니다.
이 전략은 또한 추세 방향을 식별하기 위해 배경 색상을 그립니다. 상승 추세에 대해 녹색, 하락 추세에 대해 빨간색.
요약하자면, 전략은 트렌드 방향을 결정하고 그에 따라 거래하기 위해 이동 평균 및 악어 입 패턴의 강점을 활용합니다. 그것은 전형적인 트렌드 다음 전략입니다.
위험을 해결하기 위해 다음과 같은 개선이 가능합니다.
트렌드 필터를 추가해서 시장의 변화율을 줄일 수 있습니다.
트렌드 지표를 사용하여 출구 조건을 최적화합니다.
단일 트레이드 손실을 제어하기 위해 스톱 로스 전략을 추가합니다.
적응적인 이동평균을 사용해서 주기율을 동적으로 조정합니다.
이 전략은 다음 측면에서 더 이상 최적화 될 수 있습니다.
트렌드 강도 필터를 추가하여 약한 트렌드에 조기 진입을 피합니다. MACD, KDJ와 같은 지표가 도움이 될 수 있습니다.
역 테스트를 통해 최상의 조합을 찾기 위해 이동 평균 기간을 최적화합니다.
적응적인 이동평균을 사용해서 시기가 시장 동력에 따라 적응하도록 합니다.
트레일링 스톱 로스, 계좌 잔액 스톱 로스 같은 스톱 로스 전략을 추가하여 위험을 제어합니다.
진입 조건을 개선하기 위해 볼링거 밴드 등을 사용하세요.
라인이 교차할 때 지표로 트렌드 반전 가능성을 판단하여 출구 조건을 개선합니다.
윌리엄스
/*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()