O valor da posição em risco deve ser calculado em função do valor da posição em risco.

Autora:ChaoZhang, Data: 2024-02-05 16:00:35
Tags:

img

Resumo

A estratégia Trend Following Stop Loss é uma estratégia de negociação de stop loss baseada no indicador TrendAlert. Determina a direção da tendência através do indicador TrendAlert para implementar a entrada de rastreamento de tendência. Ao mesmo tempo, usa o indicador ATR para definir o stop loss para controlar riscos.

Estratégia lógica

A estratégia consiste nas seguintes partes principais:

  1. O indicador TrendAlert avalia a direção da tendência. Quando o TrendAlert é maior que 0, é um sinal de alta. Quando é menor que 0, é um sinal de baixa.

  2. O indicador ATR calcula a faixa de flutuação recente dos preços.

  3. O parâmetro de estrutura controla se ele está habilitado.

  4. Entre em posições longas ou curtas de acordo com a direção do sinal de tendência.

  5. Fechar posições quando o preço desencadear uma perda ou um lucro.

A estratégia filtra sinais falsos através do julgamento da tendência, controla os riscos através do rastreamento de stop loss, garante a rentabilidade através do take profit e melhora a estabilidade do sistema de negociação.

Análise das vantagens

As principais vantagens desta estratégia são:

  1. A dupla garantia de filtragem de tendências e de acompanhamento de stop loss evita a perseguição do ruído do mercado e garante riscos comerciais controlados.

  2. A configuração de stop loss adaptativa ATR impede a otimização excessiva e é adequada para vários ambientes de mercado.

  3. O lucro assegura a rentabilidade e impede que os lucros sejam consumidos.

  4. A lógica da estratégia é clara e concisa, fácil de compreender e modificar, adequada para o desenvolvimento secundário dos traders quantitativos.

  5. Escrito em linguagem Pine Script, pode ser usado diretamente na plataforma TradingView sem habilidades de programação.

Análise de riscos

Esta estratégia apresenta também alguns riscos:

  1. O julgamento incorreto da tendência pode causar entrada desnecessária e gatilho de stop loss.

  2. Quando o mercado flutua violentamente, o ATR pode subestimar a verdadeira amplitude.

  3. A meta de lucro pode limitar o espaço de lucro da estratégia. Ajustar o parâmetro limitMultiplier de acordo com mercado.

  4. A lógica existente baseada apenas no preço deve ser combinada com a gestão do tempo.

Orientações de otimização

A estratégia pode ser otimizada nos seguintes aspectos:

  1. Otimizar os parâmetros ATR comprimento atrLength e multiplicador de stop loss atrStopMultiplier para ajustar a sensibilidade do algoritmo de stop loss.

  2. Tente diferentes indicadores de tendência para encontrar melhores oportunidades de entrada.

  3. Selecionar ou ajustar o parâmetro de lucro-alvo de acordo com as características de variedades específicas de negociação.

  4. Aumentar o mecanismo de stop loss de tempo para evitar riscos do dia para a noite.

  5. Filtrar falsas rupturas combinando indicadores de volume de negociação para melhorar a estabilidade da estratégia.

Conclusão

Em geral, esta é uma estratégia de rastreamento de tendências muito prática. Ele usa indicadores para determinar a direção da tendência para alcançar o rastreamento de tendências, enquanto define paradas adaptativas para garantir o controle de riscos. A lógica da estratégia é clara e fácil de usar, tornando-a ideal para iniciantes aprenderem. Ao mesmo tempo, também fornece uma boa estrutura de estratégia de negociação para o desenvolvimento de estratégias avançadas, o que vale a pena para os traders quantitativos pesquisa e otimização aprofundadas.


/*backtest
start: 2023-01-29 00:00:00
end: 2024-02-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © jaque_verdatre

//@version=5
strategy("TrendAlert Based", overlay = true)

// Get inputs
TrendAlert = input.source(close, "TrendAlert")
atrLength = input.int(title="ATR Length", defval=15, minval=1)
useStructure = input.bool(title="Use Structure?", defval=true)
lookback = input.int(title="How Far To Look Back For High/Lows", defval=8, minval=1)
atrStopMultiplier = input.float(title="ATR Multiplier", defval=0.2, minval=0.1)
LimitMultiplier = input.float(title = "Limit Multiplier", defval = 0.5, minval = 0.1)
PineConnectorID = input.int(title = "Pine Connector ID",defval = 0)
CurrencyToSend = input.string(title = "personilized currency", defval = "ETHUSD")
Risk = input.int(title = "risk in % to send", defval = 10, minval = 1)

// Calculate data
atr = ta.atr(atrLength)
lowestLow = ta.lowest(low, lookback)
highestHigh = ta.highest(high, lookback)
longStop = (useStructure ? lowestLow : close) - atr * atrStopMultiplier
shortStop = (useStructure ? highestHigh : close) + atr * atrStopMultiplier

// Draw data to chart
plot(atr, color=color.rgb(33, 149, 243), title="ATR", display = display.none)
plot(longStop, color=color.green, title="Long Trailing Stop")
plot(shortStop, color=color.red, title="Short Trailing Stop")

var float LimitL = na
var float LimitS = na
var float LPosPrice = na
var float SPosPrice = na
var float LPosLongStop = na
var float SPosShortStop = na

KnowLimit (PosPrice, PosStop) =>
    (PosPrice-PosStop)*LimitMultiplier+PosPrice


NotInTrade = strategy.position_size == 0
InLongTrade = strategy.position_size > 0
InShortTrade = strategy.position_size < 0

longCondition = TrendAlert > 0 and NotInTrade
if (longCondition)
    LPosPrice := close
    LPosLongStop := longStop
    LimitL := KnowLimit(LPosPrice, LPosLongStop)
    strategy.entry("long", strategy.long)
    LTPPip = LimitL-LPosPrice
    LSLPip = LPosPrice-longStop
    alert(str.tostring(PineConnectorID)+',buy,'+str.tostring(CurrencyToSend)+',risk='+str.tostring(Risk)+',sl='+str.tostring(LSLPip)+'tp='+str.tostring(LTPPip), alert.freq_once_per_bar_close)
    strategy.exit("exit", "long", stop = longStop, limit = LimitL)

shortCondition = TrendAlert < 0 and NotInTrade
if (shortCondition)
    SPosPrice := close
    SPosShortStop := shortStop
    LimitS := KnowLimit(SPosPrice, SPosShortStop)
    strategy.entry("short", strategy.short)
    STPPip = SPosPrice-LimitS
    SSLPip = shortStop - SPosPrice
    alert(str.tostring(PineConnectorID)+',sell,ETHUSD,risk=10,sl='+str.tostring(SSLPip)+'tp='+str.tostring(STPPip), alert.freq_once_per_bar_close)
    strategy.exit("exit", "short", stop = shortStop, limit = LimitS)

plotshape(longCondition, color = color.green, style = shape.labelup, location = location.belowbar, size = size.normal, title = "Long Condition")
plotshape(shortCondition, color = color.red, style = shape.labeldown, location = location.abovebar, size = size.normal, title = "Short Condition")

if (InShortTrade)
    LimitL := close
    LPosLongStop := close
    LPosPrice := close

PlotLongTakeProfit = plot(LimitL, color = InLongTrade ? color.rgb(0, 255, 64) : color.rgb(120, 123, 134, 100), title = "Long Take Profit")
PlotLongStopLoss = plot(LPosLongStop, color = InLongTrade ? color.rgb(255, 0, 0) : color.rgb(120, 123, 134, 100), title = "Long Stop Loss")
PlotLongPosPrice = plot(LPosPrice, color = InLongTrade ? color.gray : color.rgb(120, 123, 134, 100), title = "Long Position Price")

if (InLongTrade)
    LimitS := close
    SPosShortStop := close
    SPosPrice := close

PlotShortTakeProfit = plot(LimitS, color = InShortTrade ? color.rgb(0, 255, 64) : color.rgb(120, 123, 134, 100), title = "Short Take Profit")
PlotShortStopLoss = plot(SPosShortStop, color = InShortTrade ? color.rgb(255, 0, 0) : color.rgb(120, 123, 134, 100), title = "Short Stop Loss")
PlotShortPosPrice = plot(SPosPrice, color = InShortTrade ? color.gray : color.rgb(120, 123, 134, 100), title = "Short Position Price")

fill(PlotLongPosPrice, PlotLongTakeProfit, color = InLongTrade ? color.rgb(0, 255, 0, 95) : color.rgb(0, 255, 0, 100))
fill(PlotShortPosPrice, PlotShortTakeProfit, color = InShortTrade ? color.rgb(0, 255, 0, 95) : color.rgb(0, 255, 0, 100))

fill(PlotLongPosPrice, PlotLongStopLoss, color = InLongTrade ? color.rgb(255, 0, 0, 95) : color.rgb(255, 0, 0, 100))
fill(PlotShortPosPrice, PlotShortStopLoss, color = InShortTrade ? color.rgb(255, 0, 0, 95) : color.rgb(255, 0, 0, 100))

Mais.