Momentum-Breakout-Strategie auf der Grundlage von internen Amplitude-Stop Loss

Schriftsteller:ChaoZhang, Datum: 2023-11-23 14:14:58
Tags:

img

Übersicht

Diese Strategie identifiziert abnormal steigende K-Linien, um zu beurteilen, ob es einen einseitigen Markt mit explodierender Volatilität gibt. Wenn eine abnormal steigende K-Line identifiziert wird, wird eine Take-Profit-Limit-Order in der Nähe des Höchststands dieser K-Line gesetzt, während gleichzeitig ein Stop-Loss in der Nähe des Tiefstands der vorherigen K-Line gesetzt wird und eine Long-Position mit hoher Hebelrisikokontrolle gebildet wird. Die Strategie überwacht kontinuierlich die Stop-Loss-Linie und kündigt sofort die Order zum Stop-Loss, wenn der Preis unter die Stop-Loss-Linie bricht.

Strategieprinzip

Diese Strategie beurteilt hauptsächlich die Bildung von abnormal steigenden K-Linien. Wenn eine K-Line mit geschlossen> offen und hoch niedrig[1] erscheint, glaubt sie, dass es eine aktuelle Periode des abnormal steigenden Marktes gibt. Ein langes Eintrittssignal wird generiert, wobei der Eintrittspreis nahe dem höchsten Preis der aktuellen K-Line liegt. Der Stop-Loss-Preis wird auch nahe dem niedrigsten Preis der vorherigen K-Line gesetzt, um ein hohes Hebelrisikokontrollmodell zu bilden. Die Risikokontrolle wird durch kontinuierliche Überwachung des Preisbruchs der Stop-Loss-Linie erreicht.

Analyse der Vorteile

Der größte Vorteil dieser Strategie besteht darin, dass sie die kurzfristige Sprengungsvolatilität auf dem Markt erfassen kann, um einen extrem hohen Frequenzhandel zu erreichen. Gleichzeitig kann durch die Festlegung eines größeren Stop-Loss-Bereichs ein hoher Hebel für einen risikokontrollierten Handel verwendet werden, um größere Renditen zu erzielen. Darüber hinaus realisiert die Strategie eine automatische Überwachung der Stop-Loss-Linie. Wenn der Preis die Stop-Loss-Linie nach unten durchbricht, kann er schnell den Stop-Loss stoppen, um die Handelsrisiken effektiv zu kontrollieren.

Risikoanalyse

Das Hauptrisiko dieser Strategie besteht darin, dass das Urteil über einen abnormalen Anstieg ungenau ist und nicht in der Lage ist, die explodierende Volatilität des Marktes effektiv zu erfassen, was zu einer höheren Wahrscheinlichkeit einer Fehleinschätzung von Handelssignalen führt. Darüber hinaus hat die Einstellung von Stop-Loss-Positionen auch einen großen Einfluss auf Handelsrisiken und Renditen. Wenn der Stop-Loss zu locker ist, erhöht sich das Handelsverlustrisiko. Wenn der Stop-Loss zu eng ist, kann er möglicherweise nicht in der Lage sein, die Gewinne auf dem Markt effektiv zu verfolgen.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Die Kriterien für die Beurteilung abnormaler Anstiege können mehr Indikatoren oder Deep-Learning-Modelle einführen, um bei Beurteilungen zu helfen, um die Genauigkeit der Handelssignalurteile in der Strategie zu verbessern.

  2. Die Einstellung von Stop-Loss-Positionen kann einer großen Anzahl von statistischen und Optimierungsanalysen unterzogen werden, um bessere Stop-Loss-Positionen zu finden, um Handelsrisiken und Rendite zu balancieren.

  3. Um die Wahrscheinlichkeit einer Gefangennahme zu vermeiden, können mehr hochfrequente Handelsrisiko-Kontrollmechanismen eingeführt werden, wie z. B. Transaktionsvolumenfilterung, Überprüfung von Range-Breakouts usw.

  4. Die Einstiegskriterien der Strategie können angepasst werden und müssen sich nicht auf abnormale K-Linien beschränken, sondern mehr Indikatoren und Modelle können kombiniert werden, um Urteile zu fällen und einen mehrfachen Verifizierungsmechanismus zu bilden.

Zusammenfassung

Diese Strategie ist eine typische Hochfrequenz-Handelsstrategie, die zu einer kurzfristigen Breakout-Strategie gehört. Sie erfasst die explosive Volatilität in den Marktbewegungen, um einen extrem hohen Frequenzhandel zu erreichen. Gleichzeitig verwendet sie Stop-Loss-Risikokontrolle und hohe Hebelwirkung, um Risiken zu kontrollieren. Die Strategie hat großen Raum für Optimierung und kann aus mehreren Blickwinkeln angepasst und optimiert werden. Das ultimative Ziel ist es, höhere Renditen aus dem Ultra-Hochfrequenz-Handel zu erzielen, während Risiken kontrolliert werden.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 08:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// LOVE JOY PEACE PATIENCE KINDNESS GOODNESS FAITHFULNESS GENTLENESS SELF-CONTROL 
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © JoshuaMcGowan
// I needed to test/verify the functionality for canceling an open limit order in a strategy and also work thru the pieces needed to set the position sizing so each loss is a set amount. 
// This is not meant to be dropped into a chart but rather gives the code/logic in order to use in your own script w/alerts or strategy. Hope it helps. 
 
//@version=4
strategy("Strategy Test - Cancel Limit Order and Position Sizing", overlay=true, precision=4)
 
/////////////////
// Backtest Period Selection
 
testStartYear = input(2020, "Backtest Start Year",minval=1980)
testStartMonth = input(2, "Backtest Start Month",minval=1,maxval=12)
testStartDay = input(1, "Backtest Start Day",minval=1,maxval=31)
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
 
testStopYear = input(2020, "Backtest Stop Year",minval=1980)
testStopMonth = input(12, "Backtest Stop Month",minval=1,maxval=12)
testStopDay = input(31, "Backtest Stop Day",minval=1,maxval=31)
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
 
testPeriod() => time >= true
 
//////////////
// Inside Bar
bull_inside_bar = close>open and high<high[1] and low>low[1]

// Set Levels
bull_inside_bar_sl = valuewhen(bull_inside_bar, low[1], 0) - (1*syminfo.mintick)
bull_breakout_price = valuewhen(bull_inside_bar, high, 0) + (1*syminfo.mintick)
entry_buy   = high
inside_bar_dist = entry_buy - bull_inside_bar_sl
inside_bar_be = entry_buy + (inside_bar_dist * 1)
inside_bar_tgt = entry_buy + (inside_bar_dist * 2)

///////////////////
// Position Sizing 
//////////////////
// For each trade setup that fires in this scenario we want to set our total loss amount in USD, so every trade that loses is lets say $1 and the 2:1 target would be $2 in this example. 
// The math logic for this take the risk amount and divide by the stop percentage, take that number and divide by leverage amount chosen. Stop percentage is a variable below if questions on that. 
//
// Taken from @JoshuaMorris (shout out to the UK peeps) position sizing google doc so thank you sir. 
// Would be used if risking based on percentage of a portfolio. Leaving code snippets here in case that's the direction someone wants to go. 
// xbt_price = security("BITMEX:XBTUSD", "D", close)
// account_size_xbt = input(1, "Account Size (XBT)", type=input.float)
// account_size_usd = (account_size_xbt * xbt_price)
// percentage_risk = input(0.01, "Personal Risk Percent - Default is 1%", type=input.float)
// personal_risk = (account_size_usd * percentage_risk)
// position_size_usd = (personal_risk) / risk_percent
// leverage_req = position_size_usd / account_size_usd

// Will want to hard code leverage as 1x, 5x, 10x etc and dont need it to automagically be set as is above. If you're doing 100x you are gnarly haha. 
leverage_amount = input(title="Leverage Amount Desired", type=input.integer, defval=10, options=[1, 2, 3, 5, 10, 25, 50, 100])
risk_amount = input(title="Risk Total Per Trade in USD", type=input.integer, defval=1, minval=1, step=1)

// Reminder this is for Longs. Math needs to be changed a bit for Shorts. This is the information using the long/short tool would give us if doing manually. 
stop_percent = inside_bar_dist / (entry_buy)
pos_size_no_lev = risk_amount / stop_percent
pos_size_with_lev = pos_size_no_lev / leverage_amount 

//////////////
// Strategy Section

if testPeriod()
    strategy.entry(id="Long", long=true, qty=1, limit=9320.00, when=bull_inside_bar)
    strategy.cancel(id="Long", when = low < 9310)
// as a test swap the price to be above the limit or below to see the cancel in play.
 
//////////////
// Plot Section
plotchar(bull_inside_bar, title="bull_inside_bar", char="🐂", location=location.belowbar, offset=-0, color=color.green, transp=25)
plot(bull_inside_bar_sl, title="bull_inside_bar_sl", transp=100)
plot(entry_buy, title="entry_buy", transp=100)
plot(inside_bar_dist, title="inside_bar_dist", transp=100)
plot(stop_percent, title="stop_percent", transp=100)
plot(pos_size_no_lev, title="pos_size_no_lev", transp=100)
plot(pos_size_with_lev, title="pos_size_with_lev", transp=100)

// Hidden Plots // For Data Window Eyes Only // 
// plot(longCondition==true?1:0, title="Long Condition", transp=100)
// plot(xbt_price, title="XBT Price", transp=100)
// plot(account_size_usd, title="Account Size USD", transp=100)
// plot(risk_percent, title="risk_percent", transp=100)
// plot(position_size_usd, title="position_size_usd", transp=100)
// plot(leverage_req, title="leverage_req", transp=100)

// END //

Mehr