동적 RSI 직사각형 그리드 전략


생성 날짜: 2023-10-30 11:29:30 마지막으로 수정됨: 2023-10-30 11:29:30
복사: 0 클릭수: 1022
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

동적 RSI 직사각형 그리드 전략

개요

이 전략은 그리드 봇과 유사한 전략으로, 주로 알고리즘 거래에 사용됩니다. 거래량에 기반한 동적, 비등 간격의 그리드 그리드를 사용하며, RSI가 특정 조건을 충족할 때만 그리드를 업데이트합니다. 또한 일반적인 그리드 봇과 달리 돌파 거래의 특성을 가지고 있습니다.

간단히 말해서, 이 전략은 매번 RSI가 구매/판매 신호선을 통과할 때마다, 그레이트를 업데이트하여, 주어진 데이터 소스 (설정된 “src”) 의 거래량에 기반한 최고/최저 가격으로 만든다. 이 범위에서 5개의 평행 간격의 선을 생성하고, 현재 데이터 소스를 사용하여 가장 가까운 데이터 소스가 어떤 라인인지 판단한다.

당신은 설정에서 공백, 데이터 소스, RSI 주기의 길이를 설정할 수 있습니다.

전략 원칙

이 전략의 핵심 논리는 다음과 같습니다.

  1. RSI 지표를 사용하여 트렌드 반전 지점을 판단하고, RSI 라인을 가로질러 설정된 오버 바이 지역 또는 오버 샐 지역으로 확인 신호를 니다.

  2. RSI 확인 신호가 발생했을 때, 일정 주기 동안의 최고 가격과 최저 가격을 기록하고, 그리드 상 하위 수준으로 설정한다.

  3. 상하계 기준으로 5개의 격자선으로 나누어져 있으며, 실시간으로 가격이 어느 격자선에 가까운지 판단한다.

  4. 가격이 격자선 상단선을 뚫을 때, 더 많은 입장을 취하고; 가격이 격자선 아래선으로 떨어질 때, 공백 입장을 취한다.

  5. 그리드 브레이크를 사용하는 것이 일반 그리드 봇의 그리드 터치 방식보다 트렌드 브레이크를 더 잘 잡을 수 있습니다.

  6. 거래가 종료될 때 모든 피라미드 주문을 매장하고, 밤새의 위험을 방지한다.

이 전략은 다음과 같은 부분들로 구성됩니다.

  1. 입력 매개 변수 설정: 데이터 소스, RSI 매개 변수, 더 많은 하차 선택 등등.

  2. RSI 지수 계산: RSI 지수를 계산하고 교차 신호가 발생하는지 판단하십시오.

  3. 동적 격자 설정: RSI 신호가 발생했을 때 가격 범위를 기록하고 격자 라인을 계산하십시오.

  4. 신호 판단: 가격이 격자 상·하를 돌파했는지 검출하고, 더 많은 하위 신호를 판단한다.

  5. 주문 관리: 더 많은 공백 신호를 발신하고 종결 전에 평형 피라미드 주문.

  6. 그래프 인터페이스: 그리드 라인을 표시하고, 공백 영역을 추가합니다.

동적으로 격자를 업데이트하여 RSI 지표와 결합하여 트렌드 판단과 브레이크 신호를 통해 전략이 트렌드를 효과적으로 추적하고 역전 시 적절한 방향으로 조정할 수 있습니다. 종결 전 평점은 하룻밤 위험을 효과적으로 제어 할 수 있습니다.

우위 분석

이 전략의 주요 장점은 다음과 같습니다.

  1. 동적 격자 (dynamic grid) 는 고정된 격자 (fixed immutable grid) 보다 추세에 따라 스스로 적응할 수 있고, 더 탄력적이다.

  2. RSI가 트렌드 반전을 확인했을 때만 격을 조정하여 일부 노이즈 신호를 필터링 할 수 있습니다.

  3. 트렌드 전환점을 더 정확하게 잡기 위해 터치 신호를 사용하는 것보다 브레이크 신호를 사용하십시오.

  4. 매매 전까지 모든 지분을 매각하면 하룻밤 사이에 큰 변동의 위험을 피하고 이익을 보호 할 수 있습니다.

  5. RSI 지표는 오버 바이 오버 셀 상황을 더 잘 판단할 수 있으며, 동적 그리드와 결합하면 효과가 좋다.

  6. 트렌드 초기에 더 나은 진입 기회를 얻을 수 있습니다.

  7. 격자 간격과 거래량 비율을 조정하면 전략의 위험/이익 특성을 유연하게 조정할 수 있다.

  8. 그래픽 인터페이스는 직관적으로 격자 분포와 추가 공백 영역을 보여줍니다.

  9. 다양한 거래자의 요구를 충족시키기 위해 코스피를 열거나 열지 선택할 수 있습니다.

  10. 규칙은 간단하고 명확하며, 이해하기 쉽고, 알고리즘 거래에 적합합니다.

이러한 장점은 트렌드를 자동으로 추적하면서 위험을 통제하는 전략으로 양적 거래 실장 응용에 적합합니다.

위험 분석

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

  1. 큰 진동 추세에서, 중단 손실 위험이 발생할 수 있습니다. 적절히 느슨한 중지 손실 범위, 또는 진동 동안 전략을 일시 중지 할 수 있습니다.

  2. 밤에는 급격한 하락이 발생할 수 있으며, 이로 인해 상장 규모가 커진다. 상장 비율을 줄이는 것을 고려하여 이러한 위험을 피할 수 있다.

  3. 매개 변수 설정을 잘못하면 거래 빈도나 신호 오류가 발생할 수 있다. 최적화 매개 변수를 신중하게 테스트해야 한다.

  4. 거래비용이 높을 때, 격자 거래 수익은 반복적으로 먹힐 수 있다. 거래 수를 적절히 조정하거나 더 낮은 요금을 선택하는 거래소를 선택한다.

  5. 브레이크 신호는 트렌드 반전점보다 조금 늦게 나타날 수 있으며, 합리적인 브레이크 크기를 설정해야 한다.

  6. 주식 시장이 평평한 상승 단계에서 이 전략은 좋지 않을 수 있다. 다른 지표와 함께 사용하는 것을 고려할 수 있다.

  7. 큰 포지션과 피라미드 포지션을 지원하기 위해 충분한 자금이 필요합니다. 그렇지 않으면 효과가 좋지 않습니다.

대책:

  1. 매개 변수를 최적화하여 거래 빈도를 낮추고 과도한 거래를 방지합니다.

  2. 트렌드 지표와 결합하여 불안정한 기간의 거래를 피하십시오.

  3. 포지션을 조정하고, 단편 거래 비율을 낮추고, 위험을 통제한다.

  4. 다양한 뚫림폭 변수를 테스트하고, 적시성과 안정성을 균형 잡는다.

  5. 다른 지표와 결합하여 더 많은 시장 정보를 활용하는 것을 고려할 수 있습니다.

  6. 투자자금을 늘리고, 포지션 규모를 늘리고, 수익을 올릴 수 있는 공간을 늘립니다.

매개 변수 최적화, 위험 관리, 다른 전략과 결합하는 방법과 같은 방법을 통해, 전략의 위험을 어느 정도 줄여서 안정적으로 작동 할 수 있습니다.

최적화 방향

이 전략은 다음과 같은 부분에서 더 개선될 수 있습니다.

  1. RSI 변수를 최적화하고, 다른 RSI 주기의 길이를 테스트하여 최적의 변수 조합을 찾습니다.

  2. 다양한 격자 간격 설정을 테스트하여 최적의 수익 위험 비율을 찾을 수 있습니다.

  3. MACD, KD 등과 같은 다른 지표의 필터링 신호와 결합하여 정확도를 향상시키도록 시도하십시오.

  4. 시장의 변동에 따라 역동적으로 중지량을 조정하는 적응적 중지 전략을 개발하십시오.

  5. 포지션 개시 조건을 추가하고, 트렌드가 충분히 명확할 때만 포지션을 개시하고, 피당하는 것을 피하십시오.

  6. 재검토 최적화를 수행하고, 더 긴 기간의 데이터를 테스트하고, 매개 변수의 안정성을 평가한다.

  7. 기계 학습 기반의 동적 변수 최적화를 시도하여 다양한 시장 환경에 맞게 전략을 적용하십시오.

  8. 옵션과 결합된 전략을 탐색하고, 옵션으로 포지션 위험을 보호하십시오.

  9. 최근 시장 특성에 따라 변수 최적화 전략을 조정하여 전략의 유효성을 유지하십시오.

  10. 그래픽 전략 최적화 플랫폼을 개발하여 빠른 최적화 테스트를 지원합니다.

자동화 된 변수 최적화, 전략 조합 및 더 많은 시장 정보를 도입함으로써 전략은 더 나은 안정성과 수익률을 얻을 수 있으며 진정한 신뢰할 수있는 양적 거래 전략이 될 수 있습니다.

요약하다

전체적으로 볼 때, 이 RSI 직사각형 격자 전략은 RSI 지표를 사용하여 트렌드 역전 확인 신호를 판단하고, 가격 범위 동적 격자를 설정하고, 격자 라인을 돌파 할 때 거래하고, 하루 동안 완전히 평점, 유연한 트렌드 추적 알고리즘 거래 전략을 형성한다. 고정 격자 전략에 비해, 그것은 시장 변화에 더 잘 적응 할 수 있다.

이 전략은 RSI 지표 판단 트렌드, 동적 격자 적응, 돌파 모드 거래 및 하루 중 완전히 평점 등과 결합하여 몇 가지 장점이 있습니다. 이것은 트렌드를 효과적으로 추적하면서 위험을 제어 할 수 있습니다. 그러나이 전략에는 주의해야 할 잠재적인 위험도 있습니다.

이 전략은 또한 많은 최적화 방향이 있으며, 더 많은 지표, 기계 학습 최적화 파라미터 및 그래픽 피드백 플랫폼을 도입함으로써 더 안정적이고 더 높은 수익을 창출하는 알고리즘 거래 전략으로 최적화 할 수 있습니다. 전체적으로, 이 전략은 양적 거래에 대한 신뢰할 수 있고 쉽게 작동하는 트렌드 추적 알고리즘 프레임 워크를 제공합니다.

전략 소스 코드
/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © wbburgin

//@version=5
// strategy("RSI Box Strategy (pseudo-Grid Bot)", overlay=true, initial_capital = 10000, 
//  default_qty_type = strategy.percent_of_equity, default_qty_value = 1, pyramiding = 33, commission_value=0.10)

src = input.source(close,"Source")
rsiLength = input.int(14,"RSI Length")
oblvl = input.int(70,"Overbought Level")
oslvl = input.int(30,"Oversold Level")
useShorts = input.bool(false,"Use Shorts",inline="B")
showGrid = input.bool(false,"Show Grid",inline="B")

rsi = ta.rsi(src,rsiLength)

rsi_crossdn = ta.crossunder(rsi,oblvl)
rsi_crossup = ta.crossover(rsi,oslvl)

highest = ta.vwma(ta.highest(src,rsiLength),rsiLength)
lowest = ta.vwma(ta.lowest(src,rsiLength), rsiLength)

gridTop = ta.valuewhen(rsi_crossdn,highest,0)
gridBottom = ta.valuewhen(rsi_crossup,lowest,0)
gridMiddle = math.avg(gridTop,gridBottom)
gridMidTop = math.avg(gridMiddle,gridTop)
gridMidBottom = math.avg(gridMiddle,gridBottom)

diff1 = math.abs(src - gridTop)
diff2 = math.abs(src - gridBottom)
diff3 = math.abs(src - gridMiddle)
diff4 = math.abs(src - gridMidTop)
diff5 = math.abs(src - gridMidBottom)

minDiff = math.min(diff1, diff2, diff3, diff4, diff5)

// Determine which line is the closest
float closestLine = na
if minDiff == diff1
    closestLine := gridTop
else if minDiff == diff2
    closestLine := gridBottom
else if minDiff == diff3
    closestLine := gridMiddle
else if minDiff == diff4
    closestLine := gridMidTop
else if minDiff == diff5
    closestLine := gridMidBottom

buyCrosses = ta.crossover(src,gridTop) or ta.crossover(src,gridBottom) or ta.crossover(src,gridMiddle) or ta.crossover(src,gridMidTop) or ta.crossover(src,gridMidBottom)
sellCrosses= ta.crossunder(src,gridTop) or ta.crossunder(src,gridBottom) or ta.crossunder(src,gridMiddle) or ta.crossunder(src,gridMidTop) or ta.crossunder(src,gridMidBottom)

condition_bull = buyCrosses
condition_bear = sellCrosses

var float bull_status_line = na
var float bear_status_line = na
var float bull_buy_line = na
var float bear_sell_line = na

if condition_bull
    bull_status_line := closestLine
if condition_bear
    bear_status_line := closestLine

if bull_status_line == gridBottom
    bull_buy_line := gridMidBottom
if bull_status_line == gridMidBottom
    bull_buy_line := gridMiddle
if bull_status_line == gridMiddle
    bull_buy_line := gridMidTop
if bull_status_line == gridMidTop
    bull_buy_line := gridTop

if bear_status_line == gridTop
    bear_sell_line := gridMidTop
if bear_status_line == gridMidTop
    bear_sell_line := gridMiddle
if bear_status_line == gridMiddle
    bear_sell_line := gridMidBottom
if bear_status_line == gridMidBottom
    bear_sell_line := gridBottom

l = ta.crossover(src,bull_buy_line)
s = ta.crossunder(src,bear_sell_line)

if l
    strategy.entry("Long",strategy.long)
if s
    strategy.close("Long")
    if useShorts
        strategy.entry("Short",strategy.short)

// Plotting
in_buy = ta.barssince(l) < ta.barssince(s)
u=plot(bull_buy_line,color=na,title="Buy Plot")
d=plot(bear_sell_line,color=na,title="Sell Plot")

plot(not showGrid?na:gridBottom,color=color.new(color.white,75),title="Grid Line -2")
plot(not showGrid?na:gridMidBottom,color=color.new(color.white,75),title="Grid Line -1")
plot(not showGrid?na:gridMiddle,color=color.new(color.white,75),title="Grid Line 0")
plot(not showGrid?na:gridMidTop,color=color.new(color.white,75),title="Grid Line 1")
plot(not showGrid?na:gridTop,color=color.new(color.white,75),title="Grid Line 2")


fill(u,d,color=in_buy ? color.new(color.lime,75) : color.new(color.red,75))