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


생성 날짜: 2024-02-28 17:51:14 마지막으로 수정됨: 2024-02-28 17:51:14
복사: 0 클릭수: 622
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

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

개요

가격 통로 로봇 화이트 박스 전략은 가격 통로 지표에 기반한 간단한 기계화 거래 전략이다. 가격 통로의 상하한을 사용하여 입구와 출구 시간을 판단한다. 이 전략은 longtime가 다중,shortime가 공백이다.

전략 원칙

가격 통로 로봇의 백박스 전략의 핵심 논리는 다음과 같습니다.

  1. 가장 높고 가장 낮은 함수를 사용하여 가장 최근 len 루트 K 선의 가장 높은 가격과 가장 낮은 가격을 계산합니다. 이는 가격 채널의 상단과 하단으로 정의됩니다.
  2. 가격 통로의 중간값을 계산: ((최고 가격 + 최저 가격) /2
  3. 가격 관행 상한을 넘으면 더 많은 포지션을 열 수 있습니다
  4. 가격이 하위 경계를 넘었을 때 포장을 열어라
  5. 가격의 경로 중간값으로 돌아갔을 때, 평준화

이 전략에는 몇 가지 구성 가능한 변수들이 있습니다.

  • 가격 통로의 길이는 len: 기본 50 K 라인
  • 포지 오픈 유형: 다중 헤드, 공백 헤드 개별적으로 구성
  • 포지션 개시 금액: 계좌 지분의 100%
  • 스톱: 가격 채널 중간값을 스톱으로 사용할 수 있습니다.
  • 거래 시간: 지정된 날짜 범위 내에서만 거래할 수 있습니다.

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

우위 분석

가격 통로 로봇 백박스 전략은 다음과 같은 장점이 있습니다.

  1. 전략 논리는 간단하고 이해하기 쉽고 실행이 가능합니다.
  2. 가격 통로 지표를 활용하여 추세와 반향을 판단합니다.
  3. 더 많은 구성 가능한 파라미터, 더 많은 적응력
  4. 손실을 제한할 수 있는 내장된 손해 방지 장치
  5. 중요한 사건의 영향을 피하기 위해 시간 필터를 지원합니다.

전체적으로 보면 이 전략은 간단하고 실용적인 트렌드 추적 전략으로, 파라미터를 조정하면 좋은 효과를 얻을 수 있다.

위험 분석

가격 통로로봇의 백박스 전략에는 몇 가지 위험도 있습니다.

  1. 가격 통로 지표는 변수 len에 민감하며, 다른 시간 주기 및 품종은 독립적으로 테스트 및 최적화가 필요합니다.
  2. 스톱로드를 추적할 때, 리스크를 활용할 수 있으며, 스톱 거리도 시장의 변동에 따라 조정할 수 있습니다.
  3. 수평선과 변동성 상황에서는 더 많은 무관한 거래가 발생하여 거래 비용과 슬라이드 손실이 증가합니다.

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

  1. 워크 포워드 분석 방법을 사용하여 자동으로 최적화 변수
  2. 스톱로즈 가격에 부피를 추가하여 중개금의 가능성을 피합니다.
  3. 트렌드 판단 지표를 늘리고, 수평 변동 시장의 거래를 피하십시오.

최적화 방향

가격 통로 로봇 백박스 전략에는 더 많은 최적화가 가능합니다.

  1. 대주기 추세에 대한 판단을 높이고 역대 거래를 피하십시오.
  2. 다양한 품종 간의 가격 차이를 조합하여 매개 변수를 설정하여 중매 기회를 활용하십시오.
  3. 스톱 가격에 무작위적 완충 구역을 추가하여 배당 가능성을 낮추는 것
  4. 시장의 변동에 따라 가격 통로 파라미터를 동적으로 조정
  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")