범위에 기반한 양방향 트렌드 추적 전략

저자:차오장, 날짜: 2024-02-01 14:22:26
태그:

img

전반적인 설명

이 전략은 마지막 가장 높은 가격 (lastbull) 과 마지막 가장 낮은 가격 (lastbear) 을 계산합니다. 다음으로 현재 가격을 lastbull과 lastbear과 비교하여 가격이 특정 범위에 진입했는지 여부를 결정하고 따라서 거래 신호를 생성합니다. 가격이 특정 비율로 lastbull보다 상승할 때 길고 가격이 특정 비율로 lastbear 아래로 떨어지면 짧습니다.

전략 논리

전략은 먼저 마지막 가장 높은 가격 lastbull와 마지막 가장 낮은 가격 lastbear를 계산합니다. 다음으로 현재 가격의 변화 비율 ddl lastbull에 비해, 그리고 변화 비율 dds lastbear에 비해 계산합니다.

ddl가 구성된 긴 신호의 임계 신호장보다 낮을 때, 긴 신호가 생성됩니다. dds가 구성된 짧은 신호의 임계 신호장보다 높을 때, 짧은 신호 dn이 생성됩니다.

긴 신호를 수신하면, needlong 매개 변수가 사실이라면 긴 포지션을 개척한다. 짧은 신호를 수신하면, needshort 매개 변수가 사실이라면 짧은 포지션을 개척한다. 포지션 크기의 자본은 계정 자금으로부터 계산된다.

그것은 긴 포지션을 닫습니다. 가격이 상승하면 긴 포지션을 열고, 가격이 하락하면 짧은 포지션을 닫습니다.

이점 분석

이 전략은 트렌드와 범위 분석을 결합합니다. 트렌드를 파악하고 범위 브레이크에서 거래 신호를 생성 할 수 있습니다. 간단한 트렌드 추적 전략과 비교하면 범위 브레이크 후에 새로운 트렌드 방향을 빠르게 파악 할 수 있습니다.

매개 변수들은 다른 제품들에 대해 매우 구성이 가능합니다. 중요한 이벤트를 피하기 위해 거래 시간 범위를 구성할 수 있습니다.

위험 분석

이 전략에는 거래 당 손실을 제한하는 스톱 로스 메커니즘이 없습니다. 거래 범위가 큰 경우 가격 변동에 의해 포지션 크기가 크게 영향을받을 수 있습니다.

거래당 손실을 제한하기 위해 스톱 로스를 추가 할 수 있습니다. 포지션 사이징 알고리즘은 포지션 크기를 안정시키기 위해 제품에 따라 사용자 정의 할 수 있습니다.

최적화 방향

  1. 트레이드 리스크 당 제어에 이동 스톱 손실을 추가합니다.
  2. 위치 크기를 안정화하기 위해 위치 크기를 측정하는 알고리즘을 개선합니다. 예를 들어, ATR을 사용하십시오.
  3. 입력 신호에 대한 필터링을 추가, 예를 들어 황금 십자가가 발생했을 때만 입력
  4. 더 낮은 시스템 위험과 상관관계를 가진 여러 상품을 거래합니다.

요약

이 전략은 트렌드 분석과 범위 브레이크아웃을 결합하여 새로운 트렌드를 파악하고 범위 제한 특성을 활용할 수있는 거래 신호를 생성합니다. 매개 변수는 다른 제품에 대해 매우 구성 가능합니다. 더 복잡한 시장 환경에 적응하기 위해 최적화 할 수있는 많은 공간이 있습니다.


/*backtest
start: 2023-01-25 00:00:00
end: 2024-01-31 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2019

//@version=4
strategy(title = "Noro's DDL Strategy", shorttitle = "DDL str", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
needlong = input(true, title = "Long")
needshort = input(true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
signalshort = input(3.0, title = "Short, %")
signallong = input(-3.0, title = "Long, %")
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")

//Levels
bull = close > close[1] ? 1 : 0
bear = close < close[1] ? 1 : 0
lastbull = 0.0
lastbull := bull ? close : lastbull[1]
lastbear = 0.0
lastbear := bear ? close : lastbear[1]

//Signals
ddl = ((close / lastbull) - 1) * 100
up = ddl < signallong
dds = ((close / lastbear) - 1) * 100
dn = dds > signalshort

//Lines
plot(dds, style = plot.style_area, color = color.red, transp = 0)
plot(ddl, style = plot.style_area, color = color.lime, transp = 0)
plot(0, color = color.black, linewidth = 2, transp = 0)

//Background
col = (up and needlong) or (dn and needshort) ? color.yellow : na
bgcolor(col, transp = 20)

//Orders
lot = 0.0
lot := strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
truetime = true
if up
    strategy.entry("Long", strategy.long, lot, when = needlong and truetime)
if dn
    strategy.entry("Short", strategy.short, lot, when = needshort and truetime)
if strategy.position_size > 0 and close > open
    strategy.entry("Close", strategy.short, 0)
if strategy.position_size < 0 and close < open
    strategy.entry("Close", strategy.long, 0)

더 많은