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


생성 날짜: 2023-11-21 15:33:52 마지막으로 수정됨: 2023-11-21 15:33:52
복사: 1 클릭수: 601
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

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

개요

이 전략은 가격의 추세와 돌파구를 판단하기 위해 두 개의 이동 평균을 사용합니다. 가격이 상단으로 이동할 때 공백을 만들고, 가격이 하단으로 이동할 때 더 많이 하고, 위험을 제어하기 위해 손실 출구를 설정합니다.

전략 원칙

  1. 스마 () 함수를 사용하여 거래 전략의 상하 궤도를 나타내는 단기 및 장기 이동 평균을 각각 계산합니다.
  2. 구매 가격과 판매 가격을 계산한다: 구매 가격은 하차량에 1보다 작은 계수로, 판매 가격은 상차량에 1보다 큰 계수로 곱한다.
  3. 가격이 상향 궤도에 오르면 시장 가격으로 빈 포지션을 열고, 가격이 하향 궤도에 오르면 제한 가격으로 더 많은 포지션을 열는다.
  4. 연간, 월간, 날짜 범위의 거래 주기를 설정하여 전략을 제어합니다.
  5. 재검토가 끝나거나 날짜 범위를 넘어서면 모든 포지션을 청산한다.

우위 분석

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

  1. 이중 레일 시스템을 사용하여 시장 소음을 필터링하고 트렌드를 식별할 수 있습니다.
  2. 가격 돌파를 이용해서 진입 시기를 판단하면 잘못된 신호를 줄일 수 있다.
  3. 시장 충격 비용을 절감하기 위해 한정 가격을 사용하십시오.
  4. 트레이딩 사이클을 편리하게 조정할 수 있고, 전략적 위험을 통제할 수 있다.

위험 분석

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

  1. 이중 레일 돌파는 연속적인 손실의 위험을 초래할 수 있다. 손실을 제어하기 위해 Exit를 설정할 수 있다.
  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()