
Esta estrategia utiliza el porcentaje de cambio en el precio para establecer líneas de compra y de parada, para construir posiciones en función de la ruptura del precio de la línea de compra, y para detenerse por debajo de la línea de parada. Su principal característica es asumir un solo unidad de riesgo, es decir, solo se aumenta la posición cuando una posición anterior alcanza el objetivo de ganancias predeterminado.
La estrategia establece primero un precio de referencia, con un 10% de este precio como un intervalo de precio, el borde superior como una línea de compra y el borde inferior como una línea de parada. Cuando el precio rompe la línea de compra, compra en cantidades fijas.
Otro punto clave de esta estrategia es el riesgo de una sola unidad. Es decir, solo se colocan nuevas posiciones después de que la posición actual haya alcanzado el objetivo de ganancias. Las nuevas posiciones también se configuran según las nuevas líneas de compra y de parada.
Esta estrategia combina las ventajas del seguimiento de las pérdidas y la gestión de la acumulación de capital, permitiendo obtener ganancias al mismo tiempo que se controla el riesgo de manera eficaz.
La estrategia también tiene sus riesgos:
Estos riesgos se pueden evitar mediante ajustes de parámetros, como el ajuste del tamaño de los intervalos porcentuales, el ajuste de las condiciones de alza de la posición, etc.
La estrategia aún tiene espacio para ser optimizada:
Se trata de una estrategia de negociación que utiliza el porcentaje de margen. Es sencilla, práctica y controla el riesgo de manera efectiva. Mediante el ajuste de los parámetros y la optimización de los modelos, la estrategia puede convertirse en un sistema de seguimiento de tendencias fiable que genera un beneficio adicional estable para los inversores.
/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © HermanBrummer 4 April 2021
strategy ("The Box Percent Strat", shorttitle="The Box", overlay = true)
/// Designed for LONG only on Daily, 2D or 3D Charts
/// Uses fixed investment risk amount, meaning you're willing to lose that amount per trade
/// Limit buy to not overpay
RiskPerTrade = input(10000, "Risk losing this much per trade", tooltip="This calculates how much you will lose based on difference between the entry price and stop loss price")
TradeAboveMAFilterPer = input(50, "The System won't trade if price is below this MA")
UpBoxSize = (input(10, "Box size in %") * 0.01)+1 // 1.1 == 10% up
DnBoxSize = 1-(input(10, "Box size in %") * 0.01) // 0.9 == 10% dn
var FirstBar = close > 0 ? close : na
var FirstTop = FirstBar * UpBoxSize
var FirstBot = FirstBar * DnBoxSize
var top = sma(FirstTop, 1)
var bot = sma(FirstBot, 1)
/// The Box Calcs
if high[2] > top
top := top * UpBoxSize
bot := bot * UpBoxSize
if low[1] < bot
top := top * DnBoxSize
bot := bot * DnBoxSize
plot(bot, "Bot", #ff0000) // Green
plot(top, "Top", #00ff00) // Red
mid = ((top-bot)/2)+bot
plot(mid, "Mid", color.gray)
TradeAboveMAFilter = sma(close, TradeAboveMAFilterPer)
plot(TradeAboveMAFilter, "Trade AboveMAF Filter", color.yellow, 3, style=plot.style_circles)
// col = high[1] < top and high >= top ? color.white : na
// bgcolor(col)
/// Shares
RiskRange = close * abs(DnBoxSize - 1) // 0.9 - 1 == 1.10 // 10% abs so you don't get a neg number NB NB
Shares = RiskPerTrade / RiskRange
//plot(close-RiskRange, "RiskRange", color.fuchsia)
Enter = high >= top
and close[1] > TradeAboveMAFilter
and strategy.opentrades[0] == strategy.opentrades[1]
and strategy.opentrades[1] == strategy.opentrades[2]
and strategy.opentrades[2] == strategy.opentrades[3]
and strategy.opentrades[3] == strategy.opentrades[4]
and strategy.opentrades[4] == strategy.opentrades[5]
and strategy.opentrades[5] == strategy.opentrades[6]
// won't enter if new positon was taken in the last 6 bars
// need better code for this.
/// Buy & Sell
// (new highs) and (Close above moving average filter) and (No new trades were taken receently)
if Enter //(high >= top) and (close[1] > TradeAboveMAFilter) and strategy.opentrades[0] == strategy.opentrades[1]
strategy.order("En", strategy.long, qty=Shares, limit=top)//, stop=top)
//barcolor(strategy.position_size != 0 ? #00ff00 : color.gray)
// /// If ONE Position THEN this Stop Because:
// if strategy.position_size == 1
// strategy.exit("Ex", "En", stop=bot)
/// If it has more than one trad OPEN
if strategy.position_size > 0
strategy.exit("Ex", "En", stop=bot[2] ) // puts stop on old bot
//plot(strategy.position_avg_price, "Avg Price", color.yellow)