이중 이동 평균 가격 돌파 전략

저자:차오장날짜: 2023-11-21 15:33:52
태그:

img

전반적인 설명

이 전략은 두 개의 이동 평균을 사용하여 가격 트렌드와 돌파구를 결정합니다. 가격이 상단 레일을 통과 할 때 짧게 이동하고 가격이 하단 레일을 통과 할 때 길게 이동합니다. 위험을 제어하기 위해 스톱 로스 출구를 설정하십시오.

원칙

  1. sma ((() 함수를 사용하여 거래 전략의 상부와 하부 레일로 단기 및 장기 두 이동 평균을 계산합니다.
  2. 구매 가격과 판매 가격을 계산합니다. 구매 가격은 1보다 작은 계수에 곱한 하부 레일이고 판매 가격은 1보다 큰 계수에 곱한 상부 레일입니다.
  3. 가격이 상부 레일을 넘을 때, 시장 주문으로 짧은 포지션을 열고, 가격이 하부 레일을 넘을 때, 제한 주문으로 긴 포지션을 열고,
  4. 전략의 거래 주기를 제어하기 위해 년, 달 및 날짜 범위를 설정합니다.
  5. 백테스트가 끝나거나 날짜 범위를 초과하면 모든 포지션을 닫습니다.

장점

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 이중 철도 시스템을 사용하면 시장 소음을 필터링하고 트렌드를 식별 할 수 있습니다.
  2. 진입 시기를 결정하기 위해 가격 돌파구를 사용하면 잘못된 신호를 줄일 수 있습니다.
  3. 리미트 오더를 사용하면 시장 영향 비용을 줄일 수 있습니다.
  4. 거래 주기는 전략적 위험을 통제하기 위해 쉽게 조정할 수 있습니다.

위험성

이 전략에는 또한 몇 가지 위험이 있습니다.

  1. 이중 레일 돌파구는 지속적으로 손실 위험을 초래할 수 있습니다. 손실을 제어하기 위해 스톱 손실 출구를 설정할 수 있습니다.
  2. 거래 목표가 통합에 들어갈 때 거래가 너무 많을 위험이 있습니다. 상위와 하위 레일 사이의 거리를 적절하게 넓힐 수 있습니다.
  3. 리미트 오더는 구매 기회를 놓칠 수 있습니다. 대신 시장 오더를 사용하는 것을 고려하십시오.

최적화

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

  1. 가장 좋은 매개 변수를 찾기 위해 이동 평균 길이의 다양한 조합을 테스트합니다.
  2. 거래량에서 돌파구를 결정하기 위해 볼륨 지표를 높여주세요.
  3. 실시간으로 스톱 로스 가격을 조정할 수 있는 적응식 스톱 로스 메커니즘을 강화합니다.
  4. 트렌드 방향을 결정하기 위해 머신러닝 모델을 늘리세요.

요약

이 전략의 전반적인 아이디어는 명확하고 이해하기 쉽다. 트렌드를 식별하기 위해 이중 레일 시스템을 사용하고 진입 시기를 결정하기 위해 가격 돌파구를 사용하여 소음을 필터하고 안정적인 수익을 얻을 수 있습니다. 또한 개선 및 최적화에 대한 여지가 있습니다. 전반적으로 실용적인 가치로 재생 가능한 양적 거래 전략입니다.


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

//Noro
//2018

//@version=3
strategy(title = "Noro's Shift MA Strategy v1.0", shorttitle = "Shift MA str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
per = input(3, defval = 1, minval = 1, maxval = 1000, title = "Length")
src = input(ohlc4, title = "Source")
buylevel = input(-5.0, defval = -5.0, minval = -100, maxval = 0, title = "Buy line (lime)")
selllevel = input(0.0, defval = 0.0, minval = -100, maxval = 100, title = "Sell line (red)")
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")

//SMAs
sma = sma(src, per) 
buy = sma * ((100 + buylevel) / 100)
sell = sma * ((100 + selllevel) / 100)
plot(buy, linewidth = 2, color = lime, title = "Buy line")
plot(sell, linewidth = 2, color = red, title = "Sell line")

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]

if (not na(close[per])) and size == 0
    strategy.entry("L", strategy.long, lot, limit = buy)
    
if (not na(close[per]))    
    strategy.entry("Close", strategy.short, 0, limit = sell)

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

더 많은