방향성 지수 양방향 거래 전략


생성 날짜: 2023-12-19 14:13:52 마지막으로 수정됨: 2023-12-19 14:13:52
복사: 0 클릭수: 669
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

방향성 지수 양방향 거래 전략

개요

이 전략은 상품의 운동 지수 ((DI) 를 계산하고 제한 매개 변수와 결합하여 상품의 양방향 거래를 실현한다. DI+가 DI-보다 큰 한 가지 제한 매개 변수일 때 더 많이 하고, DI-가 DI+보다 큰 한 가지 제한 매개 변수일 때 빈 것을 한다.

전략 원칙

이 전략의 핵심 지표는 동향 지수 ((DI) 이다. DI는 다음과 같은 공식으로 계산된다:

DI+ = (DM+ / 실제 범위) × 100 DI- = (DM- / 실제 범위) × 100

여기서 DM+는 다면 움직임을 나타내고, DM-는 공백 움직임을 나타낸다. 실제 범위는 최대값을 계산하여 3일 최고 가격, 최저 가격 및 어제 종점 가격의 변동을 통해 최근의 변동량을 나타낸다.

DI의 정의에 따르면, DI+ > DI-일 때, 현재 실세에 있는 무력 (空頭力) 이 무력 (空頭力) 보다 강하다는 것을 나타내며, 무력 (空頭市場) 에 속한다.

이 전략은 이 특성을 이용해서 한계 매개 변수를 설정한다. DI+가 DI-한계 매개 변수보다 크면 현재는 다목적 시장이라고 판단하고, 더 많이 한다. DI-가 DI+ 한계 매개 변수보다 크면 현재는 공백 시장이라고 판단하고, 공백한다.

예를 들어, 제한 변수를 3로 설정하면 구체적인 거래 규칙은 다음과 같습니다.

  1. 더 많은 일을 할 수 있습니다
  2. DI- - DI+ > 3일 때 공백

DI+와 DI- 사이에 작은 차차 변동이 자주 있기 때문에, 제한 변수를 설정하면 명확한 방향성이 없는 거래 신호를 필터링하여 불필요한 거래를 줄일 수 있으며, 이는 이 전략의 장점이다.

우위 분석

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

  1. DI를 이용해서 상황을 판단하는 방향성이 강하고 신뢰성이 높다.

DI는 다공간 양측의 힘을 비교해 직접적으로 시장의 흐름을 판단하고, 곡선 적합과 같은 복잡한 알고리즘이 없으며, 이론은 간단하고 신뢰할 수 있다.

  1. 제한 매개 변수를 설정하면 신호를 효과적으로 필터링 할 수 있습니다.

가시적인 방향성이 없는 작은 변동을 제한하는 매개 변수 필터링을 통해, 가시적인 방향성이 강한 시장을 선택하여 거래하는 것을 피한다.

  1. 자동 쌍방향 거래

다중 빈 위치는 DI 지표에 따라 자동으로 전환할 수 있으며, 인적 판단을 필요로 하지 않고 거래의 난이도를 줄일 수 있다.

  1. 사용자 정의 거래 시간

지원 설정은 사용자 정의 날짜 범위 내에서만 거래하고, 종료 후 자동으로 청산되며, 유연하고 편리하다.

  1. 더 많은 일을 할 수도 있고, 빈 일을 할 수도 있습니다.

다공간 스위치를 통해 단방향 신호만 선택할 수 있으며, 다공간 또는 다공간을 구현하여 다양한 시장 환경에 적응한다.

위험 분석

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

  1. DI가 잘못된 신호를 발산할 가능성이

시장이 급격하게 변동할 때, DI는 단기간에 잘못된 신호를 발산하여 거래 실패로 이어질 수 있습니다. 다른 지표와 결합하여 검증해야 합니다.

  1. 제한 변수가 잘못 설정되었습니다.

제한 매개 변수를 너무 크고 너무 작게 설정하면 거래 신호가 너무 적거나 너무 많을 수 있으며, 시장에 따라 매개 변수를 조정해야 합니다.

  1. 트렌드의 끝을 알 수 없습니다.

DI는 현재 트렌드 방향만 판단할 수 있고, 트렌드가 종료되었거나 반전되었는지 판단할 수 없으며, 다른 지표들이 결합되어야 한다.

위험을 대응하는 해결책은 다음과 같습니다.

  1. 이동 평균과 같은 지표들을 필터링하는 DI 신호

  2. 재측량 결과에 따라 제한 변수를 조정

  3. Volumes, MACD 등과 결합하여 추세가 역전되는지 판단하는 것

최적화 방향

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

  1. 다른 추세 지표와 함께

대중의 여론을 가할 수 있는 지표와 DI를 결합하면 판단의 정확도를 높일 수 있다.

  1. 스톱스트로드 전략에 참여하세요

모바일 스톱, 시간 또는 비율 스톱을 설정하여 수익을 고정하고 손실을 줄일 수 있습니다.

  1. 특정 품종에 대한 변수 조정

다양한 종류의 거래 특성에 따라 제한 변수와 거래 시간을 조정하면 전략의 효과를 높일 수 있다.

  1. 기계 학습 기술을 활용하여 동적 최적화

응용 강도 학습 등의 기술은 실 디스크 신호 최적화 매개 변수에 따라 설정한다.

요약하다

이 전략은 전체적으로 간단하고 실용적입니다. DI의 계산 방법을 사용하여 트렌드 방향을 판단합니다. 매개 변수 필터 신호를 제한하여; 양방향 거래가 가능하며, 더 많은 거래 또는 공백을 할 수 있습니다. 거래 시간대를 설정할 수 있습니다. 주요 장점은 높은 신뢰성이며, 효과적인 필터 신호입니다.

전략 소스 코드
/*backtest
start: 2022-12-12 00:00:00
end: 2023-12-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Noro's DI Strategy", overlay = false, 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(title="Length", defval=14)
limit = input(3, title = "limit, %")
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")

//DI
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
SmoothedTrueRange = 0.0
SmoothedDirectionalMovementPlus = 0.0
SmoothedDirectionalMovementMinus = 0.0
SmoothedTrueRange := nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange
SmoothedDirectionalMovementPlus := nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus := nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100

//Trend
trend = 0
trend := DIPlus > DIMinus + limit ? 1 : DIPlus < DIMinus - limit ? -1 : trend[1]

//Background
col = trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Lines
plot(DIPlus, color=lime, title="DI+", linewidth = 3)
plot(DIMinus, color=red, title="DI-", linewidth = 3)

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