
이 전략은 다양한 시간 스케일의 간단한 이동 평균 (SMA) 을 기반으로 시장 추세를 포착한다. 단기 및 장기 SMA의 상대적 위치를 비교하여 구매 및 판매 신호를 생성한다. 동시에, 이 전략은 트렌드 확인 조건을 사용하여 가짜 신호를 필터링하여 거래 정확성을 향상시킵니다. 또한, 이 전략은 스톱 및 스톱 손실 기능을 설정하여 위험 관리를 수행한다.
이 다중 시간 척도 SMA 트렌드 추적 및 동적 중지 전략은 다른 시간 척도의 SMA를 사용하여 시장 트렌드를 포착하고, 트렌드 확인 조건을 통해 가짜 신호를 필터링하며, 동적 위치 조정 기능을 설정하면서 트렌드 추적 및 위험 관리의 목표를 달성합니다. 이 전략은 장점이 있지만, 여전히 변수 최적화, 흔들리는 시장 및 갑작스러운 이벤트와 같은 위험에 직면합니다.
/*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')