이동평균 풀백 전략


생성 날짜: 2023-12-19 11:55:25 마지막으로 수정됨: 2023-12-19 11:55:25
복사: 1 클릭수: 719
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

이동평균 풀백 전략

개요

이동 평균 회수 전략은 주가 이동 평균의 교차 상황을 추적하고, 금포가 발생했을 때 회수 기회가 있는지 판단하고, 만약 있다면, 역으로 작동하는 양적 거래 전략이다. 이 전략은 피보나치 회수를 사용하여 시장 진입점과 손실 중지 지점을 설정하여 단기 가격 회수를 포착한다.

전략 원칙

이 전략은 주로 두 개의 이동 평균 (14일 EMA와 56일 SMA) 을 기반으로 한다. 14일 EMA가 56일 SMA를 아래에서 통과하면 구매 신호가 발생한다. 이후, 코드는 20일까지 거슬러 올라가 지지를 위해 낮은 지점을 찾으며, 통과 지점의 가까운 가격과 결합하여 피보나치 회전선을 그리며, 1.272배 회전선을 엔트리, 0.618배 회전선을 엑시트로 사용한다.

전체 전략은 다음과 같은 몇 가지 단계로 구성됩니다.

  1. 14일 EMA, 56일 SMA를 계산합니다.
  2. SMA를 통과하는 EMA의 골드포크 신호가 발생하는지 판단하기 위해;
  3. 그리고 그 후로, 우리는 다시 돌아와서 지지의 낮은 지점을 찾습니다.
  4. 낮은 점과 골드포크의 위치를 이용해서 피보나치 회전선을 그리는 것;
  5. 1.272 회 회전 라인에서 공백 진입 지점을 설정;
  6. 0.618 회 회전 라인에서 정지점을 설정하십시오.

이 전략의 주요 과정과 작동 원리는 다음과 같습니다. 이 전략은 단기적인 반동이 발생했을 때 수익을 얻을 수있는 기회를 잡을 수 있습니다.

전략적 이점

이동 평균 회전 전략은 다음과 같은 장점이 있습니다.

  1. 전략적 아이디어는 명확하고 간단하며, 이해하기 쉽고 실행할 수 있습니다.
  2. 피보나치 이론을 이용해서 입점과 정지점을 설정하고, 위험을 통제하는 것이 더 좋습니다.
  3. 단기적인 가격 반향을 포착할 수 있는 기회로 더 나은 단위 수익을 얻을 수 있습니다.
  4. 이동 평균 금叉 신호만 있으면 시작이 가능하며, 조건은 까다롭지 않다.

전체적으로, 이 전략은 짧은 라인 반전 거래에 매우 적합하며, 시장에서 특정 회전이 발생할 때 이러한 기회를 잡을 수 있습니다. 전략 구현은 비교적 간단하고 직접적입니다.

전략적 위험

이동 평균 회귀 전략은 나름대로의 장점이 있지만, 위험도 있습니다.

  1. 장기간 보유할 경우 큰 손실이 발생할 수 있습니다. 왜냐하면 우리는 역동적인 적자이기 때문입니다. 시장이 계속 상승하면 큰 손실이 발생할 수 있습니다.
  2. 회수폭이 너무 작으면 수익을 얻지 못합니다. 가격 회수폭이 너무 작으면 막선에 닿지 못하고 수익을 내지 못합니다.
  3. 너무 높은 설정 위험이 발생할 수 있습니다. 회수 라인이 너무 높아서 중개 기회를 형성 할 수 없습니다. 합리적인 회수 구간을 계산해야합니다.

위와 같은 위험에 대해 우리는 단위 손실을 엄격하게 통제하는 짧은 중지 시간을 설정할 수 있습니다. 동시에 회귀 라인의 범위를 최적화하여 합리적인 목표 수익을 설정하여 일부 위험을 피할 수 있습니다.

최적화 방향

이동 평균 회전 전략에는 많은 최적화 가능성이 있으며, 다음의 몇 가지 측면에서 시작될 수 있습니다.

  1. 이동 평균의 주기 길이, 회귀일 수, 회귀선 배수 등과 같은 다양한 파라미터 설정을 테스트하여 최적의 파라미터를 찾습니다.

  2. 다중 또는 이동적 제약을 적용할 수 있는 손해 방지 장치를 추가하여 위험을 더 잘 통제할 수 있도록 한다.

  3. 다른 지표인 FILTER와 결합하여 부적절한 시장 환경에서 거래하는 것을 피합니다.

  4. 자본 관리를 최적화하고, 합리적인 포지션 규모와 리스크 을 설정한다.

테스트 및 최적화 매개 변수를 통해, 이 전략은 더 안정적인 거래 성능을 얻을 수 있도록 더욱 개선될 수 있다.

요약하다

이동 평균 리트랙 전략은 매우 실용적인 단선 거래 전략이다. 그것은 가격이 단기간에 나타나는 역전 기회를 포착할 수 있고, 미리 설정된 입점과 중단점을 통해 거래를 할 수 있다. 전략 아이디어는 명확하고 간단하며, 이해하기 쉽고 구현된다. 또한, 특정 거래 위험도 존재하며, 변수 최적화, 위험 제어 등의 방법으로 더 발전시킬 필요가 있다.

전략 소스 코드
/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy("MAC Pullback", overlay=true)

// Setting up timeperiod for testing
startPeriodYear = input(2014, "Backtest Start Year")
startPeriodMonth = input(1, "Backtest Start Month")
startPeriodDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(startPeriodYear, startPeriodMonth, startPeriodDay, 0, 0)

stopPeriodYear = input(2035, "Backtest Stop Year")
stopPeriodMonth = input(12, "Backtest Stop Month")
stopPeriodDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(stopPeriodYear, stopPeriodMonth, stopPeriodDay, 0, 0)

// Moving Averages
ema14 = ema(close, 14)
ema28 = ema(close, 28)
sma56 = sma(close, 56)

// Plot
plot(ema14, title="ema14", linewidth=2, color=green)
plot(ema28, title="ema28", linewidth=2, color=red)
plot(sma56, title="sma56", linewidth=3, color=blue)


// Strategy
goLong = cross(ema14, sma56) and ema14 > ema28
goShort = cross(ema14, sma56) and ema14 < ema28


// Locate Swing Lows
leftBars = input(20)
rightBars=input(20)
swinglow = pivotlow(close, leftBars, rightBars)
plot(swinglow, style=cross, linewidth=8, color=#00FF00, offset=-rightBars)

if goLong == true and time >= testPeriodStart and time <= testPeriodStop
    // We try to make sure that we're catching the first Pullback after the crossover
    if ema14[12] < sma56[12] 
        pivotpoint = lowest(40)[0] //lowest value of the month as our swing low
        
        // We calculate a Fib 1.272 extension (from the previous swing low to 
        // the crossover long entry's open) and use this as our entry target to short the Pullback
        extensiontarget = ((close[1] - pivotpoint) * 1.27) + pivotpoint
        shorttarget = ((close[1] - pivotpoint) * 0.618) + pivotpoint        
        
        strategy.order("Pullback", strategy.short, 5.0, limit=extensiontarget)
        // I would like to use a trailing stop but for know we just hope to get 
        // filled if the pullback reaches all the way down to the 0.618.
        // We also place a tight stop loss since we trying to short an uptrend
        strategy.exit("Pullback Exit", "Pullback", limit=shorttarget, loss=400)