가격 채널 로봇 화이트 박스 전략

저자:차오장, 날짜: 2024-02-28 17:51:14
태그:

img

전반적인 설명

가격 채널 로봇 화이트 박스 전략은 가격 채널 지표에 기반한 간단한 기계적 거래 전략이다. 이 전략은 진입점과 출구점을 결정하기 위해 가격 채널의 상부 및 하부 한계를 사용합니다. 이 전략은 상승 추세에 길고 하락 추세에 짧습니다.

전략 논리

가격 채널 로봇 화이트 박스 전략의 핵심 논리는 다음과 같습니다.

  1. 가장 높고 가장 낮은 함수를 사용하여 가격 채널의 상부와 하부 경계로 정의된 최근 len 바의 가장 높고 가장 낮은 값을 계산합니다.
  2. 가격 채널의 중간 가격을 계산합니다: (최고 최고 + 최저 낮은) / 2
  3. 가격이 가격 채널의 상한을 넘을 때 길게 가십시오.
  4. 가격이 가격 채널의 하위 한계 아래로 넘어갈 때 짧은 이동
  5. 가격이 가격 채널의 중간 가격으로 되돌아 갈 때 포지션을 닫습니다.

전략은 또한 몇 가지 구성 가능한 매개 변수를 가지고 있습니다:

  • 가격 채널 길이 len: 기본 50 바
  • 거래 방향: 긴, 짧은 개별적으로 구성 될 수 있습니다
  • 거래 규모: 계좌 자금의 100%
  • 스톱 로스: 중간에 있는 가격을 스톱 로스로 사용하는 옵션
  • 거래 시간: 설정된 날짜 범위 내에서만 거래

이러한 매개 변수를 조정함으로써 전략은 다른 제품과 시장 환경에 더 잘 적응할 수 있습니다.

이점 분석

가격 채널 로봇 화이트 박스 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 간단한 논리, 이해하기 쉽고 실행하기 쉬운
  2. 트렌드 및 역전을 결정하기 위해 가격 채널 지표를 최대한 활용하십시오.
  3. 더 나은 적응력을 위해 매우 구성 가능한 매개 변수
  4. 손실을 제한하기 위한 내장 스톱 로스 메커니즘
  5. 주요 이벤트의 영향을 피하기 위해 지원 시간 필터

요약하자면, 그것은 단순하면서도 실용적인 트렌드 다음 전략입니다.

위험 분석

가격 채널 로봇 화이트 박스 전략은 또한 몇 가지 위험을 가지고 있습니다:

  1. 가격 채널 지표는 매개 변수 len, 독립 테스트와 다양한 시간 프레임과 제품에 필요한 최적화에 민감합니다.
  2. 스톱 러스 추적은 조기 중단 될 위험이 있습니다. 스톱 러스 거리는 시장 변동성에 따라 조정되어야 합니다.
  3. 범위를 제한하고 측면 시장에서 과도한 의미없는 거래, 거래 비용 증가 및 미끄러짐

이러한 위험을 줄이기 위해서는 다음과 같은 측면에서의 최적화가 필요합니다.

  1. 패러미터를 자동으로 최적화하려면 워크 포워드 분석을 사용하세요
  2. 중지 손실 가격을 중지 중지되는 것을 피하기 위해 버퍼 영역을 추가
  3. 측면 시장에서 거래를 피하기 위해 트렌드 필터를 추가

최적화 방향

가격 채널 로봇 화이트 박스 전략의 추가 최적화에 대한 여지가 있습니다:

  1. 역동 트렌드 거래를 피하기 위해 더 높은 시간 프레임 트렌드의 판단을 추가합니다.
  2. 매개 변수를 설정하고 중재 기회를 활용하기 위해 상관 제품 간의 가격 스프레드를 사용
  3. 중지 손실 가격에 무작위 버퍼를 추가 중지 가능성을 줄이기
  4. 시장 변동성에 기초한 가격 채널 매개 변수 len을 동적으로 조정합니다.
  5. 특정 제품에 대한 전략을 최적화하기 위해 심층 학습 방법을 사용하는 트레이닝 에이전트

이러한 최적화 기술은 전략의 안정성과 수익성을 더욱 향상시키는 데 도움이 될 수 있습니다.

요약

가격 채널 로봇 화이트 박스 전략은 간단하면서도 실용적인 트렌드 다음 전략이다. 거래 결정을 내리기 위해 가격 채널 지표를 사용하여 트렌드 방향과 반전 지점을 식별합니다. 전략은 이해하기 쉽고 구현 할 수 있으며 매개 변수 조정 후 적당한 수익을 얻을 수 있습니다. 또한 매개 변수 최적화 및 스톱 로스를 통해 완화해야하는 특정 위험이 있습니다. 전반적으로 전략은 광범위한 응용 전망과 최적화 잠재력을 가지고 있으며 탐색하고 연습할 가치가 있습니다.


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

//Noro

//@version=4
strategy(title = "Robot WhiteBox Channel", shorttitle = "Robot WhiteBox Channel", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, commission_value = 0.1)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
needstop = input(true, defval = true, title = "Stop-loss")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
len = input(50, minval = 1, title = "Price Channel Length")
showll = input(true, defval = true, title = "Show lines")
showbg = input(false, defval = false, title = "Show Background")
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")

//Price Channel
h = highest(high, len)
l = lowest(low, len)
center = (h + l) / 2

//Lines
pccol = showll ? color.black : na
slcol = showll ? color.red : na
plot(h, offset = 1, color = pccol)
plot(center, offset = 1, color = slcol)
plot(l, offset = 1, color = pccol)

//Background
size = strategy.position_size
bgcol = showbg == false ? na : size > 0 ? color.lime : size < 0 ? color.red : na
bgcolor(bgcol, transp = 70)

//Trading
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
if h > 0
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = h, when = strategy.position_size <= 0 and truetime)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = l, when = strategy.position_size >= 0 and truetime)
    strategy.entry("S Stop", strategy.long, 0, stop = center, when = strategy.position_size[1] <= 0 and needstop)
    strategy.entry("L Stop", strategy.short, 0, stop = center, when = strategy.position_size[1] >= 0 and needstop)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

더 많은