この戦略は,市場動向を把握するために,複数のタイムフレームでシンプル・ムービング・アベア (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')