확률적 오실레이터를 기반으로 한 범위 거래 전략

ATR
생성 날짜: 2024-06-17 14:52:10 마지막으로 수정됨: 2024-06-17 14:52:10
복사: 0 클릭수: 254
1
집중하다
1166
수행원

확률적 오실레이터를 기반으로 한 범위 거래 전략

개요

이 전략은 무작위적인 진동 지표 (Stochastic Oscillator) 를 사용하여 시장의 과매매와 과매매 상태를 식별하고, 미리 정의된 위험과 수익 파라미터에 따라 거래를 촉발하여, 변동하는 거래 구역에서 이익을 얻기를 기대한다. 이 전략의 주요 아이디어는 거래 구역의 낮은 시점에 구입하고 거래 구역의 높은 시점에 판매하며, 위험을 엄격히 제어한다.

전략 원칙

  1. 무작위 진동 지표가 초매치 수준 ((20) 을 넘어갈 때, 전략은 더 많이 입장을 열고, 무작위 진동 지표가 초매치 수준 ((80) 을 넘어갈 때, 전략은 공백을 열고 있다.
  2. 스톱 로즈와 스톱 스 레벨은 평균 실제 파동의 2배에 따라 설정되며, 각 거래의 위험은 계정 이자율의 1%에 통제된다.
  3. 과도한 거래를 막기 위해, 전략은 각 거래 사이에 최소 20개의 K선 간격을 강제하여 냉각 기간을 남기고 변동을 피한다.

전략적 이점

  1. 이 전략은 변동하는 거래 영역에서 가격 변동을 포착하여 낮은 가격에 구매하고 높은 가격에 판매하여 이익을 얻습니다.
  2. 이 전략은 ATR 기반의 정지 및 정지 및 거래 당 1%의 고정된 위험을 포함하는 엄격한 위험 관리 조치를 취하여 철회 및 단일 거래 손실을 제어하는 데 도움이됩니다.
  3. 거래 사이에 최소 간격을 설정함으로써, 전략은 빈번한 거래와 시장 소음에 속지 않도록 해준다.
  4. 이 전략의 논리는 명확하고, 이해하기 쉽고, 실행하기 쉬우며, 다양한 시장 환경에서의 적용에 적합하다.

전략적 위험

  1. 전략의 성공은 거래 구역을 올바르게 식별하는 것에 크게 의존합니다. 거래 구역을 정확하게 식별하지 않으면 손실 거래가 발생할 수 있습니다.
  2. 시장이 거래 범위를 뚫고 트렌드를 형성하면 이 전략은 트렌드 거래 기회를 놓칠 수 있습니다.
  3. 전략이 위험 관리 조치를 취했음에도 불구하고 극한 시장 조건에서 예상보다 더 큰 손실이 발생할 수 있습니다.
  4. 전략 파라미터 (오버 바이/오버 셀 레벨, ATR 배수 등) 는 다양한 시장 조건에 따라 최적화되어야 하며, 부적절한 파라미터는 부실한 성과를 초래할 수 있다.

전략 최적화 방향

  1. 거래 신호를 확인하고 신호의 신뢰성을 높이기 위해 다른 기술 지표 (MACD, RSI 등) 와 결합하는 것을 고려하십시오.
  2. 동적 스톱 및 스톱 메커니즘을 도입합니다. 예를 들어, 가격의 유리한 방향으로 이동함에 따라 스톱 지점을 조정하여 더 높은 수익률을 얻습니다.
  3. 거래 구역을 식별하는 데는 기계 학습 알고리즘과 같은 더 고급 기술을 사용하여 정확도를 높일 수 있습니다.
  4. 트렌드 시장에서는 트렌드 필터를 도입하는 것을 고려하여 트렌드 시장에서 거래하는 것을 피할 수 있습니다.

요약하다

무작위 진동 지표에 기반한 변동 영역 거래 전략은 미리 정해진 거래 영역 내에서 무작위 지표의 과매매 신호를 사용하여 거래를 촉발시키려고 한다. 이 전략은 엄격한 위험 관리와 거래 간격을 통해 위험을 통제한다. 이 전략의 장점이 있기는 하지만, 그 성공은 거래 영역을 올바르게 식별하는 것에 크게 달려 있다.

전략 소스 코드
/*backtest
start: 2023-06-11 00:00:00
end: 2024-06-16 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Range Trading with Stochastic", overlay=true)

// Input Parameters
overboughtLevel = input.int(80, title="Overbought Level", minval=1, maxval=100)
oversoldLevel = input.int(20, title="Oversold Level", minval=1, maxval=100)
stochLength = input.int(14, title="Stochastic Length", minval=1)
riskPerTrade = input.float(0.01, title="Risk per Trade (%)", minval=0.01, maxval=100, step=0.01)
barsBetweenTrades = input.int(20, title="Bars Between Trades", minval=1)

// Calculate Stochastic Oscillator
k = ta.sma(ta.stoch(close, high, low, stochLength), 3)
d = ta.sma(k, 3)

// Variables to Track Time Since Last Trade
var lastTradeBar = 0
barsSinceLastTrade = bar_index - lastTradeBar

// Risk Management
atr = ta.atr(14)
stopLoss = 2 * atr
takeProfit = 2 * atr
riskAmount = strategy.equity * riskPerTrade / 100
positionSize = 1

// Entry Conditions
longCondition = k < oversoldLevel and strategy.position_size == 0 and barsSinceLastTrade >= barsBetweenTrades
shortCondition = k > overboughtLevel and strategy.position_size == 0 and barsSinceLastTrade >= barsBetweenTrades

// Entry/Exit Orders
if longCondition
    strategy.entry("Long", strategy.long, qty=positionSize)
    strategy.exit("Long Exit", "Long", stop=close - stopLoss, limit=close + takeProfit)
    lastTradeBar := bar_index // Update last trade bar
if shortCondition
    strategy.entry("Short", strategy.short, qty=positionSize)
    strategy.exit("Short Exit", "Short", stop=close + stopLoss, limit=close - takeProfit)
    lastTradeBar := bar_index // Update last trade bar

// Plot Stochastic
plot(k, color=color.blue, title="%K")
plot(d, color=color.orange, title="%D")
hline(overboughtLevel, color=color.red, title="Overbought")
hline(oversoldLevel, color=color.green, title="Oversold")