Esta estrategia gestiona el riesgo mediante la fijación de condiciones de apalancamiento y de margen para cerrar posiciones durante fluctuaciones significativas del mercado.
Al hacerlo, la estrategia puede reducir las pérdidas en el tiempo durante los movimientos drásticos del mercado para prevenir los riesgos de margen.
Los riesgos pueden reducirse ajustando el apalancamiento, alineando la llamada de margen y el stop loss, optimizando el stop loss, etc.
La estrategia gestiona el riesgo con ajustes de apalancamiento y llamada de margen para evitar explosiones de cuentas. Sin embargo, un apalancamiento alto también aumenta los riesgos. Los esfuerzos adicionales como la validación de tendencias, la optimización de pérdidas de parada y el control de horas de negociación pueden ayudar a reducir aún más los riesgos.
/*backtest start: 2023-11-25 00:00:00 end: 2023-12-25 00:00:00 period: 1d basePeriod: 1h 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/ //@version=4 //@author=Daveatt // Breakout on 2H high/low break Strategy SystemName = "Leverage Strategy" TradeId = "🙏" InitCapital = 100000 InitPosition = 1 UseMarginCall = input(true, title="Use Margin Call?") MarginValue = input(25000, title="Margin Value", type=input.float) // use 1 for no leverage // use 0.1 for be underleveraged and bet 1/10th of a pip value // use any value > 1 for full-degen mode UseLeverage = input(true, title="Use Leverage") LeverageValue = input(4, title="Leverage mult (1 for no leverage)", minval=0.1, type=input.float) // Risk Management UseRiskManagement = input(true, title="Use Risk Management?") // ticks = 1/10th of a pip value StopLoss = input(5, title="Stop Loss in ticks value", type=input.float) TakeProfit = input(500, title="Take Profit in ticks value", type=input.float) InitCommission = 0.075 InitPyramidMax = 1 CalcOnorderFills = false CalcOnTick = true DefaultQtyType = strategy.cash DefaultQtyValue = strategy.cash Currency = currency.USD Precision = 2 Overlay=false MaxBarsBack=3000 strategy ( title=SystemName, shorttitle=SystemName, overlay=Overlay ) //////////////////////////// UTILITIES /////////////////////////// f_print(_txt, _condition) => var _lbl = label(na) label.delete(_lbl) if _condition // saving the candle where we got rekt :( _index = barssince(_condition) _lbl := label.new(bar_index - _index, highest(100), _txt, xloc.bar_index, yloc.price, size = size.normal, style=label.style_labeldown) //////////////////////////// STRATEGY LOGIC /////////////////////////// // Date filterigng _Date = input(true, title="[LABEL] DATE") FromYear = input(2019, "From Year", minval=1900), FromMonth = input(12, "From Month", minval=1, maxval=12), FromDay = input(1, "From Day", minval=1, maxval=31) ToYear = input(2019, "To Year", minval=1900), ToMonth = input(12, "To Month", minval=1, maxval=12), ToDay = input(9, "To Day", minval=1, maxval=31) FromDate = timestamp(FromYear, FromMonth, FromDay, 00, 00) ToDate = timestamp(ToYear, ToMonth, ToDay, 23, 59) TradeDateIsAllowed = true // non-repainting security version four_hours_H = security(syminfo.tickerid, '240', high[1], lookahead=true) four_hours_L = security(syminfo.tickerid, '240', low[1], lookahead=true) buy_trigger = crossover(close, four_hours_H) sell_trigger = crossunder(close, four_hours_L) // trend states since_buy = barssince(buy_trigger) since_sell = barssince(sell_trigger) buy_trend = since_sell > since_buy sell_trend = since_sell < since_buy change_trend = (buy_trend and sell_trend[1]) or (sell_trend and buy_trend[1]) // plot(four_hours_H, title="4H High", linewidth=2, color=#3c91c2, style=plot.style_linebr, transp=0, // show_last=1, trackprice=true) // plot(four_hours_L, title="4H Low", linewidth=2, color=#3c91c2, style=plot.style_linebr, transp=0, // show_last=1, trackprice=true) plot(strategy.equity, color=color.blue, linewidth=3, title="Strategy Equity") // get the entry price entry_price = valuewhen(buy_trigger or sell_trigger, close, 0) // SL and TP SL_price = buy_trend ? entry_price - StopLoss : entry_price + StopLoss is_SL_hit = buy_trend ? crossunder(low, SL_price) : crossover(high, SL_price) TP_price = buy_trend ? entry_price + TakeProfit : entry_price - TakeProfit is_TP_hit = buy_trend ? crossover(high, TP_price) : crossunder(low, TP_price) // Account Margin Management: f_account_margin_call_cross(_amount)=> _return = crossunder(strategy.equity, _amount) f_account_margin_call(_amount)=> _return = strategy.equity <= _amount is_margin_call_cross = f_account_margin_call_cross(MarginValue) is_margin_call = f_account_margin_call(MarginValue) plot(strategy.equity, title='strategy.equity', transp=0, linewidth=4) //plot(barssince(is_margin_call ), title='barssince(is_margin_call)', transp=100) can_trade = iff(UseMarginCall, not is_margin_call, true) trade_size = InitPosition * (not UseLeverage ? 1 : LeverageValue) // We can take the trade if not liquidated/margined called/rekt buy_final = can_trade and buy_trigger and TradeDateIsAllowed sell_final = can_trade and sell_trigger and TradeDateIsAllowed close_long = buy_trend and (UseRiskManagement and (is_SL_hit or is_TP_hit)) or sell_trigger close_short = sell_trend and (UseRiskManagement and (is_SL_hit or is_TP_hit)) or buy_trigger strategy.entry(TradeId + ' B', long=true, qty=trade_size, when=buy_final) strategy.entry(TradeId + ' S', long=false, qty=trade_size, when=sell_final) strategy.close(TradeId + ' B', when=close_long) strategy.close(TradeId + ' S', when=close_short) // FULL DEGEN MODE ACTIVATED // Margin called - Broker closing your account strategy.close_all(when=is_margin_call) if UseMarginCall and is_margin_call_cross f_print("☠️REKT☠️", is_margin_call_cross)