Esta estratégia implementa a funcionalidade de definir saídas de lucro porcentuais múltiplas. A estratégia julga primeiro as condições longas e curtas para entrar em posições. Em seguida, usa uma função personalizada percentAsPoints para converter as porcentagens em tiques de preço. O programa define 4 saídas com percentagens de lucro de 1%, 2%, 3% e 4% com base nas configurações, e também define uma saída de stop loss comum de 2%. Isso alcança o efeito de saídas de lucro porcentuais múltiplas.
A lógica central desta estratégia é usar crossovers SMA para determinar entradas. Especificamente, quando o SMA rápido (14) cruza acima do SMA lento (28), ele vai longo. Quando o SMA rápido (14) cruza abaixo do SMA lento (28), ele vai curto.
Então, como definir saídas de lucro porcentuais múltiplas? Aqui, uma função personalizada percentAsPoints é usada para converter porcentagens em tiques de preço.
percentAsPoints(pcnt) =>
strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na)
Se o tamanho da posição não for igual a 0, ele calcula os ticks de preço por percentagem multiplicada pelo preço médio de entrada e dividida pelo tamanho mínimo de tick.
Com esta função, podemos facilmente converter percentagens em ticks. O programa define então 4 saídas baseadas em percentagens de lucro de 1%, 2%, 3% e 4%:
lossPnt = percentAsPoints(2)
strategy.exit("x1", qty_percent = 25, profit = percentAsPoints(1), loss = lossPnt)
strategy.exit("x2", qty_percent = 25, profit = percentAsPoints(2), loss = lossPnt)
strategy.exit("x3", qty_percent = 25, profit = percentAsPoints(3), loss = lossPnt)
strategy.exit("x4", profit = percentAsPoints(4), loss = lossPnt)
Além disso, um stop loss comum de 2% é usado para todas as saídas.
Esta estratégia de saída de lucro com percentagem múltipla tem as seguintes vantagens:
A estratégia de saída é uma estratégia que permite obter lucros passo a passo, evitando a perda de lucros maiores.
A saída em lotes permite a recuperação de capital, reduzindo os riscos. Por exemplo, com 25% de tamanho do lote, 1% de lucro pode retornar 1/4 do capital, e posições posteriores são todas por lucros puros.
2% de stop loss evita perdas extremas em movimentos anormais do mercado.
A implementação é simples e limpa, fácil de entender e modificar.
Há também alguns riscos com esta estratégia:
As saídas percentuais podem causar chocidade lateral, com os preços oscilando em torno dos preços de saída, desencadeando saídas frequentes.
As saídas por lotes aumentam o número de negócios e as comissões.
O posicionamento de saída inadequado também pode afetar os retornos.
As saídas de percentagem fixa não têm em conta a volatilidade e as tendências do mercado.
Tendo em conta os riscos acima referidos, poderão ser realizadas melhorias adicionais nos seguintes aspectos:
Otimizar as saídas para se adaptar com base na volatilidade e força do mercado usando métodos como as saídas ATR. Saídas mais apertadas em mercados agitados e saídas mais largas em tendências fortes.
Otimizar percentagens e intervalos de lote para encontrar combinações ideais de risco-retorno. Adicionar otimização de parâmetros para encontrar os melhores parâmetros.
Reduzir o número de saídas para evitar o excesso de negociação.
Considere fatores de comissão, evite saídas em que o lucro projetado seja menor que os custos de comissão.
Usar saídas de carteira de ordens com base na profundidade em vez de mover os preços de saída.
Esta estratégia atinge o efeito de saídas de lucro porcentuais múltiplas, com 4 saídas em 1%, 2%, 3% e 4%, permitindo saídas lucrativas graduais e usando 2% de stop loss para evitar grandes perdas em movimentos extremos. Equilibra riscos e retornos e evita perdas de lucros adicionais. Mas alguns riscos existem, como choppiness e frequências de negociação mais altas. As sugestões de otimização fornecidas podem ajudar a melhorar o desempenho em mais condições de mercado quando incorporadas na estratégia.
/*backtest start: 2023-10-31 00:00:00 end: 2023-11-30 00:00:00 period: 3h basePeriod: 15m 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 //@version=4 strategy("Multiple %% profit exits example", overlay=false, default_qty_value = 10) 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) percentAsPoints(pcnt) => strategy.position_size != 0 ? round(pcnt / 100 * strategy.position_avg_price / syminfo.mintick) : float(na) lossPnt = percentAsPoints(2) strategy.exit("x1", qty_percent = 25, profit = percentAsPoints(1), loss = lossPnt) strategy.exit("x2", qty_percent = 25, profit = percentAsPoints(2), loss = lossPnt) strategy.exit("x3", qty_percent = 25, profit = percentAsPoints(3), loss = lossPnt) strategy.exit("x4", profit = percentAsPoints(4), loss = lossPnt) profitPercent(price) => posSign = strategy.position_size > 0 ? 1 : strategy.position_size < 0 ? -1 : 0 (price - strategy.position_avg_price) / strategy.position_avg_price * posSign * 100 p1 = plot(profitPercent(high), style=plot.style_linebr, title = "open profit % upper bound") p2 = plot(profitPercent(low), style=plot.style_linebr, title = "open profit % lower bound") fill(p1, p2, color = color.red)