Die Doppel-Beach-Breakout-Strategie kombiniert die Breakout-Strategie der Beach-Handelsmethode mit Linda Raschke’s Mobile Stop-Prinzip und bietet hervorragende Breakout-Leistung und strenge Risikokontrollen. Die Strategie überwacht gleichzeitig die Auf- und Abwärtsbrechungen des Preises, errichtet Über- oder Verlustpositionen bei einem Breakout und nutzt die mobile Stop-Loss- und mobile Stop-Management-Positionen.
Die Kernlogik besteht darin, bei einem brechen des kleinen Zyklushochs auf dem großen Zyklushoch frei zu machen und bei einem brechen des kleinen Zyklustiefens unter dem großen Zyklustief mehr zu tun. Setzen Sie nach dem Aufbau der Position einen beweglichen Stop-Loss und einen beweglichen Stop-Stop, um zuerst das Risiko zu bestätigen. Wenn sich die Anzahl der Positionen auf die Anzahl der gesetzten Stop-Losses ansammelt, werden die Stop-Loss-Anweisungen im nächsten Zyklus storniert, und dann gehen Sie aus dem Lager und setzen Sie einen beweglichen Stop-Loss und einen beweglichen Stop-Stop, um Gewinne zu sperren und Preisunterschiede zu verfolgen.
Die konkreten Schritte sind:
Es handelt sich um eine umfassende und durchschlagende Strategie mit folgenden Vorteilen:
Die wichtigsten Risiken und Maßnahmen sind:
Die Strategie kann auch in folgenden Bereichen optimiert werden:
Die Doppel-Seil-Breakthrough-Strategie kombiniert die Anwendung von Zwei-Zyklus-Technologie, Breakthrough-Theorie und strenge Risikomanagement-Methoden, um die Stabilität der Erträge zu gewährleisten, während die Gewinnrate hoch bleibt. Das Strategie-Modell ist einfach und klar, leicht zu verstehen und anzuwenden, und ist eine sehr gute quantitative Strategie. Die Strategie hat auch viel Optimierungsraum, auf der Grundlage derer Investoren innovativ sein können, um ein besseres Handelssystem zu schaffen.
/*backtest
start: 2022-11-21 00:00:00
end: 2023-11-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title = "Turtle soup plus one", shorttitle = "Turtle soup plus one", overlay=true)
bigPeriod = input(20)
smallPeriod = input(4)
takeProfitBars = input(0)
trailingStop = input(5, title = "Trailing stop percentages")
if (strategy.position_size == 0)
strategy.cancel("Long")
strategy.cancel("Short")
strategy.cancel("Stop")
stopLossPrice = 0.1
stopLossPrice := nz(stopLossPrice[1])
takeProfitStarted = false
takeProfitStarted := nz(takeProfitStarted[1])
prevHigh = highest(high, bigPeriod - smallPeriod)[smallPeriod]
smallPeriodHigh = highest(high, smallPeriod - 1)[1]
if (high > prevHigh and prevHigh > smallPeriodHigh and close > prevHigh and strategy.position_size == 0)
strategy.order("Short", strategy.short, stop = prevHigh)
if strategy.position_size < 0 and strategy.position_size[1] == 0
stopLossPrice := high[1]
strategy.order("Stop", strategy.long, qty = -strategy.position_size, stop = stopLossPrice)
takeProfitStarted := false
if (strategy.position_size < 0 and sum(strategy.position_size, takeProfitBars) == strategy.position_size * takeProfitBars and close < strategy.position_avg_price and not takeProfitStarted)
takeProfitStarted := true
strategy.cancel("Stop")
strategy.order("ExitHalf", strategy.long, qty = ceil(-strategy.position_size / 2), stop = close)
if (strategy.position_size != -1)
strategy.exit("ExitFull", "Short", qty = -strategy.position_size - ceil(-strategy.position_size / 2), loss = stopLossPrice, trail_price = close, trail_offset = -(close - strategy.position_avg_price) * trailingStop / 100 / syminfo.mintick)
prevLow = lowest(low, bigPeriod - smallPeriod)[smallPeriod]
smallPeriodLow = lowest(low, smallPeriod - 1)[1]
if (low < prevLow and prevLow < smallPeriodLow and close < prevLow and strategy.position_size == 0)
strategy.order("Long", strategy.long, stop = prevLow)
if strategy.position_size > 0 and strategy.position_size[1] == 0
stopLossPrice := low[1]
strategy.order("Stop", strategy.short, qty = strategy.position_size, stop = stopLossPrice)
takeProfitStarted := false
if (strategy.position_size > 0 and sum(strategy.position_size, takeProfitBars) == strategy.position_size * takeProfitBars and close > strategy.position_avg_price and not takeProfitStarted)
takeProfitStarted := true
strategy.cancel("Stop")
strategy.order("ExitHalf", strategy.short, qty = ceil(strategy.position_size / 2), stop = close)
if (strategy.position_size != 1)
strategy.exit("ExitFull", "Long", qty = strategy.position_size - ceil(strategy.position_size / 2),loss = stopLossPrice, trail_price = close, trail_offset = (close - strategy.position_avg_price) * trailingStop / 100 / syminfo.mintick)
// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(3, "Backtest Start Month")
testStartDay = input(6, "Backtest Start Day")
testStartHour = input(08, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2038, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
strategy.cancel_all()
strategy.close_all()