
Die Strategie ist ein Trend-Breaking-Trading-System, das auf Abwärts-Wellenformen in der technischen Analyse basiert. Es baut eine Aufwärts- und Abwärts-Trendlinie auf, indem es dynamisch Höhen und Tiefen im Preis identifiziert. Die Strategie verwendet einen dynamischen Stop-Loss-Mechanismus, um Risiken zu kontrollieren und Gewinne zu sperren.
Die Kernlogik der Strategie besteht aus folgenden Schlüsselschritten:
Es handelt sich hierbei um eine vernünftige Trend-Trading-Strategie, die die traditionellen Methoden der technischen Analyse programmierbar umsetzt. Der Vorteil der Strategie liegt in der Fähigkeit, die Marktstruktur zu automatisieren und potenzielle Trendwende-Gelegenheiten zu erfassen. Gleichzeitig muss jedoch auf Probleme wie Falschbrüche und Parameteroptimierung geachtet werden. Durch weitere Optimierung und Verfeinerung wird die Strategie voraussichtlich im realen Handel besser funktionieren.
/*backtest
start: 2025-04-11 00:00:00
end: 2025-07-10 00:00:00
period: 10m
basePeriod: 10m
exchanges: [{"eid":"Binance","currency":"BTC_USDT","balance":200000}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
//@version=6
strategy("Falling Wedge Strategy by Nitin", overlay=true)
// Input parameters
leftBars = input.int(5, "Left Bars for Pivot", minval=1, maxval=20)
rightBars = input.int(5, "Right Bars for Pivot", minval=1, maxval=20)
takeProfitPercent = input.float(6, "Take Profit %", minval=0.1, maxval=100)/100
stopLossPercent = input.float(2, "Stop Loss %", minval=0.1, maxval=100)/100
// Global variables
var float buyPrice = na
// Detect pivot highs and lows
ph = ta.pivothigh(leftBars, rightBars)
pl = ta.pivotlow(leftBars, rightBars)
// Track last two pivot highs
var float[] highs = array.new_float()
var int[] highIndices = array.new_int()
if not na(ph)
array.unshift(highs, ph)
array.unshift(highIndices, bar_index[rightBars])
if array.size(highs) > 2
array.pop(highs)
array.pop(highIndices)
// Track last two pivot lows
var float[] lows = array.new_float()
var int[] lowIndices = array.new_int()
if not na(pl)
array.unshift(lows, pl)
array.unshift(lowIndices, bar_index[rightBars])
if array.size(lows) > 2
array.pop(lows)
array.pop(lowIndices)
// Calculate trendlines and detect falling wedge pattern
isFallingWedge = false
var float currentUpper = na
var float currentLower = na
if array.size(highs) >= 2 and array.size(lows) >= 2
h1 = array.get(highs, 0)
h2 = array.get(highs, 1)
i1 = array.get(highIndices, 0)
i2 = array.get(highIndices, 1)
l1 = array.get(lows, 0)
l2 = array.get(lows, 1)
j1 = array.get(lowIndices, 0)
j2 = array.get(lowIndices, 1)
m_upper = (h1 - h2) / (i1 - i2)
m_lower = (l1 - l2) / (j1 - j2)
currentUpper := h2 + m_upper * (bar_index - i2)
currentLower := l2 + m_lower * (bar_index - j2)
// Falling wedge pattern condition
isFallingWedge := h1 < h2 and l1 < l2 and m_upper < m_lower and m_upper < 0 and m_lower < 0
// Trading strategy execution
if isFallingWedge and ta.crossover(close, currentUpper) and strategy.position_size == 0
strategy.entry("Buy", strategy.long)
buyPrice := close
strategy.exit("Take Profit/Stop Loss", "Buy", stop=buyPrice * (1 - stopLossPercent), limit=buyPrice * (1 + takeProfitPercent))
// Plotting
plot(strategy.position_size > 0 ? buyPrice * (1 - stopLossPercent) : na, "Stop Loss", color=color.red, linewidth=2)
plot(strategy.position_size > 0 ? buyPrice * (1 + takeProfitPercent) : na, "Take Profit", color=color.green, linewidth=2)