Kaique Mitsuo Silva Yamamoto
Mercado financeiroAutomação de EstratégiasTradingView / Pine ScriptBibliotecasUtilitários

Strategy (utilities)

Biblioteca Pine Script com funções utilitárias para estratégias: conversões entre ticks, preço e percentual, cálculo de Sharpe Ratio e Sortino Ratio.

Tipo: Biblioteca (library) Categoria: Utilitários Fonte: TradingView Script


Visão geral

Strategy (utilities) é uma coleção de funções matemáticas auxiliares para construção de estratégias Pine Script. O foco são conversões (entre representações de preço) e métricas de risco (Sharpe, Sortino).


Funções de conversão

Ticks ↔ Preço ↔ Percentual

Tick: menor unidade de variação de preço do instrumento
      (ex: ES futures = 0.25, BTC = 0.01)

Conversões:
  Ticks → Preço:    price = ticks × syminfo.mintick
  Preço → Ticks:    ticks = price / syminfo.mintick
  Preço → %:        pct = (target - entry) / entry × 100
  % → Preço:        price = entry × (1 + pct/100)
  Ticks → %:        pct = (ticks × syminfo.mintick) / entry × 100

API / Funções

FunçãoParâmetrosRetornoDescrição
ticksToPrice()ticksfloatConverte ticks para unidades de preço
priceToTicks()pricefloatConverte preço para ticks
priceToPct()entry, targetfloatRetorno em percentual
pctToPrice()entry, pctfloatPreço alvo a partir de percentual
ticksToPct()entry, ticksfloatTicks para percentual
sharpe()returns[], riskFree, periodsfloatSharpe Ratio anualizado
sortino()returns[], riskFree, periodsfloatSortino Ratio anualizado

Exemplo de uso

//@version=6
strategy("Strategy Utils — Exemplo", overlay=true)

import author/StrategyUtils/1 as su

atr = ta.atr(14)

// Converter ATR em ticks e percentual
atrTicks = su.priceToTicks(atr)
atrPct   = su.priceToPct(close, close + atr)

// TP e SL em percentual, convertidos para preço
tpPct = 2.0  // 2% de lucro
slPct = 1.0  // 1% de risco

tpPrice = su.pctToPrice(close, tpPct)
slPrice = su.pctToPrice(close, -slPct)

longSignal = ta.crossover(ta.ema(close, 10), ta.ema(close, 30))

if longSignal
    strategy.entry("Long", strategy.long)
    strategy.exit("Saída", "Long",
        limit = tpPrice,
        stop  = slPrice,
        comment = "TP: " + str.tostring(tpPct) + "% | SL: " + str.tostring(slPct) + "%")

// Calcular Sharpe ao final
if barstate.islastconfirmedhistory
    returns = strategy.equity / strategy.equity[1] - 1  // retornos diários
    // Usando array de retornos
    sharpeRatio = su.sharpe(na, 0.0, 252)  // anualizado para diário
    label.new(bar_index, high, "Sharpe: " + str.tostring(sharpeRatio, "##.##"))

Fórmulas de Sharpe e Sortino

Sharpe Ratio anualizado

Sharpe = (Média dos retornos − Rf) / Desvio padrão × √N

Onde:
  Rf = taxa livre de risco (normalmente 0 para curto prazo)
  N  = períodos por ano (252 para diário, 12 para mensal, 52 para semanal)

Sortino Ratio anualizado

Sortino = (Média dos retornos − Rf) / Desvio downside × √N

Desvio downside = desvio padrão apenas dos retornos < threshold (geralmente 0)

Vantagem: não penaliza ganhos positivos como o Sharpe faz

Integrações

ScriptComo combinar
LapseBacktestingTableAlimentar Sharpe/Sortino calculados aqui na tabela visual
BackTestLibUsar conversões para TP/SL padronizados
LevelsManagerDefinir TPs em % usando pctToPrice()

Limitações

LimitaçãoImpacto
Sharpe/Sortino precisam de array de retornosNecessário manter histórico de retornos manualmente
Anualização assume períodos regularesNão ajusta para gaps de fim de semana/feriados

Aviso Legal: Conteúdo educativo. Não constitui recomendação de investimento. Resultados passados não garantem resultados futuros.

On this page