이동 평균과 평균 실제 변동성을 기반으로 한 추세 추종 전략


생성 날짜: 2024-01-12 11:14:01 마지막으로 수정됨: 2024-01-12 11:14:01
복사: 1 클릭수: 539
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

이동 평균과 평균 실제 변동성을 기반으로 한 추세 추종 전략

개요

이 전략은 이동 평균과 평균 실제 변동률을 사용하여 시장의 추세 방향을 판단하고, 추세 방향에 따라 트렌드 추적 거래를 수행한다.

전략 원칙

이 전략은 렌 주기의 이동 평균 ma와 2배 렌 주기의 평균 실제 변동률atr을 사용하여 시장 추세를 판단한다. 구체적인 판단 규칙은 다음과 같다.

최저가격이 이동 평균과 평균 실제 변동률보다 크면 ((low > ma + atr), 상승 추세로 판단한다.
최고값이 이동 평균이 적어진 평균 실제 변동률을 때 (high < ma - atr), 하향 경향으로 판단한다.

다른 경우에는 이전 판단을 유지한다.

상승 추세를 판단할 때, 허용되는 경우의 비율에 따라 더 많이 할 수 있습니다.
하락 추세를 판단할 때, 공백이 허용될 때, 일정 비율로 공백을 다.

평위 조건은 지정된 거래 종료 날짜에 도달하는 것이다.

우위 분석

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

  1. 이동 평균을 사용하여 대략적인 트렌드 방향을 판단하고, 시장의 단기 변동에 의해 오해되는 것을 피하십시오.
  2. 동적 스톱로드를 설정하기 위한 실제 평균 변동률을 사용하여 위험을 제어하는 것이 좋습니다.
  3. 트렌드 기회를 잡을 수 있고, 수익 잠재력이 높습니다.
  4. 규칙은 비교적 간단하고 사용하기 쉽다.

위험 분석

이 전략의 주요 위험은 다음과 같습니다.

  1. 큰 변동이 있는 시장에서는 여러 차례의 손실이 발생할 수 있습니다.
  2. 트렌드 전환점을 효과적으로 판단할 수 없는 상황에서는, 추세를 따라가는 위험도 발생할 수 있습니다.
  3. 평균 실제 변동률의 파라미터를 잘못 설정하면 출구점이 너무 느슨하거나 너무 엄격해질 수 있다.

해결책:

  1. 이동 평균 변수를 적절히 조정하여 더 안정적인 변수를 사용한다.
  2. 다른 지표와 함께 확인 신호를 어, 고도와 하락을 쫓는 것을 피하십시오.
  3. 평균 실제 변동률 파라미터를 최적화 테스트하고, 적절한 파라미터를 설정한다.

최적화 방향

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

  1. 다른 평균 시스템을 테스트하여 더 안정적인 변수 조합을 찾습니다.
  2. 신호의 신뢰성을 판단하는 다른 보조 지표와 함께.
  3. 평균 실제 변동률 변수를 테스트하여 최적의 변수를 찾습니다.
  4. 자본 활용도를 최적화하고, 레버리지를 통해 수익률을 높여라.
  5. 기계 학습과 같은 방법을 결합하여 매개 변수를 동적으로 최적화한다.

요약하다

이 전략의 전체적인 아이디어는 명확하고 이해하기 쉽고, 이동 평균을 사용하여 트렌드 방향을 판단하고, 평균 실제 변동률을 사용하여 스톱 스팅을 설정하여 트렌드를 효과적으로 추적할 수 있습니다. 그러나 약간의 위험이 있으며, 추가 최적화 파라미터 설정과 다른 판단 지표를 추가 할 필요가 있습니다.

전략 소스 코드
/*backtest
start: 2024-01-04 00:00:00
end: 2024-01-11 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//2019
//Noro

//@version=4
strategy(title = "Noro's MA+ATR Strategy", shorttitle = "MA+ATR str", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
len = input(30, minval = 2, title = "MA Length")
src = input(ohlc4, title = "MA Source")
limitmode = input(false)
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")

//MA + BG
atr = sma(tr, len) * 2
ma = sma(src, len)
plot(ma, color = color.blue, linewidth = 4)
trend = 0
trend := low > ma + atr ? 1 : high < ma - atr ? -1 : trend[1]
col = trend == 1 ? color.lime : color.red
bgcolor(col, transp = 70)

//Trading
lot = 0.0
lot := strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]
if trend == 1 and limitmode == false
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)
if trend == -1 and limitmode == false
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
if trend == 1 and limitmode
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)
if trend == -1 and limitmode
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
// if time > timestamp(toyear, tomonth, today, 23, 59)
//     strategy.close_all()