Freiband-Schwingungsverfolgungsstrategie


Erstellungsdatum: 2024-02-04 10:28:24 zuletzt geändert: 2024-02-04 10:28:24
Kopie: 0 Klicks: 614
1
konzentrieren Sie sich auf
1617
Anhänger

Freiband-Schwingungsverfolgungsstrategie

Überblick

Die Hauptidee dieser Strategie ist die Berechnung von Stop-Loss-Positionen für Long- und Short-Lines auf der Grundlage des ATR-Indikators und die Erzeugung von Handelssignalen, wenn der Preis diese Stop-Lines durchbricht. Es verfügt sowohl über Trend-Tracking als auch über Schwankungen.

Strategieprinzip

Die Strategie verwendet die N-Periode-ATR des ATR-Indikators, um die langen und langen Stop-Lines auf beiden Seiten mit einem Faktor zu berechnen. Die spezifische Berechnungsformel lautet:

长线止损 = 最高价 - ATR * 系数
短线止损 = 最低价 + ATR * 系数

Wenn der Preis steigt und die langen Stop-Lines überschreitet, ist das Plus. Wenn der Preis sinkt und die kurzen Stop-Lines überschreitet, ist das Minus.

Diese Methode, die den ATR-Band als Stop-Loss-Bereich verwendet, kann die Preisentwicklung ausreichend erfassen, wenn das Stop-Loss-Risiko gewährleistet ist. Wenn der Preis einen größeren Durchbruch aufweist, wird ein Signal erzeugt, der einen falschen Durchbruch wirksam beseitigt.

Analyse der Stärken

Der größte Vorteil dieser Strategie besteht darin, dass die Stop-Loss-Position automatisch angepasst werden kann, um die Preisentwicklung zu erfassen und gleichzeitig das Risiko zu kontrollieren. Die spezifischen Vorteile sind:

  1. Die auf der Grundlage der ATR-Indikatoren eingestellte Floating Stop-Loss ermöglicht die Anpassung der Stop-Loss-Marge an die Marktvolatilität und die effektive Kontrolle der Einzelschäden.

  2. Die Signalentwicklung erfolgt durch einen Durchbruch, wodurch ein Teil der Geräusche ausgeschaltet wird und ein Über- und Untergang vermieden wird.

  3. Die Stop-Line kann in Echtzeit angepasst werden, um die Preisschwankungen zu verfolgen, um zu verhindern, dass die Stop-Loss zu locker ist, und um mehr Gewinne zu erzielen.

Risikoanalyse

Die Strategie hat auch einige Risiken, die sich hauptsächlich auf die Einstellung der Stop-Loss-Positionen und die Art und Weise konzentrieren, wie Signale erzeugt werden. Die spezifischen Risiken sind:

  1. Unpassende ATR-Zyklen und -Faktoren können zu einem zu breiten oder zu schmalen Stop-Loss führen.

  2. Ein Signalbruch kann zu einer Verlustchance führen.

  3. Der Trend-End-Stop-Loss-Tracking kann zu einem Verzögerungsschub führen, der nicht perfekt abschließen kann.

Die Gegenmaßnahmen bestehen hauptsächlich darin, die Parameter so anzupassen, dass der Stop-Loss vernünftiger ist, oder andere Indikatoren zu verwenden, um Trends und Signale zu beurteilen.

Optimierungsrichtung

Die Strategie kann in folgenden Bereichen weiter optimiert werden:

  1. Ein zweiter Schadensstop wurde eingerichtet, um die Risiken weiter zu kontrollieren.

  2. In Kombination mit anderen Indikatoren werden Trends für die Verbesserung der Signalqualität ermittelt.

  3. Die Einführung einer mobilen Stop-Off-Strategie erhöht die Gewinne, wenn sich der Trend weiter fortsetzt.

  4. Optimierung der ATR-Zyklen und -Faktorparameter, um den Stop-Loss näher an die tatsächlichen Preisschwankungen zu bringen.

Zusammenfassen

Diese Strategie ist sehr praktisch für die Gesamtheit und kann automatisch die Stop-Loss-Position anpassen, um das Risiko effektiv zu kontrollieren und gleichzeitig gute Gewinne durch Trend-Tracking zu erzielen. Wir können die Strategie auf der ursprünglichen Grundlage weiter optimieren und verbessern, um sie zu stabilisieren und intelligenter zu machen.

Strategiequellcode
/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © melihtuna
//@version=4
strategy("Chandelier Exit - Strategy",shorttitle="CE-STG" , overlay=true, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000, currency=currency.USD, commission_value=0.03, commission_type=strategy.commission.percent)

length = input(title="ATR Period", type=input.integer, defval=22)
mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
showLabels = input(title="Show Buy/Sell Labels ?", type=input.bool, defval=false)
useClose = input(title="Use Close Price for Extremums ?", type=input.bool, defval=true)
highlightState = input(title="Highlight State ?", type=input.bool, defval=true)

atr = mult * atr(length)

longStop = (useClose ? highest(close, length) : highest(length)) - atr
longStopPrev = nz(longStop[1], longStop) 
longStop := close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop

shortStop = (useClose ? lowest(close, length) : lowest(length)) + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

var int dir = 1
dir := close > shortStopPrev ? 1 : close < longStopPrev ? -1 : dir

var color longColor = color.green
var color shortColor = color.red

longStopPlot = plot(dir == 1 ? longStop : na, title="Long Stop", style=plot.style_linebr, linewidth=2, color=longColor)
buySignal = dir == 1 and dir[1] == -1
plotshape(buySignal ? longStop : na, title="Long Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=longColor, transp=0)
plotshape(buySignal and showLabels ? longStop : na, title="Buy Label", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=longColor, textcolor=color.white, transp=0)

shortStopPlot = plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=2, color=shortColor)
sellSignal = dir == -1 and dir[1] == 1
plotshape(sellSignal ? shortStop : na, title="Short Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=shortColor, transp=0)
plotshape(sellSignal and showLabels ? shortStop : na, title="Sell Label", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=shortColor, textcolor=color.white, transp=0)

midPricePlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0, display=display.none, editable=false)

longFillColor = highlightState ? (dir == 1 ? longColor : na) : na
shortFillColor = highlightState ? (dir == -1 ? shortColor : na) : na
fill(midPricePlot, longStopPlot, title="Long State Filling", color=longFillColor)
fill(midPricePlot, shortStopPlot, title="Short State Filling", color=shortFillColor)


long_short = input(true, "Long-Short",type=input.bool, group="Strategy Settings")

start     = input(timestamp("2019-01-01"), "Date", type=input.time, group="Strategy Settings")
finish    = input(timestamp("2025-01-01"), "Date", type=input.time, group="Strategy Settings")   
window()  => true

slRatio=input(5, "Manuel Stop Loss Ratio", type=input.float, minval=0, group="Strategy Settings")
tpRatio=input(20, "Take Profit Ratio", type=input.float, minval=0, group="Strategy Settings")
tsStartRatio=input(10, "Trailing Stop Start Ratio", type=input.float, minval=0, group="Strategy Settings")
tsRatio=input(5, "Trailing Stop Ratio", type=input.float, minval=1, group="Strategy Settings")

lastBuyPrice = strategy.position_avg_price

diffHiPriceRatio = (high-lastBuyPrice)/lastBuyPrice*100
diffLoPriceRatio = (close-lastBuyPrice)/lastBuyPrice*100
posHiRatio=0.0
posHiRatio:= strategy.position_size > 0 ? diffHiPriceRatio > posHiRatio[1] ? diffHiPriceRatio : posHiRatio[1] : 0

s_diffHiPriceRatio = (low-lastBuyPrice)/lastBuyPrice*100
s_diffLoPriceRatio = (close-lastBuyPrice)/lastBuyPrice*100
s_posHiRatio=0.0
s_posHiRatio:= strategy.position_size < 0 ? s_diffLoPriceRatio < s_posHiRatio[1] ? s_diffLoPriceRatio : s_posHiRatio[1] : 0

strategy.entry("LONG", strategy.long, when = window() and buySignal)
strategy.close("LONG", when = window() and sellSignal)
strategy.close("LONG", when = diffLoPriceRatio<(slRatio*(-1)), comment="STOP-LONG")
strategy.close("LONG", when = diffHiPriceRatio>tpRatio, comment="TAKE-PROFIT-LONG")
strategy.close("LONG", when = ((posHiRatio[1]>tsStartRatio) and (posHiRatio[1]-diffHiPriceRatio)>tsRatio), comment="TRAILING-STOP-LONG")

if long_short
    strategy.entry("SHORT", strategy.short, when = window() and sellSignal)
    strategy.close("SHORT", when = window() and buySignal)
    strategy.close("SHORT", when = s_diffLoPriceRatio>(slRatio), comment="STOP-SHORT")
    strategy.close("SHORT", when = s_diffHiPriceRatio<(tpRatio*(-1)), comment="TAKE-PROFIT-SHORT")
    strategy.close("SHORT", when = ((s_posHiRatio[1]*(-1)>tsStartRatio) and ((s_posHiRatio[1]-s_diffLoPriceRatio))*(-1)>tsRatio), comment="TRAILING-STOP-SHORT")