Diese Strategie ist ein fortschrittliches Handelssystem, das auf Unterstützungs- und Widerstandsniveaus basiert und dynamische Trendkanäle mit Risikomanagementfunktionalität kombiniert.
Die Kernlogik umfasst mehrere Schlüsselelemente:
Diese Strategie kombiniert wichtige technische Analyse-Konzepte - Unterstützungs-/Widerstandsniveaus und Trendkanäle - um ein logisch strenges und risikokontrolliertes Handelssystem aufzubauen. Die Stärken der Strategie liegen in ihrer Anpassungsfähigkeit und umfassendem Risikomanagement, aber Händler müssen die Parameter immer noch sorgfältig anpassen, basierend auf den Marktbedingungen und der persönlichen Risikotoleranz. Durch die vorgeschlagenen Optimierungsrichtungen hat die Strategie Raum für weitere Verbesserungen und kann sich zu einem umfassenderen und robusteren Handelssystem entwickeln.
/*backtest start: 2019-12-23 08:00:00 end: 2025-01-04 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Support and Resistance with Trend Lines and Channels", overlay=true) // Inputs lookback = input.int(20, title="Lookback Period for Support/Resistance", minval=1) channelWidth = input.float(0.01, title="Channel Width (%)", minval=0.001) / 100 startDate = input(timestamp("2023-01-01 00:00"), title="Backtesting Start Date") endDate = input(timestamp("2023-12-31 23:59"), title="Backtesting End Date") // Check if the current bar is within the testing range inTestingRange = true // Support and Resistance Levels supportLevel = ta.lowest(low, lookback) // Swing low (support) resistanceLevel = ta.highest(high, lookback) // Swing high (resistance) // Trend Lines and Channels var line supportLine = na var line resistanceLine = na var line upperChannelLine = na var line lowerChannelLine = na // Calculate channel levels upperChannel = resistanceLevel * (1 + channelWidth) // Upper edge of channel lowerChannel = supportLevel * (1 - channelWidth) // Lower edge of channel // Create or update the support trend line // if na(supportLine) // supportLine := line.new(bar_index, supportLevel, bar_index + 1, supportLevel, color=color.green, width=2, extend=extend.right) // else // line.set_y1(supportLine, supportLevel) // line.set_y2(supportLine, supportLevel) // // Create or update the resistance trend line // if na(resistanceLine) // resistanceLine := line.new(bar_index, resistanceLevel, bar_index + 1, resistanceLevel, color=color.red, width=2, extend=extend.right) // else // line.set_y1(resistanceLine, resistanceLevel) // line.set_y2(resistanceLine, resistanceLevel) // // Create or update the upper channel line // if na(upperChannelLine) // upperChannelLine := line.new(bar_index, upperChannel, bar_index + 1, upperChannel, color=color.blue, width=1, style=line.style_dashed, extend=extend.right) // else // line.set_y1(upperChannelLine, upperChannel) // line.set_y2(upperChannelLine, upperChannel) // // Create or update the lower channel line // if na(lowerChannelLine) // lowerChannelLine := line.new(bar_index, lowerChannel, bar_index + 1, lowerChannel, color=color.purple, width=1, style=line.style_dashed, extend=extend.right) // else // line.set_y1(lowerChannelLine, lowerChannel) // line.set_y2(lowerChannelLine, lowerChannel) // Buy Condition: When price is near support level buyCondition = close <= supportLevel * 1.01 and inTestingRange if buyCondition strategy.entry("Buy", strategy.long) // Stop Loss and Take Profit stopLossPercentage = input.float(1.5, title="Stop Loss Percentage", minval=0.0) / 100 takeProfitPercentage = input.float(3.0, title="Take Profit Percentage", minval=0.0) / 100 var float longStopLoss = na var float longTakeProfit = na if strategy.position_size > 0 longStopLoss := strategy.position_avg_price * (1 - stopLossPercentage) longTakeProfit := strategy.position_avg_price * (1 + takeProfitPercentage) strategy.exit("Exit Buy", "Buy", stop=longStopLoss, limit=longTakeProfit) // Visualize Entry, Stop Loss, and Take Profit Levels var float entryPrice = na if buyCondition entryPrice := close if not na(entryPrice) label.new(bar_index, entryPrice, text="Entry: " + str.tostring(entryPrice, "#.##"), style=label.style_label_up, color=color.green, textcolor=color.white) if strategy.position_size > 0 line.new(bar_index, longStopLoss, bar_index + 1, longStopLoss, color=color.red, width=1, extend=extend.right) line.new(bar_index, longTakeProfit, bar_index + 1, longTakeProfit, color=color.blue, width=1, extend=extend.right) // Risk-to-Reward Ratio (Optional) if not na(entryPrice) and not na(longStopLoss) and not na(longTakeProfit) riskToReward = (longTakeProfit - entryPrice) / (entryPrice - longStopLoss) label.new(bar_index, entryPrice, text="R:R " + str.tostring(riskToReward, "#.##"), style=label.style_label_up, color=color.yellow, textcolor=color.black, size=size.small)