Propriedades das estratégias

Cada estratégia do pinheiro tem uma série de propriedades que determinam seu comportamento:

  1. Capital inicial
  2. Moeda de base
  3. Tamanho da ordem
  4. Pirâmide
  5. Comissão
  6. Verificar o preço para ordens limites
  7. Derrapagem
  8. Margem
  9. Recalcule

Eles estão disponíveis nas configurações de estratégia, na aba Propriedades:

Cada um dos parâmetros especificados nas propriedades da estratégia pode ser alterado através da edição dos argumentos da função strategy() na chamada de função no Pine script correspondente:

strategy(title, initial_capital, currency, default_qty_value, default_qty_type, pyramiding, commission_type, commission_value, backtest_fill_limits_assumption, slippage, process_orders_on_close, margin_long, margin_short, calc_on_order_fills, calc_on_every_tick)

Vamos dar uma olhada em cada parâmetro de entrada no menu Propriedades e seu parâmetro correspondente na linguagem Pine:

1 - Capital inicial (parâmetro: initial_capital) representa a quantidade de fundos inicialmente disponíveis para a estratégia de negociação, na moeda definida na Moeda de Base. Por padrão, este valor é igual a 100.000. Talvez seja necessário aumentar este valor para que as negociações ocorram em determinados símbolos.

2 - Moeda de base (parâmetro: moeda) especifica a moeda utilizada para os cálculos. Os resultados que aparecem na aba Testador de Estratégia (lucro, perda, drawdown, etc.) são expressos nesta moeda. As opções disponíveis são:

Default, USD, EUR, AUD, GBP, NZD, CAD, CHF, HKD, JPY, NOK, SEK, SGD, TRY, ZAR. Se a opção padrão for selecionada, a estratégia usará a moeda padrão para este símbolo e não haverá conversão de moeda.

3 - Tamanho da ordem (parâmetros: default_qty_value, default_qty_type). Isto requer um valor e um modo de cálculo. Note que os valores calculados podem estar sujeitos a restrições devido às quantidades mínimas negociáveis para o símbolo:

  • Contratos (argumento: strategy.fixed) - a estratégia entrará com o número especificado de contratos/ações/ lotes.
  • Valor em moeda (argumento: strategy.cash) - a estratégia entrará com o valor especificado na moeda de base.
  • Porcentagem do capital (argumento: strategy.percent_of_equity) - o tamanho das posições será calculado como uma porcentagem do capital disponível quando a negociação for aberta.

4 - Pirâmide (parâmetro: pyramiding) especifica o número máximo de entradas sucessivas permitidas na mesma direção. Quando a pirâmide é desativada, a estratégia só pode abrir uma posição longa ou curta, mesmo que as condições de entrada sejam cumpridas. A pirâmide só afeta as entradas feitas usando a função strategy.entry(). Não tem efeito sobre as ordens criadas usando strategy.order().

5 - Comissão (parâmetros: commission_type), commission_value). É o valor pago em taxas de negociação para cada negociação. Deve ser fornecido um valor e um modo de cálculo. Note que a comissão é aplicada tanto nas entradas quanto nas saídas, e que quando uma porcentagem é usada, a comissão calculada irá variar de acordo com o valor da transação:

  • Porcentagem do valor transacionado (argumento: strategy.commission.percent) - impõe uma comissão sobre cada ordem igual à porcentagem especificada.
  • Moeda por contrato (argumento: strategy.commission.cash_per_contract) - impõe uma comissão sobre cada contrato.
  • Moeda por ordem (argumento: strategy.commission.cash_per_order) - impõe uma comissão sobre cada ordem.

6 - Verificar o preço para ordens limites (parâmetro: backtest_fill_limits_assumption) torna as condições de entrada em uma posição utilizando ordens limite mais rigorosas. Por padrão, este valor é 0, ou seja, as ordens limitadas são preenchidas com dados do histórico assim que o preço indicado na ordem é atingido. Se o parâmetro não for zero, então as ordens limite podem entrar numa posição dentro da barra somente se o preço de mercado tiver excedido o nível da ordem limite pelo número especificado de ticks.

7 - Derrapagem (parâmetro: slippage) especifica o valor em ticks a ser adicionado ao preço de atendimento das ordens de mercado ou stop. Ele pode ser usado para contabilizar o spread.

8 - Margem para posições Long/Short (parâmetros: margin_long, margin_short) especifica a margem para cada negociação, ou seja, a porcentagem da posição que o trader deve cobrir. Por exemplo, se a Margem para posições Long for fixada em 25%, o trader tem que ter fundos suficientes para cobrir 25% da negociação aberta e pode potencialmente gastar até 400% de seu patrimônio em cada negociação.

Se uma negociação foi aberta e começa a perder dinheiro na medida em que os fundos do trader não são suficientes para cobrir sua parte da negociação, ocorre uma chamada de Margem e liquida-se à força uma parte da posição original. O número preciso de unidades que serão liquidadas é 4 vezes a quantia necessária para simplesmente cobrir o loss. Ele é calculado através do seguinte algoritmo:

1. Calcular o dinheiro gasto, a quantidade de dinheiro que o trader gastou ao abrir a posição.

Tamanho da posição * Preço de entrada


2. Calcular o Valor de Mercado dos Títulos (MVS).

Tamanho da posição * Preço atual


3. Calcular o Lucro em Aberto. Se a direção da negociação for short e o Lucro em Aberto for um número positivo, o resultado ainda deve ser negativo, então multiplicamos o valor absoluto de nosso cálculo por -1.

ABS(MVS - Money Spent) * -1


4. Calcule o Patrimônio, ou seja, o dinheiro disponível para o trader no momento atual.

Capital Inicial + Lucro Líquido + Lucro em Aberto


5. Converter a Margem em Porcentagem para a Razão de Margem.

Margem em Porcentagem / 100


6. Calcular a Margem, ou seja, a quantia exata necessária para cobrir sua parte da posição aberta.

MVS * Razão de Margem


7. Calcular os fundos disponíveis, ou seja, a quantidade de dinheiro perdido que o trader não pode cobrir com seu patrimônio líquido atual.

Patrimônio Líquido - Margem


8. Calcule a quantia total de dinheiro que o trader perdeu.

Fundos disponíveis / Razão de Margem


9. Calcule quantas unidades o trader precisaria vender para cobrir o prejuízo. O valor é truncado até o mesmo ponto decimal que o tamanho mínimo do contrato para o símbolo atual.

TRUNCATE(Step #8 / Current Price)


10. Calcule quantas unidades a corretora irá vender para cobrir o prejuízo. Nossa corretora emulada vende 4 vezes mais unidades que as necessárias para garantir que a chamada de margem não seja constantemente acionada se as perdas continuarem. Este valor será positivo para negociações short porque a corretora compra unidades para cobrir o prejuízo em vez de vendê-las.

Step #9 * 4


Para examinar este cálculo em detalhes, vamos adicionar a Estratégia de Super Tendência incorporada ao gráfico NASDAQ:TSLA no tempo gráfico 1D. Definir o tamanho da ordem para 300% do patrimônio líquido e a margem para posições longas para 25%.


Nossa primeira entrada aconteceu na abertura da barra em 16 de setembro de 2010. Compramos 682438 unidades (tamanho da posição) por 4,43 USD (preço de entrada). Então, em 23 de setembro de 2010, quando o preço estava em 3,9 (preço atual), 111052 unidades foram liquidadas à força através da chamada de margem.


1. Dinheiro gasto: 682438 * 4.43 = 3023200.34

2. MVS: 682438 * 3,9 = 2661508,2

3. Lucro em Aberto: −361692.14

4. Patrimônio: 1000000 + 0 - 361692,14 = 638307,86

5. Razão de Margem: 25 / 100 = 0,25

6. Margem: 2661508,2 * 0,25 = 665377,05

7. Fundos disponíveis: 638307.86 - 665377.05 = -27069.19

8. Dinheiro Perdido: -27069,19 / 0,25 = -108276,76

9. Ações para cobrir o prejuízo: TRUNCATE(-108276.76 / 3.9) = TRUNCATE(-27763.27) = -27763

10. Tamanho da Chamada de Margem: -27763 * 4 = - 111052

9 - Opções recalculadas especificam com que frequência a estratégia deve ser recalculada. Por padrão, a estratégia é recalculada no fechamento de cada barra, mas usando as opções abaixo, ela também pode ser recalculada:

  • Após o preenchimento da ordem (parâmetro: calc_on_order_fills) - permite que a estratégia execute um cálculo adicional de ordem intra-bar imediatamente após o preenchimento de uma ordem. Esse cálculo adicional acontece tanto nas barras históricas quanto nas barras em tempo real.
  • Em Cada Tick (parâmetro: calc_on_every_tick). Por padrão, as estratégias só calculam no fechamento das barras em tempo real. Este parâmetro permite que a estratégia calcule em cada atualização das barras em tempo real, como um estudo faria. Note que os dados do tick são perdidos quando o gráfico é atualizado, portanto, as estratégias que utilizam esta opção serão repintadas. Este parâmetro não afeta o comportamento das estratégias em barras históricas. Observe também que as estratégias que utilizam este recurso não mostrarão resultados realistas nas barras históricas, pois elas não contêm dados do tick.