Estrategia de gestión de posiciones de alto apalancamiento para evitar llamadas de margen


Fecha de creación: 2023-12-26 16:21:58 Última modificación: 2023-12-26 16:21:58
Copiar: 1 Número de Visitas: 693
1
Seguir
1621
Seguidores

Estrategia de gestión de posiciones de alto apalancamiento para evitar llamadas de margen

Descripción general

Esta estrategia permite la gestión de riesgos para evitar la subida de las garantías al establecer un alto nivel de apalancamiento y condiciones adicionales de garantía, así como para cerrar posiciones a tiempo en el caso de grandes fluctuaciones en el mercado.

Principio de estrategia

  1. Configuración de operaciones con alto nivel de palanca, como 4 veces el nivel de palanca
  2. Establezca una línea de garantía adicional, por ejemplo, $ 25,000
  3. La estrategia para detener la posición cuando el interés es inferior a la línea de garantía adicional
  4. La estrategia de liquidar todas las posiciones cuando el interés continúe bajando para desencadenar una señal de garantía adicional

Con la configuración anterior, se puede detener los pérdidas en el momento oportuno cuando la gran volatilidad del mercado provoca una caída rápida de los derechos e intereses, lo que evita el riesgo de un monto adicional de garantía.

Análisis de las ventajas

  1. El riesgo de pérdidas individuales puede ser controlado con una proporción de palanca flexible en función de la capacidad de afrontamiento individual.
  2. El mecanismo de garantía adicional puede evitar que las cuentas se sobrepongan.
  3. Detener pérdidas en tiempo y evitar riesgos al máximo en operaciones con alto nivel de palanca

Análisis de riesgos

  1. El alto nivel de apalancamiento aumenta los beneficios, pero también aumenta el riesgo
  2. Se necesita una línea de garantía adicional razonablemente establecida para que coincida con la línea de stop loss.
  3. La pérdida de control es fácilmente engañable y requiere una estrategia de control de pérdidas optimizada.

Se puede reducir el riesgo mediante el ajuste adecuado de la proporción de apalancamiento, la configuración de líneas de garantía adicionales para que coincidan con las líneas de parada y la optimización de las estrategias de parada.

Dirección de optimización

  1. Combinando los indicadores de tendencia para evitar el retroceso
  2. Optimización de los métodos de amortización para evitar el amortización
  3. Establecer zonas de no negociación para evitar la construcción de almacenes durante períodos de tiempo específicos
  4. Parámetros de ajuste dinámico combinados con algoritmos de aprendizaje automático

Resumir

Esta estrategia permite la gestión del riesgo a través de un alto nivel de apalancamiento y la fijación de un monto adicional de garantía, lo que evita que la cuenta explote. Sin embargo, el alto nivel de apalancamiento también aumenta el riesgo, lo que requiere una reducción adicional del riesgo a través de métodos como el juicio de tendencias, la optimización de stop loss y el control del tiempo de negociación.

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