다단계 이동 평균 거래 전략


생성 날짜: 2023-09-23 15:55:20 마지막으로 수정됨: 2023-09-23 15:55:20
복사: 0 클릭수: 686
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

개요

다단계 이동평균선 거래 전략은 여러 가지 다른 파라미터의 이동평균선을 설정하여 다단계 입수 및 중지 손실을 구현합니다. 전략은 먼저 3개의 긴 라인 및 3개의 짧은 라인을 계산합니다. 긴 라인이 짧은 라인보다 낮으면 더하고, 짧은 라인이 긴 라인보다 낮으면 공백합니다. 전략은 이동평균선 계산 주기 길이는, 오차 비율, 거래 가능한 시간 범위 등의 파라미터를 설정할 수 있습니다.

전략 원칙

  1. 계산 변수에서 src 소스 가격의 len 주기의 간단한 이동 평균을 기준 평균으로 사용한다.

  2. long 및 short 변수에 따라 대응하는 긴 선과 짧은 선의 수를 설정한다.

  3. longline1등의 긴 선은 longlevel1등의 변수로 설정된 비율에 따라 기준 평균선으로 편차한다.

  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()