연속적 긍정적 라인 단기 반전 전략


생성 날짜: 2023-10-08 13:56:39 마지막으로 수정됨: 2023-10-08 13:56:39
복사: 1 클릭수: 767
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

개요

이 전략은 고전적인 단기 거래 사고방식에 기초하고 있는데, 연속적으로 다수 K 선이 형성된 후, 음선이 나타나면 공백이 발생하고, 연속적으로 다수 음선이 나타나면 양선이 나타나면 공백이 발생한다. 구체적으로, 이 전략은 K 선의 실체 높이와 색상을 검출하여, 연속적으로 다수 K 선이 나타나는 것을 판단하고, 이후 RVI 지표를 통해 역전 여부를 판단한다. 전체적으로, 이것은 단기 연속적인 K 선의 특성을 RVI 지표와 조합하여 단기 역전 거래를 실현하는 전략이다.

전략 원칙

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

  1. K선 엔터티의 높이가 최소 높이의 값을 초과하는지 검출하여 너무 작은 양선 및 음선 변동을 필터링한다.

  2. 첫 번째 K 선이 같은 색인지 판단하고, 만약 그렇다면, 단기 가격 반전의 기회를 만들 수 있다.

  3. 앞의 두 K선과 같은 색을 확인한 후, 만약 현재 K선과 앞의 두 K선 색이 다르면 거래 신호가 발생한다. 즉, 연속적으로 두 개의 음선 뒤에 1개의 선이 더하고, 연속적으로 두 개의 음선 뒤에 1개의 선이 공백한다.

  4. 거래 입시 후, RVI 지표의 다공간 교차를 통해 포지션 방향을 판단한다. RVI 지표는 단기 반전점을 판단할 수 있다. RVI 지표선이 신호선을 통과할 때 포지션 평지 포지션을 수행한다.

  5. 전체적으로, 이 전략은 K선 특성과 RVI 지표를 고려하여 단기 반전 거래 시스템을 형성한다. 단기 비정상적인 가격 행동이 발생할 때 반전 기회를 잡아서 이익을 얻는다.

우위 분석

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

  1. 단기 가격 변형을 포착한다. 연속적인 다수 양선 또는 연속적인 다수 음선이 나타났을 때 단기간에 가격이 변동된 것을 나타냅니다. 이 때 역행동은 더 나은 수익을 얻을 수 있다.

  2. RVI 지표 보조 판단. RVI 지표는 단기 반전점을 효과적으로 판단하고, K선 특성과 상호 작용하여 시스템의 안정성을 향상시킨다.

  3. 연동 빈도가 높기 때문에 짧은 라인 연동에 적합하다. 연속적인 K 라인 동색이 자주 발생하며, RVI 지표와 함께 이 전략은 더 많은 거래 기회를 제공할 수 있다.

  4. 리스크를 조절할 수 있다. 고정된 거래 수를 사용하며, 스톱로스 스톱을 설정한다.

  5. 논리적으로 명확하고 간단하다. 이해하기 쉽고 실행이 쉬워, 실드 디스크 동작의 난이도가 크지 않다.

위험 분석

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

  1. 단기 반전이 반드시 성립하지 않는다. 지속적인 트렌드 상황에서는 단기 반전 신호가 무효화되어 잘못된 입장이 발생할 수 있다.

  2. RVI 지표가 잘못된 신호를 발산할 수 있다. RVI 지표는 특별한 상황으로 인해 실패할 수도 있다.

  3. 손해 막대를 잘못 설정하면 손해를 확대할 수 있다. 합리적인 손해 막점을 설정해야 한다.

  4. 연속 동색 K선 기준은 너무 강하다. N근 K선 내에서 나타나는 X% 동색 K선 비율로 최적화를 고려할 수 있다.

  5. 거래 수 크기에 주의를 기울여야 한다. 고정 수는 전체적인 위험 틈을 통제할 수 없으며, 대수 거래는 포지션이 폭발할 수 있다.

최적화 방향

이 전략은 다음의 몇 가지 측면에서 더욱 개선될 수 있습니다.

  1. 연속 K선 동색 판단 논리를 최적화하여, 고정 근수보다는 통계적 방법을 사용한다.

  2. RVI 변수를 최적화하여 최적의 변수 조합을 찾습니다.

  3. 시장의 변동에 따라 trailing stop loss 전략이 추가되었다.

  4. 포지션 관리 모듈을 추가하고, 사용률에 따라 거래 수를 동적으로 조정한다.

  5. 더 많은 필터링 조건을 추가하여 채널, 트렌드 및 기타 지표 조합과 같은 시스템의 안정성을 향상시킵니다.

  6. 다양한 품종에 대한 파라미터를 최적화하여 적응력을 높인다.

  7. 기계학습을 도입하여 역사 데이터에 대한 훈련을 실시하고, 동적으로 최적화된 시스템 파라미터를 도입한다.

요약하다

이 전략은 전체적으로 단기 K선 이상과 RVI 지표에 기반한 전형적인 단기 역전 거래 전략이다. 장점이 있지만 위험도 존재한다. 매개 변수를 지속적으로 최적화하고 더 엄격한 시스템을 구축함으로써 전략의 안정성과 수익성을 더욱 향상시킬 수 있다. 그러나 어떤 전략도 손실을 완전히 피할 수 없으며, 거래자가 합리적이고 위험을 잘 통제해야 한다.

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

//@version=4
//This is part of a series of strategies developed automatically by a online software. I cannot share the site url, which is not related to me in any way, because it is against the TV reules.
//
//This strategy was optimized for GBPUSD, timeframe 1D, fixed lots 0.1, initial balance 1000€
//LOGIC:
//- LONG ENTRY when previous candle is bear
//- LONG EXIT: RVI > signal line
//- SHORT ENTRY when previous candle is bull
//- SHORT EXIT: RVI <  signal line
//
//NOTE: I considered the open of actual candle instead of close otherwise there will be a back shift of 1 candle in pine script
//
//Take profit = no
//Stop loss = no

// strategy("Expert studio strategy 1 - GBPUSD", overlay=false, precision=6, initial_capital=1000,calc_on_every_tick=true, pyramiding=0, default_qty_type=strategy.fixed, default_qty_value=10000, currency=currency.EUR)

//INPUTS
src = input(close, "source")
min_body_height = input(42, "Minimum body height", type=input.float)
//bars_back=input(2, "Consecutive bars of same color")
rvi_period = input(55, "RVI period")

//CALCULATIONS_____________________________
//candle color
body_height = abs(open - close) / syminfo.mintick
body_color = open > close ? color.red : color.green

//da migliorare for i=0 to bars_back-1

//RVI -------- thanks to hecate
p = rvi_period

CO = close - open
HL = high - low

value1 = (CO + 2 * CO[1] + 2 * CO[2] + CO[3]) / 6
value2 = (HL + 2 * HL[1] + 2 * HL[2] + HL[3]) / 6

num = sum(value1, p)
denom = sum(value2, p)

RVI = denom != 0 ? num / denom : 0

RVIsig = (RVI + 2 * RVI[1] + 2 * RVI[2] + RVI[3]) / 6

plot(RVI, color=color.green, style=plot.style_line, linewidth=1)
plot(RVIsig, color=color.red, style=plot.style_line, linewidth=1)

//----------------------------------

longCondition = body_height[1] >= min_body_height and body_color[1] == color.red and 
   body_height[0] >= min_body_height and body_color[0] == color.red and 
   RVIsig > RVI
exitLong = RVI > RVIsig

shortCondition = body_height[1] >= min_body_height and body_color[1] == color.green and 
   body_height[0] >= min_body_height and body_color[0] == color.green and 
   RVIsig < RVI
exitShort = RVI < RVIsig

if longCondition and strategy.opentrades == 0
    strategy.entry("Long", strategy.long)

strategy.close("Long", when=exitLong)

if shortCondition and strategy.opentrades == 0
    strategy.entry("Short", strategy.short)

strategy.close("Short", when=exitShort)

// === Backtesting Dates === thanks to Trost

testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2011, "Backtest Start Year")
testStartMonth = input(10, "Backtest Start Month")
testStartDay = input(7, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, testStartHour, 0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testStopHour = input(23, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, testStopHour, 0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
testPeriod_1 = testPeriod()
isPeriod = testPeriodSwitch == true ? testPeriod_1 : true
// === /END

if not isPeriod
    strategy.cancel_all()
    strategy.close_all()