
Chiến lược này dựa trên đường trung bình di chuyển đơn giản (SMA) trên các quy mô thời gian khác nhau để nắm bắt xu hướng thị trường. Bằng cách so sánh vị trí tương đối của SMA ngắn hạn và dài hạn, nó tạo ra tín hiệu mua và bán. Đồng thời, chiến lược này sử dụng các điều kiện xác nhận xu hướng để lọc các tín hiệu giả, cải thiện độ chính xác giao dịch. Ngoài ra, chiến lược này cũng có chức năng dừng và dừng lỗ để quản lý rủi ro.
Chiến lược theo dõi xu hướng SMA đa thời gian và chiến lược dừng động sử dụng SMA để nắm bắt xu hướng thị trường trên các thang thời gian khác nhau, lọc các tín hiệu giả thông qua các điều kiện xác nhận xu hướng, đồng thời thiết lập các chức năng điều chỉnh giữ vị trí dừng lỗ và động, thực hiện mục tiêu theo dõi xu hướng và quản lý rủi ro. Mặc dù chiến lược này có một số ưu điểm, nhưng vẫn phải đối mặt với các rủi ro như tối ưu hóa tham số, thị trường rung động và sự kiện bất ngờ.
/*backtest
start: 2024-05-01 00:00:00
end: 2024-05-31 23:59:59
period: 6h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("market slayer v3", overlay=true)
// Input parameters
showConfirmationTrend = input(title='Show Trend', defval=true)
confirmationTrendTimeframe = input.timeframe(title='Main Trend', defval='240')
confirmationTrendValue = input(title='Main Trend Value', defval=2)
showConfirmationBars = input(title='Show Confirmation Bars', defval=true)
topCbarValue = input(title='Top Confirmation Value', defval=60)
short_length = input.int(10, minval=1, title="Short SMA Length")
long_length = input.int(20, minval=1, title="Long SMA Length")
takeProfitEnabled = input(title="Take Profit Enabled", defval=false)
takeProfitValue = input.float(title="Take Profit (points)", defval=20, minval=1)
stopLossEnabled = input(title="Stop Loss Enabled", defval=false)
stopLossValue = input.float(title="Stop Loss (points)", defval=50, minval=1)
// Calculate SMAs
short_sma = ta.sma(close, short_length)
long_sma = ta.sma(close, long_length)
// Generate buy and sell signals based on SMAs
buy_signal = ta.crossover(short_sma, long_sma)
sell_signal = ta.crossunder(short_sma, long_sma)
// Plot SMAs
plot(short_sma, color=color.rgb(24, 170, 11), title="Short SMA")
plot(long_sma, color=color.red, title="Long SMA")
// Confirmation Bars
f_confirmationBarBullish(cbValue) =>
cBarClose = close
slowConfirmationBarSmaHigh = ta.sma(high, cbValue)
slowConfirmationBarSmaLow = ta.sma(low, cbValue)
slowConfirmationBarHlv = int(na)
slowConfirmationBarHlv := cBarClose > slowConfirmationBarSmaHigh ? 1 : cBarClose < slowConfirmationBarSmaLow ? -1 : slowConfirmationBarHlv[1]
slowConfirmationBarSslDown = slowConfirmationBarHlv < 0 ? slowConfirmationBarSmaHigh : slowConfirmationBarSmaLow
slowConfirmationBarSslUp = slowConfirmationBarHlv < 0 ? slowConfirmationBarSmaLow : slowConfirmationBarSmaHigh
slowConfirmationBarSslUp > slowConfirmationBarSslDown
fastConfirmationBarBullish = f_confirmationBarBullish(topCbarValue)
fastConfirmationBarBearish = not fastConfirmationBarBullish
fastConfirmationBarClr = fastConfirmationBarBullish ? color.green : color.red
fastConfirmationChangeBullish = fastConfirmationBarBullish and fastConfirmationBarBearish[1]
fastConfirmationChangeBearish = fastConfirmationBarBearish and fastConfirmationBarBullish[1]
confirmationTrendBullish = request.security(syminfo.tickerid, confirmationTrendTimeframe, f_confirmationBarBullish(confirmationTrendValue), lookahead=barmerge.lookahead_on)
confirmationTrendBearish = not confirmationTrendBullish
confirmationTrendClr = confirmationTrendBullish ? color.green : color.red
// Plot trend labels
plotshape(showConfirmationTrend, style=shape.square, location=location.top, color=confirmationTrendClr, title='Trend Confirmation Bars')
plotshape(showConfirmationBars and (fastConfirmationChangeBullish or fastConfirmationChangeBearish), style=shape.triangleup, location=location.top, color=fastConfirmationChangeBullish ? color.green : color.red, title='Fast Confirmation Bars')
plotshape(showConfirmationBars and buy_signal and confirmationTrendBullish, style=shape.triangleup, location=location.top, color=color.green, title='Buy Signal')
plotshape(showConfirmationBars and sell_signal and confirmationTrendBearish, style=shape.triangledown, location=location.top, color=color.red, title='Sell Signal')
// Generate trade signals
buy_condition = buy_signal and confirmationTrendBullish and not (strategy.opentrades > 0)
sell_condition = sell_signal and confirmationTrendBearish and not (strategy.opentrades > 0)
strategy.entry("Buy", strategy.long, when=buy_condition, comment ="BUY CALLS")
strategy.entry("Sell", strategy.short, when=sell_condition, comment ="BUY PUTS")
// Take Profit
if (takeProfitEnabled)
strategy.exit("Take Profit Buy", from_entry="Buy", profit=takeProfitValue)
strategy.exit("Take Profit Sell", from_entry="Sell", profit=takeProfitValue)
// Stop Loss
if (stopLossEnabled)
strategy.exit("Stop Loss Buy", from_entry="Buy", loss=stopLossValue)
strategy.exit("Stop Loss Sell", from_entry="Sell", loss=stopLossValue)
// Close trades based on trend confirmation bars
if strategy.opentrades > 0
if strategy.position_size > 0
if not confirmationTrendBullish
strategy.close("Buy", comment ="CLOSE CALLS")
else
if not confirmationTrendBearish
strategy.close("Sell", comment ="CLOSE PUTS")
// Define alert conditions as booleans
buy_open_alert = buy_condition
sell_open_alert = sell_condition
buy_closed_alert = strategy.opentrades < 0
sell_closed_alert = strategy.opentrades > 0
// Alerts
alertcondition(buy_open_alert, title='Buy calls', message='Buy calls Opened')
alertcondition(sell_open_alert, title='buy puts', message='buy Puts Opened')
alertcondition(buy_closed_alert, title='exit calls', message='exit calls ')
alertcondition(sell_closed_alert, title='exit puts', message='exit puts Closed')