다단계 이동평균 거래 전략

저자:차오장, 날짜: 2023-09-23 15:55:20
태그:

전반적인 설명

다단계 이동 평균 거래 전략은 여러 가지 지표와 함께 여러 가지 이동 이동 평균 라인을 설정하여 여러 수준에서 손실을 입력하고 중지합니다. 전략은 먼저 3 개의 긴 라인과 3 개의 짧은 라인을 계산합니다. 긴 라인이 짧은 라인 아래에있을 때 길게 이동하고 짧은 라인이 긴 라인 아래에있을 때 짧게 이동합니다. 전략은 이동 평균 기간, 이동 비율, 거래 가능한 시간 범위 등과 같은 매개 변수를 사용자 정의 할 수 있습니다. 중장기 트렌드 거래에 적합합니다.

전략 논리

  1. 수평평평균을 기준선으로 계산합니다.

  2. 길고 짧은 라인의 숫자를 길고 짧은 매개 변수에 따라 설정합니다.

  3. 롱라인1등은 롱level1등 비율에 따라 기본선을 이동하여 설정됩니다. 단선도 비슷하게 설정됩니다.

  4. 거래 가능한 시간 내에 가격이 선을 넘을 때 여러 레벨의 거래를 입력합니다.

  5. 가격이 기본선을 건드리면 손해를 멈추게 됩니다.

  6. 마감 시간 후에 모든 위치를 닫으세요

이점 분석

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

  1. 다단계 진입은 트렌드의 다른 단계에서 이익을 얻을 수 있습니다.

  2. 다양한 제품과 거래 스타일에 대한 매개 변수와 함께 매우 사용자 정의 가능합니다.

  3. 이동 평균에 기반한 신뢰할 수 있는 브레이크아웃 시스템

  4. 거래 가능한 시간 범위를 설정하여 주요 이벤트를 피하십시오.

  5. 스톱 로스를 통해 손실을 억제합니다.

위험 분석

이 전략의 몇 가지 위험:

  1. 피라미드 포지션의 위험은 높고 충분한 자본이 필요합니다.

  2. 부적절한 매개 변수는 과잉 거래로 이어질 수 있습니다.

  3. 고정된 출구 시간은 늦은 트렌드 수익을 놓칠 수 있습니다.

  4. 오버나이트 포지션과 캐리 코스트는 고려하지 않습니다.

  5. 위치 크기에 대한 통제가 없습니다.

최적화 방향

이 전략은 다음과 같은 측면에서 개선될 수 있습니다.

  1. 고정된 출구 시간 대신 후속 스톱 손실을 추가합니다.

  2. 오버나이트 포지션에 대한 캐리 코스트를 고려하세요.

  3. 늦은 수익을 잡기 위해 후속 스톱 손실을 추가합니다.

  4. 현재 노출을 기반으로 동적으로 크기 위치.

  5. 다른 제품에서 매개 변수를 테스트하고 최적화 방법을 구축합니다.

  6. 불필요한 스톱을 피하기 위해 스톱 손실 수준을 최적화합니다.

요약

다단계 이동 평균 전략은 이동 평균을 기반으로 한 다단계 입력을 통해 트렌드로부터 이익을 얻습니다. 거래 가능한 시간 및 중지 손실 통제는 위험을 잘합니다. 운반 비용 제어, 매개 변수 최적화, 중지 손실 최적화 등에 대한 추가 개선은 전략을 향상시킬 수 있으며 조사 할 가치가 있습니다.


/*backtest
start: 2022-09-16 00:00:00
end: 2023-09-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Noro's ShiftMA-multi Strategy v1.1", shorttitle = "ShiftMA-multi", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
long = input(3, defval = 3, minval = 0, maxval = 3, title = "Lines for long")
short = input(3, defval = 3, minval = 0, maxval = 3, title = "Lines for short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len = input(3, minval = 1, title = "MA Length")
src = input(ohlc4, title = "MA Source")
shortlevel3 = input(15.0, title = "Short line 3")
shortlevel2 = input(10.0, title = "Short line 2")
shortlevel1 = input(5.0, title = "Short line 1")
longlevel1 = input(-5.0, title = "Long line 1")
longlevel2 = input(-10.0, title = "Long line 2")
longlevel3 = input(-15.0, title = "Long line 3")
needoffset = input(true, title = "Offset")
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")

//Variables
size = strategy.position_size
mult = 1 / syminfo.mintick

//MA
ma = sma(src, len)
longline1 = long >= 1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
longline2 = long >= 2 ? round(ma * ((100 + longlevel2) / 100) * mult) / mult : close
longline3 = long >= 3 ? round(ma * ((100 + longlevel3) / 100) * mult) / mult : close
shortline1 = short >= 1 ? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
shortline2 = short >= 2 ? round(ma * ((100 + shortlevel2) / 100) * mult) / mult : close
shortline3 = short >= 3 ? round(ma * ((100 + shortlevel3) / 100) * mult) / mult : close

//Lines
colorlong1 = long >= 1 ? color.lime : na
colorlong2 = long >= 2 ? color.lime : na
colorlong3 = long >= 3 ? color.lime : na
colorshort1 = short >= 1 ? color.red : na
colorshort2 = short >= 2 ? color.red : na
colorshort3 = short >= 3 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline3, offset = offset, color = colorshort1)
plot(shortline2, offset = offset, color = colorshort2)
plot(shortline1, offset = offset, color = colorshort3)
plot(ma, offset = offset, color = color.blue)
plot(longline1, offset = offset, color = colorlong1)
plot(longline2, offset = offset, color = colorlong2)
plot(longline3, offset = offset, color = colorlong3)

//Trading
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
lots = 0.0
needtime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
if ma > 0
    lots := round(size / lot)
    strategy.entry("L1", strategy.long, lot, limit = longline1, when = (lots == 0 and long >= 1 and needtime))
    lots := round(size / lot)
    strategy.entry("L2", strategy.long, lot, limit = longline2, when = (lots <= 1 and long >= 2 and needtime))
    lots := round(size / lot)
    strategy.entry("L3", strategy.long, lot, limit = longline3, when = (lots <= 2 and long >= 3 and needtime))
    
    lots := round(size / lot)
    strategy.entry("S1", strategy.short, lot, limit = shortline1, when = (lots == 0 and short >= 1 and needtime))
    lots := round(size / lot)
    strategy.entry("S2", strategy.short, lot, limit = shortline2, when = (lots >= -1 and short >= 2 and needtime))
    lots := round(size / lot)
    strategy.entry("S3", strategy.short, lot, limit = shortline3, when = (lots >= -2 and short >= 3 and needtime))
if size > 0
    strategy.entry("TPL", strategy.short, 0, limit = ma)
if size < 0
    strategy.entry("TPS", strategy.long, 0, limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

더 많은