
Chiến lược này là một chiến lược giao dịch tương lai của BankNifty dựa trên đường trung bình di chuyển đơn giản (SMA). Ý tưởng chính của chiến lược là sử dụng SMA làm chỉ số xu hướng, làm nhiều khi giá vượt qua SMA và bỏ đi khi giá vượt qua SMA. Đồng thời, chiến lược này cũng đặt các điều kiện dừng lỗ và dừng để kiểm soát rủi ro và khóa lợi nhuận.
Cốt lõi của chiến lược này là sử dụng SMA làm chỉ số xu hướng. Cụ thể, chiến lược này đầu tiên tính toán SMA của một chu kỳ nhất định ([200 mặc định]) và sau đó đánh giá xu hướng dựa trên vị trí tương đối của giá với SMA. Khi giá vượt qua SMA, cho rằng xu hướng tăng đã hình thành, lúc này làm nhiều; khi giá vượt qua SMA, cho rằng xu hướng giảm đã hình thành, lúc này làm trống. Ngoài ra, chiến lược này cũng đặt các điều kiện dừng và dừng để kiểm soát rủi ro và khóa lợi nhuận.
Chiến lược này là một chiến lược giao dịch đơn giản dựa trên SMA, áp dụng cho các hợp đồng tương lai của BankNifty. Ưu điểm của nó là nguyên tắc đơn giản, có khả năng thích ứng mạnh mẽ, đồng thời có các biện pháp kiểm soát rủi ro. Nhưng trong ứng dụng thực tế, cũng cần chú ý đến các rủi ro tiềm ẩn như tối ưu hóa tham số, thị trường chấn động, đảo ngược xu hướng và biến động trong thị trường.
// 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")