동적 이동 평균에 기초한 역전 거래 전략

저자:차오장, 날짜: 2024-02-27 14:38:45
태그:

img

전반적인 설명

이 전략은 선택된 주식이나 암호화폐에서 잠재적인 브레이크아웃 기회를 식별하기 위해 이중 이동 평균 시스템을 사용합니다. 핵심 원칙은 단기 이동 평균이 장기 이동 평균 아래에서 다시 반등 할 때 구입하고 가격이 장기 이동 평균을 다시 테스트 할 때 판매하는 것입니다.

전략 논리

이 전략은 거래 신호로 서로 다른 기간을 가진 두 가지 간단한 이동 평균 (SMA) 을 사용합니다. 첫 번째 SMA는 전반적인 트렌드 방향을 나타내는 더 긴 기간을 가지고 있습니다. 두 번째 SMA는 단기 가격 변동을 포착하는 더 짧은 기간을 가지고 있습니다.

단기 SMA가 아래에서 장기 SMA를 넘을 때, 전체적으로 가격 상승 추세를 알리고 따라서 전략은 긴 포지션을 개설합니다. 장기 SMA를 다시 테스트하기 위해 가격이 다시 내려갈 때, 단기 pullback가 끝났고 전략은 포지션에서 중단하거나 이익을 취하는 것을 고려합니다.

또한 이 전략은 극한 상황에서의 거래를 피하기 위해 oversoldoverbought 조건을 갖추고 있습니다. 이 전략은 SMA 크로스오버와 합리적인 평가 기준이 모두 충족될 때만 포지션을 개설합니다.

장점

  • 이중 이동 평균 체계는 중장기 동향을 효과적으로 식별합니다.
  • 트렌드 따라와 풀백 거래의 장점을 결합합니다.
  • 부재한 거래가 줄어드는 부재한 판매와 구매 조건

위험 분석

  • 정밀한 철수 종료 시기를 결정하기가 어렵고, 조기에 중단 될 수 있습니다.
  • 트렌드 변동에 따라 손실을 빠르게 줄일 수 없으므로 큰 마감으로 고통받을 수 있습니다.
  • 매개 변수 조정이 제대로 되지 않으면 과잉 거래 또는 보수적인 거래로 이어질 수 있습니다.

최적화 방향

이 전략을 최적화 할 수있는 더 많은 공간이 있습니다.

  1. 가격 파동과 트렌드를 측정하기 위해 볼링거 밴드 및 KD와 같은 더 고급 기술 지표를 활용하십시오.
  2. 부피 변화, 변동성 같은 더 많은 요소를 포함
  3. 수익 잠재력을 극대화하기 위해 역동적으로 규모가 큰 포지션
  4. KAMA, 이치모쿠 클라우드 및 낮은 시간 프레임 신호로 스톱 손실 논리를 최적화

결론

이 전략은 트렌드 추종 및 풀백 거래의 장점을 결합하여 기회를 탐지하기 위해 이중 이동 평균 시스템을 사용합니다. 동시에 부득이한 포지션 개척을 방지하기 위해 부착 된 과잉 구매 / 과잉 판매 조건이 있습니다. 심층 연구와 최적화를 가치가있는 매우 실용적인 양 거래 전략입니다.


/*backtest
start: 2023-02-20 00:00:00
end: 2024-02-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=5
strategy("Profitable Pullback Trading Strategy", overlay=true,initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Inputs
ma_length1 = input.int(280,'MA length 1', step = 10,group = 'Moving Avg. Parameters', inline = 'MA')
ma_length2 = input.int(13,'MA length 2', step = 1,group = 'Moving Avg. Parameters', inline = 'MA')
sl = input.float(title="Stop Loss (%)", defval=0.07, step=0.1, group="Moving Avg. Parameters")
too_deep    = input.float(title="Too Deep (%)", defval=0.27, step=0.01, group="Too Deep and Thin conditions", inline = 'Too')
too_thin    = input.float(title="Too Thin (%)", defval=0.03, step=0.01, group="Too Deep and Thin conditions", inline = 'Too')

// Calculations
ma1 = ta.sma(close,ma_length1)
ma2 = ta.sma(close,ma_length2)
too_deep2   = (ma2/ma1-1) < too_deep
too_thin2   = (ma2/ma1-1) > too_thin

// Entry and close condtions
var float buy_price = 0
buy_condition = (close > ma1) and (close < ma2) and strategy.position_size == 0 and too_deep2 and too_thin2
close_condition1  = (close > ma2) and strategy.position_size > 0 and (close < low[1])
stop_distance = strategy.position_size > 0 ? ((buy_price - close) / close) : na
close_condition2 = strategy.position_size > 0 and stop_distance > sl
stop_price = strategy.position_size > 0 ? buy_price - (buy_price * sl) : na

// Entry and close orders
if buy_condition
    strategy.entry('Long',strategy.long)
if buy_condition[1]
    buy_price := open
if close_condition1 or close_condition2
    strategy.close('Long',comment="Exit" + (close_condition2 ? "SL=true" : ""))
    buy_price := na

plot(ma1,color = color.blue)
plot(ma2,color = color.orange)



더 많은