Estrategia de ruptura de impulso de corto y largo plazo basada en stop de ganancia interna


Fecha de creación: 2023-11-23 14:14:58 Última modificación: 2023-11-23 14:14:58
Copiar: 0 Número de Visitas: 675
1
Seguir
1617
Seguidores

Estrategia de ruptura de impulso de corto y largo plazo basada en stop de ganancia interna

Descripción general

La estrategia determina si hay un unilateral inesperado en el mercado actual mediante la identificación de la línea K de aumento anormal. Cuando se identifica una línea K de aumento anormal, se establece un stop-loss cerca del punto más alto de la línea K, y al mismo tiempo se establece un stop-loss cerca del punto más bajo de la línea K anterior, formando una lista larga de control de riesgo de alto apalancamiento.

Principio de estrategia

La estrategia se basa en la formación de líneas K de aumento anormal, cuando se produce un cierre > abierto y un alto < alto[1] y bajo> bajo[1] de la línea K, se considera que existe una situación de alza anormal en el ciclo actual. En este momento se establece una señal de entrada larga, el precio de entrada es cerca del precio más alto de la línea K actual. Al mismo tiempo, se establece un precio de parada cerca del precio más bajo de la línea K anterior, formando un modelo de control de riesgo de alto nivel de palanca.

Análisis de las ventajas

La mayor ventaja de esta estrategia es que puede capturar la corta línea de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de la situación de

Análisis de riesgos

El principal riesgo de esta estrategia reside en la inexactitud de la determinación de la ganancia anormal y la incapacidad de capturar de manera efectiva los movimientos repentinos del mercado, lo que genera una mayor probabilidad de error en el juicio de las señales de negociación. Además, la configuración de la posición de stop loss también tiene un gran impacto en el riesgo y los beneficios de la negociación.

Dirección de optimización

La estrategia puede ser optimizada en los siguientes aspectos:

  1. El criterio de valoración de las subidas anormales puede introducir más indicadores o modelos de aprendizaje profundo para ayudar a la valoración, mejorando la precisión de la valoración de las señales de negociación de la estrategia.

  2. La configuración de la posición de parada permite realizar un gran número de análisis estadísticos y de optimización para encontrar la posición de parada más óptima para equilibrar los niveles de riesgo y ganancias de la operación.

  3. Se pueden introducir más mecanismos de control de transacciones de alta frecuencia, como filtros de volumen de transacciones, verificación de ruptura de intervalos, etc., para evitar la probabilidad de ser encerrados.

  4. Los criterios de admisión de la estrategia pueden ajustarse, no tienen que limitarse a la línea K de aumento anormal, sino que se pueden combinar con más indicadores y modelos para determinar, formando un mecanismo de verificación múltiple.

Resumir

La estrategia en su conjunto es una estrategia típica de comercio de alta frecuencia, perteneciente a la clase de estrategia de brecha de línea corta. Permite el comercio de alta frecuencia mediante la captura de fluctuaciones anormales repentinas de la situación.

Código Fuente de la Estrategia
/*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 //