Estratégia de rastreamento de caixa de porcentagem dinâmica


Data de criação: 2023-11-23 10:32:39 última modificação: 2023-11-23 10:32:39
cópia: 1 Cliques: 605
1
focar em
1617
Seguidores

Estratégia de rastreamento de caixa de porcentagem dinâmica

Visão geral

Esta estratégia usa a variação percentual do preço para definir a linha de compra e a linha de parada, para construir uma posição de acordo com a quebra da linha de compra e para parar abaixo da linha de parada. Sua principal característica é assumir apenas uma unidade de risco, ou seja, apenas quando uma posição anterior atinge o objetivo de lucro predeterminado.

Princípio da estratégia

A estratégia começa com um preço de referência, com 10% desse preço como um intervalo de preço, com a borda superior como uma linha de compra e a borda inferior como uma linha de parada. Quando o preço quebra a linha de compra, compra em quantidade fixa.

Outro ponto-chave da estratégia é assumir apenas uma unidade de risco. Ou seja, apenas quando a posição atual atinge o objetivo de lucro, é colocada uma nova posição. As novas posições também são configuradas de acordo com a nova linha de compra e de parada. Isso limita o risco.

Análise de vantagens

Esta estratégia combina os benefícios do rastreamento de perdas e do gerenciamento de depósitos, permitindo um controle eficaz do risco e simultaneamente um lucro.

  1. A utilização de percentual de intervalos para definir a linha de compra e de parada de perda, pode ser executado automaticamente para acompanhar a tendência
  2. Controlar o risco para os dígitos, limitar os prejuízos
  3. “Apostei só quando ganhei, para não cair”
  4. A linha de stop-loss é transferida após o lucro, bloqueando o lucro.

Análise de Riscos

A estratégia também apresenta alguns riscos:

  1. A diferença de porcentagem é muito grande, a linha de compra e a linha de parada estão muito distantes, aumentando o risco
  2. A percentagem de diferença é muito pequena, a linha de compra e a linha de parada estão muito próximas, o espaço de lucro é limitado
  3. A configuração errada da vantagem de suspensão pode acabar prematuramente
  4. Ações excessivas podem aumentar os prejuízos

Esses riscos podem ser evitados por meio de ajustes de parâmetros, como ajustes no tamanho do intervalo percentual, ajustes nas condições de acréscimo, etc.

Direção de otimização

A estratégia ainda tem espaço para ser melhorada:

  1. O banco pode estabelecer uma posição depois de determinar a direção da tendência em combinação com indicadores de tendência.
  2. Modelos de aprendizado de máquina podem ser adicionados para tornar a linha de entrada e a linha de parada mais inteligentes
  3. Pode-se configurar diferentes condições de acréscimo para reduzir ainda mais o risco
  4. Pode testar diferentes períodos de detenção para encontrar o melhor período de detenção

Resumir

Trata-se de uma estratégia de negociação com percentual. É simples, prático e controla o risco de forma eficaz. Através de ajustes de parâmetros e otimização de modelos, a estratégia pode ser um sistema de rastreamento de tendências confiável, criando excedentes estáveis para os investidores.

Código-fonte da estratégia
/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © HermanBrummer 4 April 2021

strategy ("The Box Percent Strat", shorttitle="The Box", overlay = true)

///     Designed for LONG only on Daily, 2D or 3D Charts
///     Uses fixed investment risk amount, meaning you're willing to lose that amount per trade
///     Limit buy to not overpay

RiskPerTrade            = input(10000, "Risk losing this much per trade", tooltip="This calculates how much you will lose based on difference between the entry price and stop loss price")
TradeAboveMAFilterPer   = input(50, "The System won't trade if price is below this MA")

UpBoxSize               = (input(10, "Box size in %") * 0.01)+1 // 1.1 == 10% up
DnBoxSize               = 1-(input(10, "Box size in %") * 0.01) // 0.9 == 10% dn


var FirstBar            = close > 0 ? close : na
var FirstTop            = FirstBar * UpBoxSize
var FirstBot            = FirstBar * DnBoxSize


var top                 = sma(FirstTop, 1)
var bot                 = sma(FirstBot, 1)

///     The Box Calcs
if  high[2] > top
    top                 := top * UpBoxSize
    bot                 := bot * UpBoxSize
if  low[1]  < bot
    top                 := top * DnBoxSize
    bot                 := bot * DnBoxSize

 
plot(bot,   "Bot",      #ff0000) // Green
plot(top,   "Top",      #00ff00) // Red

mid                     = ((top-bot)/2)+bot 
plot(mid,   "Mid", color.gray)

TradeAboveMAFilter      = sma(close, TradeAboveMAFilterPer)
plot(TradeAboveMAFilter, "Trade AboveMAF Filter", color.yellow, 3, style=plot.style_circles)

// col = high[1] < top and high >= top ? color.white : na
// bgcolor(col)


///     Shares
RiskRange                   = close * abs(DnBoxSize - 1) // 0.9 - 1 == 1.10 // 10% abs so you don't get a neg number NB NB
Shares                      = RiskPerTrade / RiskRange 
//plot(close-RiskRange, "RiskRange", color.fuchsia)

Enter   =   high >= top
             and close[1] > TradeAboveMAFilter
             and strategy.opentrades[0] == strategy.opentrades[1]
             and strategy.opentrades[1] == strategy.opentrades[2] 
             and strategy.opentrades[2] == strategy.opentrades[3]
             and strategy.opentrades[3] == strategy.opentrades[4] 
             and strategy.opentrades[4] == strategy.opentrades[5]
             and strategy.opentrades[5] == strategy.opentrades[6]
             // won't enter if new positon was taken in the last 6 bars
             // need better code for this.

///     Buy & Sell
//  (new highs)    and  (Close above moving average filter) and (No new trades were taken receently)
if  Enter //(high >= top)  and  (close[1] > TradeAboveMAFilter) and strategy.opentrades[0] == strategy.opentrades[1] 
    strategy.order("En", strategy.long, qty=Shares, limit=top)//, stop=top)
    
//barcolor(strategy.position_size != 0 ? #00ff00 : color.gray)


// ///     If ONE Position THEN this Stop Because: 
// if  strategy.position_size == 1
//     strategy.exit("Ex", "En", stop=bot)
///     If it has more than one trad OPEN
if  strategy.position_size > 0
    strategy.exit("Ex", "En", stop=bot[2] )   // puts stop on old bot

//plot(strategy.position_avg_price, "Avg Price", color.yellow)