Estratégia de Stop Loss e Take Profit baseada no preço

Autora:ChaoZhang, Data: 23 de janeiro de 2023 15:36:00
Tags:

img

Resumo

A ideia central desta estratégia é usar os valores de stop loss e take profit de entrada para definir níveis razoáveis de stop loss e take profit tick, para gerenciar o risco e a recompensa de cada negociação.

Estratégia lógica

A estratégia define primeiro sinais de entrada aleatórios, indo longo quando o SMA14 cruza o SMA28 e indo curto quando o SMA14 cruza o SMA28.

Após a entrada, a estratégia usa a função moneyToSLPoints para calcular o nível do tick de stop loss com base na entrada do valor do stop loss em dólares. Da mesma forma, também calcula o nível do tick de take profit. Isso implementa o stop loss e take profit com base nos valores em dólares.

Por exemplo, se for longo 100 contratos com cada tick no valor de US $ 10, e a perda de parada é definida em US $ 100, então o nível de tick de parada de perda seria calculado como 100/10/100 = 0,1 ticks.

Finalmente.strategy.exitA linha de stop loss e take profit também é traçada para fins de depuração.

Análise das vantagens

A maior vantagem desta estratégia de stop loss e take profit baseada no preço é que os parâmetros são intuitivos.

Além disso, as paradas de valor em dólares podem controlar melhor a exposição ao risco real em comparação com as paradas fixas quando a volatilidade do mercado muda.

Análise de riscos

Há alguns riscos com esta estratégia de stop loss e take profit:

  1. Se a distância de parada for muito grande, as reversões de curto prazo se tornam prováveis e podem atrapalhar o comércio.

  2. Se a distância de lucro for muito pequena, seria difícil para as tendências unilaterais normais alcançá-la, tornando os lucros improváveis.

  3. Se um contrato de alto valor de tique como o petróleo bruto for usado, o mesmo dólar stop loss se traduziria em tiques muito pequenos, que podem ser facilmente interrompidos pelo ruído.

Orientações de otimização

Algumas formas de melhorar esta estratégia:

  1. O sinal de entrada pode ser reforçado combinando melhor a tendência, a volatilidade, a sazonalidade, etc., com as entradas de tempo.

  2. As percentagens de stop/profit adequadas podem ser escolhidas com base em diferentes produtos.

  3. As paradas podem adaptar-se à volatilidade, ampliando-se quando a volatilidade aumenta e apertando-se quando a volatilidade cai.

  4. Diferentes abordagens de stop/profit podem ser usadas para diferentes sessões de negociação.

Conclusão

Esta estratégia implementa stop loss intuitivo e take profit com base em quantias em dólares. Suas vantagens são parâmetros intuitivos e controle de capital. As desvantagens são a facilidade de ser pego em reversões e perdendo lucros. Pode ser melhorado por melhorar as entradas, otimizar paradas / alvos, escolher melhores produtos, etc. para torná-lo mais estável.


/*backtest
start: 2023-11-15 00:00:00
end: 2023-11-22 00:00:00
period: 10m
basePeriod: 1m
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/
// © adolgov

// @description
// 

//@version=4
strategy("Stop loss and Take Profit in $$ example", overlay=true)

// random entry condition

longCondition = crossover(sma(close, 14), sma(close, 28))
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(sma(close, 14), sma(close, 28))
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)

moneyToSLPoints(money) =>
    strategy.position_size !=0 ? (money / syminfo.pointvalue / abs(strategy.position_size)) / syminfo.mintick : na

p = moneyToSLPoints(input(200, title = "Take Profit $$"))
l = moneyToSLPoints(input(100, title = "Stop Loss $$"))
strategy.exit("x", profit = p, loss = l)

// debug plots for visualize SL & TP levels
pointsToPrice(pp) =>
    na(pp) ? na : strategy.position_avg_price + pp * sign(strategy.position_size) * syminfo.mintick
    
pp = plot(pointsToPrice(p), style = plot.style_linebr )
lp = plot(pointsToPrice(-l), style = plot.style_linebr )
avg = plot( strategy.position_avg_price, style = plot.style_linebr )
fill(pp, avg, color = color.green)
fill(avg, lp, color = color.red)

Mais.