Chiến lược này là một chiến lược giao dịch dựa trên SMA cho hợp đồng tương lai BankNifty. Ý tưởng chính của chiến lược là sử dụng SMA như một chỉ số xu hướng, đi dài khi giá vượt qua trên SMA và đi ngắn khi giá vượt qua dưới SMA. Đồng thời, chiến lược cũng thiết lập các điều kiện dừng lỗ và lấy lợi nhuận để 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 như một chỉ số xu hướng. Cụ thể, chiến lược đầu tiên tính toán SMA của một khoảng thời gian cụ thể (mục lệ là 200), và sau đó xác định hướng xu hướng dựa trên vị trí tương đối của giá và SMA. Khi giá vượt qua trên SMA, nó được coi là một xu hướng tăng, và một vị trí dài được thực hiện; khi giá vượt qua dưới SMA, nó được coi là một xu hướng giảm, và một vị trí ngắn được thực hiện. Ngoài ra, chiến lược cũng thiết lập các điều kiện dừng lỗ và lấy lợi nhuận để kiểm soát rủi ro và khóa lợi nhuận. Các điều kiện dừng lỗ bao gồm: giá vượt qua SMA bằng một phạm vi nhất định (được thiết lập bởi tham số
Chiến lược này là một chiến lược giao dịch đơn giản dựa trên SMA, phù hợp với hợp đồng tương lai BankNifty. Ưu điểm của nó nằm trong nguyên tắc đơn giản, khả năng thích nghi mạnh mẽ và các biện pháp kiểm soát rủi ro. Tuy nhiên, trong ứng dụng thực tế, vẫn cần chú ý đến các rủi ro tiềm ẩn như tối ưu hóa tham số, thị trường dao động, đảo ngược xu hướng và biến động trong ngày. Trong tương lai, chiến lược có thể được tối ưu hóa và cải thiện từ các khía cạnh như tối ưu hóa tham số, kết hợp với các chỉ số khác, dừng lỗ năng động và hạn chế thời gian giao dịch.
// 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")