BankNifty 이동평균 기반 선물 거래 전략


생성 날짜: 2024-03-28 18:15:32 마지막으로 수정됨: 2024-03-28 18:15:32
복사: 0 클릭수: 605
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

BankNifty 이동평균 기반 선물 거래 전략

개요

이 전략은 간단한 이동 평균 (SMA) 을 기반으로 한 BankNifty 선물 거래 전략이다. 전략의 주요 아이디어는 SMA를 트렌드 지표로 사용하여, 가격이 SMA를 통과 할 때 더 많이하고, 가격이 SMA를 통과 할 때 비어있는 것입니다. 동시에, 이 전략은 위험을 제어하고 이익을 잠금하기 위해 중지 및 중지 조건을 설정합니다.

전략 원칙

이 전략의 핵심은 SMA를 트렌드 지표로 사용하는 것입니다. 구체적으로, 전략은 먼저 지정된 주기 (설정된 200) 의 SMA를 계산하고, 그 다음 가격과 SMA의 상대적 위치에 따라 트렌드 방향을 판단합니다. 가격이 SMA를 넘으면 상승 추세가 형성되었다고 생각하면, 이 때 더 많이; 가격이 SMA를 넘으면 하향 추세가 형성되었다고 생각하면, 이 때 공백합니다. 또한, 이 전략은 위험을 제어하고 수익을 잠금하기 위해 중지 및 중지 조건을 설정합니다.

전략적 이점

  1. 단순하고 이해하기 쉬운: 이 전략은 SMA라는 고전적인 기술 지표에 기반을 두고 있으며, 그 원칙은 단순하고 이해하기 쉽고 구현하기 쉽습니다.
  2. 적응력: 이 전략은 파라미터를 조정하여 다른 시장 환경과 거래 품종에 적응할 수 있다.
  3. 위험 제어: 이 전략은 다수의 중지 조건을 설정하여 잠재적인 손실을 효과적으로 제어할 수 있습니다. 또한, 중지 조건을 설정하는 것은 적시에 수익을 잠금하는 데 도움이 됩니다.
  4. 트렌드 추적: SMA는 뒤처진 지표이지만, 그 때문에 트렌드가 형성되는 것을 잘 확인할 수 있습니다. 이 전략은 SMA의 이 특성을 활용하여 시장의 중기 및 장기적인 흐름을 효과적으로 포착할 수 있습니다.

전략적 위험

  1. 매개 변수 민감성: 이 전략의 성능은 매개 변수 선택에 크게 의존하며, 다른 매개 변수 설정은 매우 다른 결과를 초래할 수 있다. 따라서 실제 응용에서 매개 변수를 최적화하고 테스트해야 한다.
  2. 흔들림 시장: 흔들림 시장에서 가격이 자주 지상 아래로 SMA를 통과하여 이 전략이 자주 거래되어 거래 비용과 위험을 증가시킬 수 있습니다.
  3. 트렌드 역전: 시장 트렌드가 역전될 때, 이 전략은 반응을 지연시킬 수 있으며, 잠재적인 손실을 초래한다.
  4. 포트중의 변동: 이 전략은 포트 중 언제든지 거래 신호를 유발할 수 있으며, BankNifty의 선물의 포트중의 변동이 더 커서 큰 슬라이드 및 잠재적 인 손실을 초래할 수 있습니다.

전략 최적화 방향

  1. 매개 변수 최적화: 현재 시장 환경에 가장 적합한 매개 변수 설정을 찾기 위해 다양한 매개 변수 조합을 테스트하고 최적화 할 수 있습니다.
  2. 다른 지표와 결합: 전략의 신뢰성과 정확성을 높이기 위해 SMA를 다른 기술 지표 (RSI, MACD 등) 와 결합하는 것이 고려 될 수 있습니다.
  3. 다이내믹 스톱: 다이내믹 스톱 전략을 적용하는 것을 고려할 수 있습니다.
  4. 거래 시간을 제한: 거래 시간을 덜 변동적인 시간대에 제한하는 것을 고려할 수 있습니다. (예: 상장 전과 상장 후) 상장 내 변동의 영향을 줄이기 위해.

요약하다

이 전략은 SMA 기반의 간단한 거래 전략으로, BankNifty 선물에 적용된다. 그것의 장점은 원칙이 단순하고 적응력이 강하며, 동시에 위험 관리 조치가 있다. 그러나 실제 응용에서는, 변수 최적화, 충격 시장, 추세 역전 및 포스트의 변동과 같은 잠재적인 위험에 주의해야 한다.

전략 소스 코드
// 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")