Estrategia de ruptura de impulso basada en la pérdida de parada de la amplitud interna

El autor:¿ Qué pasa?, Fecha: 2023-11-23 14:14:58
Las etiquetas:

img

Resumen general

Esta estrategia identifica líneas K anormalmente crecientes para juzgar si hay un mercado unilateral con volatilidad explosiva. Cuando se identifica una línea K anormalmente creciente, establecerá una orden de límite de ganancia cerca del máximo de esa línea K, al mismo tiempo que establece un stop loss cerca del mínimo de la línea K anterior, formando una posición larga con alto control de riesgo de apalancamiento. La estrategia supervisa continuamente la línea de stop loss y cancelará inmediatamente la orden de stop loss si el precio se rompe por debajo de la línea de stop loss.

Principio de la estrategia

Esta estrategia juzga principalmente la formación de líneas K anormalmente crecientes. Cuando aparece una línea K con cierre> abierto y alto bajo[1], cree que hay un período actual de mercado anormalmente creciente. Se generará una señal de entrada larga, con el precio de entrada cerca del precio más alto de la línea K actual. El precio de stop loss también se establece cerca del precio más bajo de la línea K anterior para formar un modelo de control de riesgo de alto apalancamiento.

Análisis de ventajas

La mayor ventaja de esta estrategia es que puede capturar la volatilidad explosiva a corto plazo en el mercado para lograr una negociación de frecuencia ultra alta. Al mismo tiempo, al establecer un rango de stop loss más grande, se puede usar un alto apalancamiento para la negociación controlada por riesgo para obtener mayores retornos. Además, la estrategia realiza un monitoreo automático de la línea de stop loss. Cuando el precio rompe la línea de stop loss hacia abajo, puede detener rápidamente la pérdida para controlar eficazmente los riesgos comerciales.

Análisis de riesgos

El principal riesgo de esta estrategia es que el juicio de un aumento anormal es inexacto, y no es capaz de capturar efectivamente la volatilidad explosiva del mercado, lo que resulta en una mayor probabilidad de error de juicio de las señales comerciales. Además, el establecimiento de posiciones de stop loss también tendrá un gran impacto en los riesgos y los rendimientos comerciales. Si el stop loss es demasiado flojo, el riesgo de pérdida comercial aumentará. Si el stop loss es demasiado apretado, puede no ser capaz de rastrear eficazmente las ganancias en el mercado. Se necesita una gran cantidad de backtesting para optimizar la posición de stop loss.

Direcciones de optimización

La estrategia se puede optimizar en los siguientes aspectos:

  1. Los criterios para juzgar los aumentos anormales pueden introducir más indicadores o modelos de aprendizaje profundo para ayudar en los juicios para mejorar la precisión de los juicios de señales comerciales en la estrategia.

  2. El establecimiento de posiciones de stop loss puede someterse a una gran cantidad de análisis estadísticos y de optimización para encontrar mejores posiciones de stop loss para equilibrar los riesgos comerciales y los niveles de rendimiento.

  3. Se pueden introducir mecanismos de control del riesgo de negociación de mayor frecuencia, como el filtrado del volumen de transacciones, la verificación de la ruptura del rango, etc., para evitar la probabilidad de quedar atrapados.

  4. Los criterios de entrada de la estrategia pueden ajustarse y no necesitan limitarse a las líneas K anormales.

Resumen de las actividades

Esta estrategia es una típica estrategia de trading de alta frecuencia, perteneciente a una estrategia de breakout a corto plazo. Captura la explosiva volatilidad en los movimientos del mercado para lograr un trading de ultra alta frecuencia. Al mismo tiempo, utiliza control de riesgo de stop loss y mecanismos de alto apalancamiento para controlar los riesgos. La estrategia tiene un gran margen de optimización, y puede ajustarse y optimizarse desde múltiples ángulos.


/*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 //

Más.