렌코 진양 양자 거래 전략

저자:차오장, 날짜: 2023-09-27 17:11:30
태그:

전반적인 설명

렌코 진 양 양량 거래 전략은 내일 가격-용량 관계에 기반한 단기 거래 전략이다. 하루 내에 진 양 방향 정보를 활용하고 저위험 단기 거래를 구현하기 위해 부피 확인 신호를 결합합니다.

전략 논리

이 전략은 각 거래 날의 오픈, 클로즈, 하위 및 하위 가격을 계산하고 ATR 지표와 함께 Renko 벽돌을 생성합니다. 이인 양 벽돌이 역전되면 거래 신호가 생성됩니다.

구체적으로, 전략은 먼저 렌코 블록의 오픈 가격 o2와 클로즈 가격 c2를 계산합니다. o2c2인 경우 선을 나타냅니다. 양선이 양선으로 전환되면 판매 신호가 생성됩니다. 선이 양선으로 전환되면 구매 신호가 생성됩니다.

가짜 브레이크오웃을 필터링하기 위해 전략은 마지막 양선과 인선의 기간을 계산한다. 양선이 더 많은 기간을 가지고 있다면 신호가 더 신뢰할 수 있다. 또한, 스톱 로스와 영업 로직은 구매 및 판매 후에 설정된다.

장점

  1. 렌코 벽돌은 시장 소음을 필터하고 거래 신호를 더 명확하게 만듭니다.

  2. 가격과 부피의 관계를 결합하면 거짓 파업의 위험을 피할 수 있습니다.

  3. DAPM 모델은 일내 거래에 간단하고 효과적입니다.

  4. 맞춤형 ATR 매개 변수는 거래 주파수를 조정합니다.

  5. 사용자 정의 가능한 스톱 손실은 리스크 관리를 향상시킵니다.

위험성

  1. 아직은 불분명한 거짓 탈출의 위험이 있습니다.

  2. 부적절한 렌코 매개 변수 설정은 트렌드를 놓칠 수도 있고 거래 빈도를 증가시킬 수도 있습니다.

  3. 너무 긴 스톱 손실은 소규모 인회로 멈출 수 있습니다.

최적화

  1. 신호를 필터링하기 위해 다른 기술적 지표를 결합하는 것을 고려하십시오.

  2. 후속 스톱 로스 기능을 추가하는 것을 고려하십시오.

  3. 다른 자산에 대한 매개 변수를 최적화합니다.

  4. 여러 시간 프레임 거래를 위해 다른 시간 프레임을 결합하는 것을 고려하십시오.

결론

결론적으로, 이것은 매우 실용적인 단기 거래 전략입니다. 그것은 효율적으로 필터링하고 주요 전환점을 캡처하기 위해 가격-용량 관계를 사용합니다. 적절한 매개 변수 조정, 위험 관리 및 스톱 로스 전략은 안정성과 수익성을 크게 향상시킬 수 있습니다. 지속적인 최적화 및 테스트로,이 전략은 내일 거래자에게 강력한 도구가 될 수 있습니다.


/*backtest
start: 2022-09-26 00:00:00
end: 2023-09-26 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License https://creativecommons.org/licenses/by-sa/4.0/
// © dman103
strategy(title="Renko Strategy V2", shorttitle="Renko Strategy V2", overlay=true,precision=3, commission_value=0.025, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000)
// Version 2.0 of my previous renko strategy using Renko calculations, this time without Tilson T3 and without using security with Renko to remove repaints!
// Seems to work nicely on cryptocurrencies on higher time frames.

//== Description ==
// Strategy gets Renko values and uses renko close and open to trigger signals.
// Base on these results the strategy triggers a long and short orders, where green is uptrending and red is downtrending.
// This Renko version is based on ATR, you can Set ATR (in settings) to adjust it.

// == Notes ==
// Supports alerts.
// Supports backtesting time ranges.
// Shorts are disabled by default (can be enabled in settings).
// Link to previous Renko strategy V1: https://www.tradingview.com/script/KeWBWLGT-Renko-Strategy-T3-V1/
//
// Stay tuned for version V3 in the future as i have an in progress prototype, Follow to get updated: https://www.tradingview.com/u/dman103/#published-scripts

// === INPUT BACKTEST RANGE ===
useDate = input(true,     title='---------------- Trade Range ----------------', type=input.bool)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2017, title = "From Year", minval = 2000)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2099, title = "To Year", minval = 2010)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false // create 

settings = input(true,     title='---------------- Settings ----------------', type=input.bool)

allow_short = input(false,title="Allow Short")
atr_len = input(10,"ATR Length")

atr = atr(atr_len)
// Thanks to renko snippet calculations from @RafaelZioni  https://www.tradingview.com/script/2vKhpfVH-Renko-XZ/
Renko1() =>
    p1 = 0.0
    p1 := close > nz(p1[1]) + atr ? nz(p1[1]) + atr : close < nz(p1[1]) - atr ? nz(p1[1]) - atr : nz(p1[1])
    p1
Renko2() =>
    p2 = 0.0
    Br_1 = Renko1()
    p2 := Renko1() != Renko1()[1] ? Br_1[1] : nz(p2[1])
    p2

Renko3() =>
    p3 = 0.0
    p3 := open > nz(p3[1]) + atr ? nz(p3[1]) + atr : open < nz(p3[1]) - atr ? nz(p3[1]) - atr : nz(p3[1])
    p3

Renko4() =>
    open_v = 0.0
    Br_2 = Renko3()
    open_v := Renko3() != Renko3()[1] ? Br_2[1] : nz(open_v[1])
    open_v

o2 = Renko4()
c2 = Renko1()
l2 =low
h2 = high

//=== Plotting ===

crossPlot= 0.0
if (o2 < c2)
    crossPlot :=o2
else 
    crossPlot := o2

// Used to make sure that even if o2 and c2 are equal, the result (short or long) will be based on previous trend.
bars_since_up=barssince(o2 < c2)
bars_since_down=barssince(o2 > c2)
go_long= (bars_since_up<bars_since_down) and  o2<c2
go_short = (bars_since_up>bars_since_down) and o2>c2
plotColor = go_long and  o2<c2 ? color.green : go_short and o2>c2?  color.red : color.white 
plot(crossPlot, color = plotColor, style = plot.style_circles, linewidth = 2,join=true)
changeCond = plotColor != plotColor[1]

//=== Buy/Sell ===
closeStatus =  strategy.openprofit > 0 ? "win" : "lose"
long_entry = plotColor == color.green and window()  and changeCond
long_exit_entry = plotColor == color.red //or (allow_alternative_sl and close < low_result  )
short_entry = plotColor == color.red  and window() and changeCond
short_exit_entry = plotColor == color.green   // or (allow_alternative_sl and close > high_result )

strategy.entry("long", true, when = long_entry)
strategy.close("long",when=long_exit_entry,comment=closeStatus)

if (allow_short)
    strategy.entry("short",false, when = short_entry)
strategy.close("short",when=short_exit_entry,comment=closeStatus)
//=== Alerts ===
alertcondition(go_long and changeCond , title='Renko Buy Signal', message='Renko Revered to Buy Signal')
alertcondition(go_short and changeCond , title='Renko Sell Signal', message='Renko Revered to Sell Signal')

더 많은