Стратегия управления позициями с высоким кредитным плечом для предотвращения маржинальных вызовов


Дата создания: 2023-12-26 16:21:58 Последнее изменение: 2023-12-26 16:21:58
Копировать: 1 Количество просмотров: 693
1
Подписаться
1621
Подписчики

Стратегия управления позициями с высоким кредитным плечом для предотвращения маржинальных вызовов

Обзор

Эта стратегия позволяет управлять рисками, чтобы предотвратить дополнительные гарантии, устанавливая высокий уровень леверинга и условия для дополнительной гарантии, своевременно ликвидируя позиции при значительных колебаниях на рынке.

Стратегический принцип

  1. Высокий уровень рычагов, например, в 4 раза больше
  2. Установите дополнительную гарантийную линию, например, $25 000.
  3. Стратегия остановки позиций, когда доля в процентах ниже дополнительной гарантийной линейки
  4. Стратегия ликвидации всех позиций, когда продолжение падения доли вкладов вызывает дополнительный сигнал о погашении

Благодаря вышеуказанной настройке, можно своевременно остановить убытки, предотвратив риск дополнительной гарантии в случае резкого падения прав и интересов в результате значительных рыночных колебаний.

Анализ преимуществ

  1. Гибкий уровень леверинга в зависимости от индивидуальных возможностей, чтобы контролировать риск одиночных потерь
  2. Дополнительный гарантийный механизм может предотвратить разрыв счетов
  3. Вовремя остановить убытки при высоком уровне леверинга и максимально избежать риска

Анализ рисков

  1. Высокий леверинг увеличивает прибыль и одновременно увеличивает риск
  2. Необходимо разумно установить дополнительную гарантийную линию, чтобы она соответствовала линии остановки
  3. Ограничение убытков легко поддается обману и требует оптимизации стратегии.

Снижение риска может быть достигнуто путем корректировки пропорций леверинга, установки дополнительной гарантийной линий, сопоставленной с линией остановки, оптимизации стратегии остановки убытков.

Направление оптимизации

  1. Вместе с трендовыми показателями, избегайте негативных позиций
  2. Оптимизация методов сдерживания убытков, чтобы избежать сдерживания.
  3. Установка зоны без торговли, чтобы избежать создания складов в определенные периоды времени
  4. Динамическая настройка параметров в сочетании с алгоритмами машинного обучения

Подвести итог

Эта стратегия позволяет управлять риском с помощью высокого уровня и дополнительной гарантийной суммы, что предотвращает попадание в ломбард. Однако высокий уровень леверинга также увеличивает риск и требует дальнейшего снижения риска с помощью методов, таких как определение тенденции, оптимизация стоп-лома и контроль времени торговли. Кроме того, можно использовать более сложные технологии, такие как машинное обучение, для динамической оптимизации параметров и поиска оптимального баланса между доходами и рисками.

Исходный код стратегии
/*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)