SMA 기반의 BankNifty 퓨처스 거래 전략

저자:차오장, 날짜: 2024-03-28 18:15:32
태그:

img

전반적인 설명

이 전략은 BankNifty 선물에 대한 SMA 기반의 거래 전략이다. 전략의 주요 아이디어는 SMA를 트렌드 지표로 사용하여 가격이 SMA 이상으로 넘어가면 길게, 가격이 SMA 이하로 넘어가면 짧게하는 것입니다. 동시에 전략은 위험을 제어하고 이익을 잠금하기 위해 스톱 로스 및 영업 조건을 설정합니다.

전략 원칙

이 전략의 핵심은 트렌드 지표로 SMA를 사용하는 것입니다. 구체적으로, 전략은 먼저 지정된 기간의 SMA를 계산 (기본값은 200), 그리고 그 다음 가격과 SMA의 상대적 위치에 따라 트렌드 방향을 결정합니다. 가격이 SMA를 넘을 때 상승 추세가 형성되었다고 간주되고, 긴 지위가 취득됩니다; 가격이 SMA를 넘을 때 하락 추세가 형성되었다고 간주되며, 짧은 지위가 취득됩니다. 또한, 전략은 또한 위험을 제어하고 이익을 잠금하기 위해 스톱 로스 및 영업 조건을 설정합니다. 스톱 로스 조건에는: 가격이 SMA를 특정 범위 ( 스톱 로스 버퍼 매개 변수에 의해 설정), 가격이 특정 범위 ( 스톱 로스 매개 변수에 의해 설정) 를 넘어서고, 가격 입문 시간 15:00까지 도달하는 조건이 포함됩니다.

전략적 장점

  1. 간단하고 이해하기 쉽다: 이 전략은 클래식 기술 지표 SMA를 기반으로 하며, 이해하기 쉽고 구현하기 쉬운 간단한 원칙을 가지고 있다.
  2. 높은 적응력: 전략은 매개 변수를 조정함으로써 다른 시장 환경과 거래 품종에 적응할 수 있습니다.
  3. 리스크 제어: 전략은 여러 가지 스톱 로스 조건을 설정하여 잠재적 인 손실을 효과적으로 제어 할 수 있습니다. 동시에 수익을 취하는 조건을 설정하는 것도 적시에 수익을 차단하는 데 도움이됩니다.
  4. 트렌드 추적: SMA는 뒤떨어진 지표이지만, 이것이 바로 트렌드의 형성을 확인 할 수 있기 때문입니다. 이 전략은 SMA의 이 특징을 활용하여 시장의 중장기 트렌드를 효과적으로 파악 할 수 있습니다.

전략 위험

  1. 매개 변수 민감성: 이 전략의 성능은 매개 변수 선택에 크게 달려 있으며, 다른 매개 변수 설정은 매우 다른 결과를 초래할 수 있습니다. 따라서 실제 응용에서 매개 변수는 최적화 및 테스트해야합니다.
  2. 오스실레이션 시장: 오스실레이션 시장에서 가격은 종종 SMA 이상과 아래를 넘어서게 되는데, 이는 전략의 빈번한 거래로 이어질 수 있으며, 이로 인해 거래 비용과 위험이 증가합니다.
  3. 트렌드 역전: 시장 트렌드가 역전되면 전략은 지연으로 반응하여 잠재적 인 손실로 이어질 수 있습니다.
  4. 내일 변동성: 전략은 거래 세션 중 언제든지 거래 신호를 유발할 수 있으며 BankNifty 선물의 내일 변동성은 상대적으로 커질 수 있으며 더 큰 미끄러짐과 잠재적 인 손실로 이어질 수 있습니다.

전략 최적화 방향

  1. 매개 변수 최적화: 현재 시장 환경에 가장 적합한 매개 변수 설정을 백테스팅 및 다양한 매개 변수 조합의 최적화로 찾을 수 있습니다.
  2. 다른 지표와 결합: 전략의 신뢰성과 정확성을 향상시키기 위해 SMA를 다른 기술적 지표 (RSI, MACD 등) 와 결합하는 것을 고려하십시오.
  3. 동적 스톱 로스: 더 나은 리스크 통제를 위해 동적 스톱 로스 전략 (추적 스톱 로스 등) 을 채택하는 것을 고려하십시오.
  4. 거래 시간 제한: 하루 내 변동성의 영향을 줄이기 위해 거래 시간을 더 낮은 변동성 (개점 및 폐쇄 전 및 후) 에 제한하는 것을 고려하십시오.

요약

이 전략은 BankNifty 선물에 적합한 SMA를 기반으로 한 간단한 거래 전략이다. 이 전략의 장점은 간단한 원리, 강력한 적응력 및 위험 통제 조치에 있다. 그러나 실제 응용에서는 여전히 매개 변수 최적화, 오스실레이션 시장, 트렌드 역전 및 내일 변동성과 같은 잠재적 위험에주의를 기울여야 한다. 미래에는 매개 변수 최적화, 다른 지표와 결합, 동적 스톱-러스 및 거래 시간을 제한하는 등의 측면에서 전략을 최적화하고 개선할 수 있다.


// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Bhasker_S

//@version=5
strategy("Strategy BankNifty SMA", overlay=true, margin_long=100, margin_short=100)

src = input(close, title="Source")
timeFrame = input.timeframe(defval='5', title = "Select Chart Timeframe")
typeMA = input.string(title = "Method", defval = "SMA", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
len = input.int(200, minval=1, title="Length", step = 10)
alertPrecision = input.float(0, "Alert Precision", minval = 0, maxval = 50, step=1)
slTimeFrame = input.timeframe(defval='1', title = "Select Stoploss Candle Timeframe")
slBuffer = input.float(0, "Stop Loss Buffer", minval = 0, maxval = 50, step = 1)
targetSlab = input.float(150, "Target Price", minval = 1, maxval = 2000, step = 10)
Stoploss  = input.float(20, "Stop Loss", minval = 1, maxval = 2000, step = 5)
offset = input.int(title="Offset", defval=0, minval=-500, maxval=500)

//out = ta.sma(src, len)


ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

tfSource = request.security(syminfo.tickerid, timeFrame, src, barmerge.gaps_on, barmerge.lookahead_off)
mySMA = ma(tfSource, len, typeMA)
plot(mySMA, color=color.rgb(243, 33, 89), title="MA", offset=offset, linewidth = 2)

slClose = request.security(syminfo.tickerid, slTimeFrame, src, barmerge.gaps_on, barmerge.lookahead_off)


highTravel = low > mySMA
lowTravel = high < mySMA

touchabove = (((high[1] + alertPrecision) > mySMA[1]) and (low[1] < mySMA[1])) //and (high[2] < mySMA[2])
touchbelow = (((low[1] - alertPrecision) < mySMA[1]) and (high[1] > mySMA[1])) //and (low[2] > mySMA[2])

crossabove = math.min(open, close) > mySMA
crossbelow = math.max(open, close) < mySMA

upalert = (touchabove or touchbelow) and crossabove
downalert = (touchabove or touchbelow) and crossbelow

h=hour(time('1'),"Asia/Kolkata")
m=minute(time('1'),"Asia/Kolkata")
startTime=h*100+m

if upalert and strategy.position_size == 0 
    strategy.entry("buy", strategy.long, 15)
    
if downalert and strategy.position_size == 0
    strategy.entry("sell", strategy.short, 15)

longexit = (slClose < (mySMA - slBuffer)) or (slClose < (strategy.opentrades.entry_price(strategy.opentrades - 1) - Stoploss)) or (slClose > (strategy.opentrades.entry_price(strategy.opentrades - 1) + targetSlab)) or (hour(time) == 15)
shortexit = (slClose > (mySMA + slBuffer)) or (slClose > (strategy.opentrades.entry_price(strategy.opentrades - 1) + Stoploss)) or (slClose < (strategy.opentrades.entry_price(strategy.opentrades - 1) - targetSlab)) or (hour(time) == 15)

if longexit
    strategy.close("buy")

if shortexit
    strategy.close("sell")


더 많은