Estratégia de gestão de posição de alta alavancagem para evitar chamadas de margem


Data de criação: 2023-12-26 16:21:58 última modificação: 2023-12-26 16:21:58
cópia: 1 Cliques: 693
1
focar em
1621
Seguidores

Estratégia de gestão de posição de alta alavancagem para evitar chamadas de margem

Visão geral

Esta estratégia permite a gestão de risco para evitar a cobrança de garantias adicionais, através da definição de condições de alto nível de alavancagem e de adicionais garantias, e de liquidação de posições em tempo hábil em situações de grande volatilidade no mercado.

Princípio da estratégia

  1. Configurar operações de alta alavancagem, como a alavancagem proporção de 4 vezes
  2. Configurar uma linha de crédito adicional, como $25,000
  3. A estratégia para parar de abrir posições quando o juros é inferior à linha de juros de garantia adicional
  4. Quando o equity continuar a cair, a estratégia de liquidação de todas as posições desencadeia um sinal de garantia adicional

Com a configuração acima, pode-se parar o prejuízo em tempo hábil quando a forte flutuação do mercado leva a uma queda rápida dos direitos e interesses, evitando o risco de adição de garantia.

Análise de vantagens

  1. O risco de perdas individuais pode ser controlado com uma taxa de alavancagem flexível, de acordo com a capacidade individual de suportar
  2. Mecanismos adicionais de garantia podem impedir que a conta explode
  3. Em operação de alta alavancagem, para evitar o máximo de risco

Análise de Riscos

  1. A alta alavancagem aumenta os ganhos e aumenta os riscos
  2. Uma linha de garantia adicional deve ser razoavelmente definida para corresponder à linha de stop loss
  3. O “stop loss” pode ser manipulado e requer uma estratégia de “stop loss” otimizada.

Pode-se reduzir o risco por meio de métodos como ajustar adequadamente a taxa de alavancagem, configurar a linha de garantia adicional para combinar com a linha de parada, otimizar a estratégia de parada.

Direção de otimização

  1. Combinação de indicadores de tendência para evitar a contração
  2. Optimizar o modo de amortização para evitar que o amortização seja bloqueado
  3. Estabelecer um período sem negociação para evitar a construção de uma posição em um determinado período de tempo
  4. Parâmetros de ajuste dinâmico combinados com algoritmos de aprendizagem de máquina

Resumir

Esta estratégia permite a gestão de risco através de alto nível de alavancagem e de uma configuração de garantia adicional, o que pode evitar que a conta explode. No entanto, o alto nível de alavancagem também aumenta o risco, e é necessário reduzir ainda mais o risco por meio de métodos como o julgamento de tendências, a otimização de stop loss e o controle de tempo de negociação.

Código-fonte da estratégia
/*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)