Estratégia de negociação de futuros de martingale alavancada

Autora:ChaoZhang, Data: 2024-01-26 11:12:23
Tags:

img

Resumo

Esta é uma estratégia de negociação de futuros que aproveita o mecanismo martingale para alcançar altos retornos.

Princípios

A lógica central desta estratégia é: quando o preço desencadeia a linha de stop loss, reabra posições com tamanhos maiores enquanto reduz a linha de stop loss em uma certa porcentagem.

Especificamente, ele primeiro entra no preço atual com o tamanho da posição definido e toma os níveis de lucro/perda. Quando o preço se move para a linha de stop loss, posições maiores serão reabertas e a linha de stop loss é reduzida em uma porcentagem definida. Tais operações de reabertura e redução de stop loss reduzirão o preço médio de abertura, aumentando o potencial de lucro. Depois que o número de ordens adicionadas atinge o máximo, ele aguarda a reversão do preço para atingir o take profit.

Análise das vantagens

A maior vantagem é a capacidade de reduzir a base de custos através da reabertura alavancada, enquanto ainda tem a chance de reversão favorável quando as tendências são negativas.

Também funciona bem para commodities e outros mercados de alta volatilidade, amplificando ganhos/perdas através da alavancagem.

Análise de riscos

O principal risco é que o preço possa continuar a tendência de queda após a reabertura, até quebrando os níveis de stop loss anteriores, levando a grandes perdas.

Outro risco é o insuficiência de capital para suportar a quantidade máxima de encomendas antes da reversão.

Áreas de melhoria

Algumas formas de otimizar ainda mais a estratégia:

  1. Ajuste dinâmico do nível de alavancagem, mais baixo quando se obtém lucro e mais elevado quando se perde

  2. Incorporar indicadores de tendência para parar perdas quando a tendência não estiver clara

  3. O valor da posição em risco deve ser calculado em função da volatilidade do mercado.

  4. Adicionar módulos de perda de parada automática para limitar perdas extremas

Resumo

Esta é uma estratégia típica de negociação de martingale alavancada. Ao reduzir o custo através de ordens adicionadas, ele busca retornos mais altos, mas também introduz riscos.


/*backtest
start: 2023-01-19 00:00:00
end: 2024-01-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Leveraged Martingale Strategy with Fees", overlay=true)

// User-defined input parameters
var float takeProfitPct = input(2.0, title="Take Profit Percentage") / 100.0
var float positionMultiplier = input(2.0, title="Position Size Multiplier")
var int maxOrders = input(10, title="Maximum Number of Reinforced Orders")
var float tradeSizeUSD = input(10000.0, title="Trade Size in USD")
var float dropPctForNextTrade = input(1.0, title="Drop Percentage for Next Trade") / 100.0
var float leverage = input(5.0, title="Leverage Factor")
var bool enterAtCurrentPrice = input(true, title="Enter First Trade at Current Price")
var float takerFeePct = input(0.1, title="Taker Order Fee Percentage") / 100.0

// State variables
var float last_entry_price = na
var float avg_entry_price = na
var float total_position_size = 0.0
var int num_trades = 0

// Entry logic
if (num_trades == 0)
    if (enterAtCurrentPrice or close < last_entry_price * (1 - dropPctForNextTrade))
        float size = tradeSizeUSD / close * leverage
        strategy.entry("Long", strategy.long, qty=size)
        avg_entry_price := close
        total_position_size := size
        last_entry_price := close
        num_trades := 1
else if (close < last_entry_price * (1 - dropPctForNextTrade) and num_trades < maxOrders)
    float size = tradeSizeUSD / close * leverage * pow(positionMultiplier, num_trades)
    strategy.entry("Double Long" + tostring(num_trades), strategy.long, qty=size)
    avg_entry_price := ((avg_entry_price * total_position_size) + (close * size)) / (total_position_size + size)
    total_position_size := total_position_size + size
    last_entry_price := close
    num_trades := num_trades + 1

// Take profit logic adjusted for leverage and fees
var float take_profit_price = na
var float fee_deduction = na
if (num_trades > 0)
    take_profit_price := avg_entry_price * (1 + takeProfitPct / leverage)
    fee_deduction := total_position_size * close * takerFeePct
    if (close > take_profit_price + fee_deduction / total_position_size)
        strategy.close_all()
        num_trades := 0


Mais.