이 전략은 래리 윌리엄스가 그의 책?? 단기 거래의 장기간 비밀?? 에서 설명한 접근 방식을 사용하며, 이는 3 기간 이동 평균을 두 개, 하나는 최고를, 다른 하나는 하락을 나타냅니다. 가격이 3 기간 하락 EMA 이하로 떨어지면 긴 신호가 있습니다. 가격이 3 기간 하락 EMA 이상으로 닫을 때 거래는 종료됩니다.
이 전략의 핵심 논리는 높은 가격과 낮은 가격의 3 기간 이동 평균을 계산하는 것입니다. 구체적으로, 그것은 가장 최근의 3 바에 대한 높은 가격과 낮은 가격의 기하급수적인 이동 평균을 계산하기 위해 ta.ema 함수를 사용하여 동적 지원 및 저항 수준을 생성합니다. 가격이 EMA의 최저 수준 아래로 넘어지면 하락 추세를 나타냅니다. 따라서 우리는 긴 거리를 갈 수 있습니다. 가격이 EMA의 최저 수준 이상으로 다시 상승하면 상승 추세가 끝났고 우리가 위치를 닫아야한다는 것을 나타냅니다. 이러한 방식으로 전략은 동적으로 가격 변화를 추적하고 낮은 구매 및 높은 판매를 달성 할 수 있습니다.
이 전략의 가장 큰 장점은 단순함과 역동성이다. 고정 기간의 최고/하위 이동 평균을 사용하는 것과 비교하면 이 전략은 지속적인 단기 이동 평균을 사용하며, 이는 가격 변화를 보다 민감하고 적시에 파악할 수 있다. 이는 시장에 진입하고 빠져나가는 거래 기회를 빠르게 식별할 수 있게 한다. 또한, 낮은 컴퓨팅 부하는 거래 지연을 줄이는 또 다른 장점이다.
이 전략의 주요 위험은 중요한 뉴스와 같은 갑작스러운 사건에 더 느리게 반응한다는 것입니다. 이동 평균 기간이 매우 짧기 때문에 급격한 가격 상승이있을 때 이동 평균 수준을 조정하는 데 시간이 걸립니다. 이것은 손실이나 놓친 기회로 이어질 수 있습니다. 또한 과민감각은 잘못된 거래를 유발할 수 있습니다. 이러한 위험을 완화하기 위해 이동 평균 기간을 적절히 증가하거나 잘못된 신호를 피하기 위해 필터를 추가 할 수 있습니다.
이 전략을 최적화하는 데는 여전히 많은 여지가 있습니다. 첫째, 시그널을 필터링하기 위해 오시레이터를 통합 할 수 있습니다. 둘째, 스톱 로스 로직은 위험을 제어하는 데 추가 될 수 있습니다. 또한, 우리는 트렌딩에서 더 긴 기간과 범위 시장에서 짧은 기간을 사용하여 시장 상태에 따라 움직이는 평균 매개 변수를 동적으로 조정할 수 있습니다. 또한, 멀티 타임프레임 분석, 머신 러닝과 함께 패턴 인식 등은 전략 성능을 향상시키는 데 도움이 될 수 있습니다.
요약하자면, 이것은 매우 간단하고 실용적인 전략이며, 단기 높은/저하 이동 평균을 사용하여 트렌드를 식별합니다. 그것의 장점은 강력한 역동성, 낮은 계산, 그리고 적극적인 거래에 적합한 높은 반응성입니다. 그러나 극단적인 이벤트와 더 높은 잘못된 신호 위험에 대응하는 데에도 결함이 있습니다. 파라미터 튜닝, 필터 추가 및 패턴 인식 기술을 통해 이러한 문제를 해결하는 방향이 있습니다. 전략의 효율성을 더 높이기 위해.
/*backtest start: 2023-11-26 00:00:00 end: 2023-12-03 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy( "Larry Williams 3 Period EMAs strategy", overlay=true, calc_on_every_tick=true, currency=currency.USD ) // Time range for backtesting startDate = input.int(title="Start Date", defval=1, minval=1, maxval=31) startMonth = input.int(title="Start Month", defval=1, minval=1, maxval=12) startYear = input.int(title="Start Year", defval=2018, minval=1800, maxval=2100) endDate = input.int(title="End Date", defval=31, minval=1, maxval=31) endMonth = input.int(title="End Month", defval=12, minval=1, maxval=12) endYear = input.int(title="End Year", defval=2041, minval=1800, maxval=2100) inDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0)) // EMA period = 3 emaH = ta.ema(high, period) emaL = ta.ema(low, period) // PLOT: // Draw the EMA lines on the chart plot(series=emaH, color=color.green, linewidth=2) plot(series=emaL, color=color.red, linewidth=2) // Conditions if(inDateRange and close < emaL) strategy.entry("Long", strategy.long, comment="Long") if(close > emaH) strategy.close("Long", comment="Close Long") // Uncomment to enable short entries //if(inDateRange and close > emaH) // strategy.entry("Short", strategy.short, comment="Short") //if(close < emaL) // strategy.close("Short", comment="Close Short")