오픈 하이, 클로즈 로우 트레이딩 전략


생성 날짜: 2024-02-02 12:03:45 마지막으로 수정됨: 2024-02-02 12:03:45
복사: 0 클릭수: 905
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

오픈 하이, 클로즈 로우 트레이딩 전략

개요

상위 입점, 하위 입점, 하위 입점 단편 거래 전략은 트렌드 추적 방식의 거래 전략이다. 이 전략은 K선의 상위 입점 가격과 상위 입점 가격의 관계를 판단하여, 가격의 단기 트렌드 방향을 식별하고, 트렌드가 시작될 때 입점을 더 많이 하차하여, 빠르게 시장에 진입하여, 트렌드를 추적하는 목적을 달성한다.

전략 원칙

이 전략은 주로 K 선의 개시 가격과 닫기 가격의 크기를 판단하며, 개시 가격이 최저 가격과 같을 때 다중 신호를 생성하고, 개시 가격이 최고 가격과 같을 때 마이너스 신호를 생성한다. 이렇게하면 가격의 단기간에 돌파구를 포착하고, 트렌드를 추적할 수 있다.

신호가 들어간 후, 고정된 수를 사용하여 즉시 포지션을 개시하여 포지션을 설정한다. 정지점은 ATR 지표 설정을 참고하여 시장의 변동성을 추적한다. 정지 목표는 정지점과 입시 가격 사이의 거리의 RR 비율 부분이다. 가격이 정지점 또는 정지 목표를 만지면 적시에 정지 또는 정지한다.

이 전략은 또한 사용자가 설정한 시간에, 예를 들어 미국 시장이 종료되기 30분 전에, 모든 포지션을 청산하여, 하룻밤 사이에 큰 변동의 위험을 방지한다.

우위 분석

이 전략에는 다음과 같은 장점이 있습니다.

  1. 오픈 가격과 클로즈 가격의 관계를 사용하여 트렌드 방향을 판단하여 가격의 단기 돌파구를 빠르게 식별 할 수 있습니다.

  2. 입구 신호는 간단하고 명확하며, 쉽게 구현할 수 있습니다.

  3. 적자를 막기 위한 시간적 스톱로스 및 스톱 스을 통해 수익을 고정하고 손실을 방지할 수 있다.

  4. 특정 기간 동안 필수적으로 평준화하면 하룻밤 사이에 변동의 위험을 피할 수 있습니다.

  5. 특정 거래 유형을 선택 할 필요가 없습니다. 외환, 주식, 암호화폐와 같은 시장에 적용됩니다.

위험 분석

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

  1. ATR를 사용하여, 진동상태에서 자주 손실이 발생할 수 있다.

  2. 거래의 종류와 기간의 특성을 고려하지 않고, 과잉 맞춤이 존재할 수 있습니다.

  3. 고정된 금리목표는 시장 조건과 맞지 않을 수 있고, 지속가능한 수익을 창출할 수 없다.

  4. 강제적 평준화 시점에 부적절한 것은 트렌드 기회를 놓치거나 추가적인 손실을 초래할 수 있다.

최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 최적화된 스톱 방식, 트렌드 상황에서의 잔류 스톱, 충격적인 상황에서의 상장 스톱 등.

  2. 필터링 조건을 추가하여 트렌드 지표와 같은 입문 시점을 결정하여 가짜 돌파구를 피하십시오.

  3. 동적으로 정지 위치를 조정하여 시장의 변동 정도에 따라 합리적인 정지 거리를 결정한다.

  4. 포지션 시간을 최적화하여 다양한 거래 유형과 지역에 적합한 포지션 시간을 선택하십시오.

요약하다

상위 포지션을 개시하고 상위 포지션을 종료하고 낮은 음식을 먹는 거래 전략은 가격의 단기 동향을 쉽게 판단하여 신속하게 포지션을 구축합니다. 진입이 간단하고 중단 중단이 명확한 장점이 있습니다. 그러나 중단 방식, 필터 신호 등과 같은 최적화 할 수있는 측면도 있습니다. 지속적인 테스트 및 최적화를 통해이 전략의 매개 변수가 더 많은 시장 환경에 적응 할 수 있으며, 더 강한 적응력과 수익성을 갖출 수 있습니다.

전략 소스 코드
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
// Open-High-Low strategy

strategy('Strategy: OLH', shorttitle="OLH", overlay=true)

// Inputs
slAtrLen = input.int(defval=14, title="ATR Period for placing SL", group="StopLoss settings")
showSLLines = input.bool(defval=false, title="Show SL lines in chart", tooltip="Show SL lines also as dotted lines in chart. Note: chart may look untidy.", group="Stolploss settings")
// Trade related
rrRatio = input.float(title='Risk:Reward', step=0.1, defval=2.0, group="Trade settings")
endOfDay = input.int(defval=1500, title="Close all trades, default is 3:00 PM, 1500 hours (integer)", group="Trade settings")
mktAlwaysOn = input.bool(defval=true, title="Markets that never closed (Crypto, Forex, Commodity)", tooltip="Some markers never closes. For those cases, make this checked.", group="Trade settings")
lotSize = input.int(title='Lot Size', step=1, defval=1, group="Trade settings")


// Utils
green(open, close) => close > open ? true : false
red(open, close) => close < open ? true : false
body(open, close) => math.abs(open - close)
lowerwick = green(open, close) ? open - low : close - low
upperwick = green(open, close) ? high - close : high - open
crange = high - low
crangep = high[1] - low[1] // previous candle's candle-range
bullish = close > open ? true : false
bearish = close < open ? true : false


// Trade signals
longCond = barstate.isconfirmed and (open == low)
shortCond = barstate.isconfirmed and (open == high)

// For SL calculation
atr = ta.atr(slAtrLen)
highestHigh = ta.highest(high, 7)
lowestLow = ta.lowest(low, 7)
longStop = showSLLines ? lowestLow - (atr * 1) : na
shortStop = showSLLines ? highestHigh + (atr * 1) : na
plot(longStop, title="Buy SL", color=color.green, style=plot.style_cross)
plot(shortStop, title="Sell SL", color=color.red, style=plot.style_cross)

// Trade execute
h = hour(time('1'), syminfo.timezone)
m = minute(time('1'), syminfo.timezone)
hourVal = h * 100 + m
totalTrades = strategy.opentrades + strategy.closedtrades
if (mktAlwaysOn or (hourVal < endOfDay))
    // Entry
    var float sl = na
    var float target = na
    if (longCond)
        strategy.entry("enter long", strategy.long, lotSize, limit=na, stop=na, comment="Enter Long")
        sl := longStop
        target := close + ((close - longStop) * rrRatio)
        alert('Buy:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)
    if (shortCond)
        strategy.entry("enter short", strategy.short, lotSize, limit=na, stop=na, comment="Enter Short")
        sl := shortStop
        target := close - ((shortStop - close) * rrRatio)
        alert('Sell:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)

    // Exit: target or SL
    if ((close >= target) or (close <= sl))
        strategy.close("enter long", comment=close < sl ? "Long SL hit" : "Long target hit")
    if ((close <= target) or (close >= sl))
        strategy.close("enter short", comment=close > sl ? "Short SL hit" : "Short target hit")
else if (not mktAlwaysOn)
    // Close all open position at the end if Day
    strategy.close_all(comment = "Close all entries at end of day.")