Estratégia de indicador longo e curto


Data de criação: 2023-09-25 17:34:46 última modificação: 2023-09-25 17:34:46
cópia: 5 Cliques: 909
1
focar em
1617
Seguidores

Visão geral

A ideia central desta estratégia é combinar o indicador multi-espaço com a média móvel básica, para realizar o acompanhamento de tendências e a negociação de reversão de tendências. Quando o preço e o indicador estão em sintonia, o acompanhamento de tendências é adotado; Quando o preço e o indicador estão em desacordo, a negociação de reversão é adotada.

Princípio da estratégia

A estratégia é baseada em três indicadores personalizados:

  1. Indicador de tendência: calcula a relação entre o preço e o canal de superaquecimento e superaquecimento, julga a tendência de tendência e a tendência de retorno, retorna 1, 0, -1, três estados.

  2. Canal de sobrecompra e sobrevenda ((Tsl): o ATR é calculado em cima e abaixo do trajeto, e o preço que quebra o trajeto superior é considerado como uma sobrecompra, e o quebra o trajeto inferior é considerado como uma sobrevenda.

  3. Média Móvel Básica ((MA): Média Móvel Simples calculada com um preço de fechamento de 20 ciclos.

Concretamente, a estratégia baseia-se no valor do indicador de pluralidade para determinar se o preço está em um estado de alta, baixa ou baixa. Quando o indicador de pluralidade é 1, o indicador está em um estado de alta; Quando o indicador de pluralidade é -1, o indicador está em um estado de baixa.

Além disso, o preço quebra a média móvel também serve como sinal auxiliar para orientar a direção da negociação. O preço sobe quando atravessa a média e desce quando atravessa a média.

A estratégia de negociação de múltiplos pontos é a seguinte:

  1. Indicador de volume excessivo > 0, a subida dos preços quebrou o caminho, pertence a uma situação de acompanhamento de tendência, faça mais.

  2. Indicador de volume de vazio < 0, queda de preço, quebra de trilho, que pertence a uma reversão de tendência, vazio.

  3. O preço de fechamento > preço de abertura > ponto central, visto como uma oportunidade de fazer mais para romper o centro, fazer mais.

  4. O preço de fechamento quebrou o trilho e o preço de fechamento foi > a média móvel, fazendo mais.

A estratégia de negociação em branco é a seguinte:

  1. Indicador de volume < 0, queda de preço, quebra de trilho, pertence a um caso de seguimento de tendência, fechar espaço.

  2. Indicador de volume excessivo > 0, aumento de preços quebrou o caminho, pertence a uma reversão de tendência, faça mais.

  3. Preço de abertura > Preço de fechamento < Ponto central, considerado como uma oportunidade de brecha central para fazer shorting, fazer shorting.

  4. O preço de fechamento quebrou a trajetória e o preço de fechamento foi < a média móvel, com a queda.

A estratégia de equilíbrio é mais simples, com o preço de reabsorção do canal de superaquecimento.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. Os indicadores de pluralidade de espaços permitem avaliar com precisão o movimento do mercado e são indicadores centrais da estratégia.

  2. O canal de superacompra e superavenda, combinado com o indicador, pode revelar potenciais oportunidades de reversão.

  3. A média móvel básica pode ser usada como um filtro auxiliar para evitar falsas rupturas.

  4. Os pontos centrais são combinados com os indicadores de polinomios para formar pontos de negociação de alta probabilidade.

  5. Com a capacidade de acompanhamento de tendências e inversão de negociação, há mais oportunidades de lucro.

  6. O canal de compra e venda é limpo e simples, o que facilita o controle de risco.

Análise de Riscos

A estratégia também apresenta os seguintes riscos:

  1. O indicador de hiperespaço pode emitir um sinal falso e precisa ser filtrado com outros indicadores.

  2. A ruptura é fácil de ser apanhada e requer um rigoroso stop loss.

  3. A média móvel não é configurada corretamente e pode perder uma tendência ou gerar um falso sinal.

  4. Os pontos centrais necessitam de testes de retorno para verificar a confiabilidade da probabilidade.

  5. Os canais de supercompra e supervenda necessitam de parâmetros de otimização para adaptar-se a diferentes variedades.

  6. Os parâmetros do indicador não coincidem, o que pode levar a transações frequentes.

Para combater esses riscos, as seguintes medidas podem ser tomadas:

  1. Em combinação com outros indicadores, como linha K, verificação de volume de transação e sinal de indicador de polinômio.

  2. A estratégia de stop loss do canal de compra e venda de mais do que o esperado, que é o stop loss mais rápido, deve ser rigorosamente seguida.

  3. Teste diferentes parâmetros de média móvel para encontrar o melhor.

  4. A probabilidade de uma estratégia de ponto-chave de verificação de retrospectiva.

  5. Optimizar os parâmetros de canal para encontrar a melhor combinação de parâmetros para cada variedade.

  6. Ajustar os parâmetros do indicador para manter o sistema estável.

Direção de otimização

A estratégia também pode ser melhorada nos seguintes aspectos:

  1. A adição de algoritmos de aprendizagem de máquina, que utilizam dados grandes para treinar os indicadores de polinomial. Pode aumentar a precisão do indicador e reduzir os sinais errados.

  2. Adição de corredores de adaptação, ajustando automaticamente os parâmetros de corredores de acordo com a volatilidade do mercado. Pode aumentar a precisão da ruptura.

  3. Usando a aprendizagem profunda para extrair mais indicadores de mudança, compondo um conjunto de indicadores para otimizar as estratégias de entrada e saída.

  4. A adição de algoritmos avançados de stop loss para rastrear o stop loss da tendência e evitar a reversão do stop loss.

  5. Otimizar parâmetros e testes de combinação para melhorar a estabilidade da estratégia geral.

  6. Adição de módulos de gestão de fundos para tornar o controle de risco mais científico.

Resumir

Esta estratégia permite a combinação orgânica de acompanhamento de tendências e reversão de tendências através da determinação da estrutura do mercado por meio de indicadores de múltiplos espaços, bem como canais e geração de sinais de negociação por meio de médias móveis. Tem os benefícios de uma boa eficácia do indicador, uma abundância de oportunidades de negociação e um claro stop loss. Ao mesmo tempo, há alguns riscos que precisam ser melhorados para melhorar a estabilidade.

Código-fonte da estratégia
/*backtest
start: 2023-08-25 00:00:00
end: 2023-09-24 00:00:00
period: 2h
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/
// © amysojexson

//@version=3
strategy(title="Pivots strategy", overlay=true)

// Input settings
// Create a pull-down menu for the pivot type
pivotType = input(title="Pivot Type",
     options=["Daily", "Intraday", "Weekly"], defval="Daily")

// Make toggles for pivot level options
plotPP   = input(title="Plot PP", type=bool, defval=true)
plotS1R1 = input(title="Plot S1 and R1", type=bool, defval=true)
plotS2R2 = input(title="Plot S2 and R2", type=bool, defval=true)
plotS3R3 = input(title="Plot S3 and R3", type=bool, defval=true)
plotTCBC = input(title="Plot S3 and R3", type=bool, defval=true)
// Configure session options
sessRange = input(title="Trading Session",  defval="0800-1600")
showSess  = input(title="Highlight Session?", type=bool, defval=false)

// Enable or disable pivot labels
showLabels = input(title="Show Labels?", type=bool, defval=false)

// Step 2. Calculate indicator values
// Create a function to fetch daily and weekly data
GetData(res, data) =>
    security(syminfo.tickerid, res, data[1],
         lookahead=barmerge.lookahead_on)

// Fetch daily and weekly price data
dailyHigh  = GetData("D", high)
dailyLow   = GetData("D", low)
dailyClose = GetData("D", close)

weeklyHigh  = GetData("W", high)
weeklyLow   = GetData("W", low)
weeklyClose = GetData("W", close)

// Determine session pivot data
// First see how the price bar relates to
// the session time range
inSession = not na(time(timeframe.period, sessRange)[1])
sessStart = inSession and not inSession[1]
sessEnd   = not inSession and inSession[1]

// Determine session price data
sessHigh  = 0.0
sessLow   = 0.0
sessClose = 0.0

sessHigh := sessStart ? high :
     inSession ? max(high, sessHigh[1]) : na
sessLow := sessStart ? low :
     inSession ? min(low, sessLow[1]) : na
sessClose := sessEnd ? close[1] : na

// Compute high, low, close from previous intra-day session
highPrevSess  = 0.0
lowPrevSess   = 0.0
closePrevSess = 0.0

highPrevSess  := sessEnd ? fixnan(sessHigh) : highPrevSess[1]
lowPrevSess   := sessEnd ? fixnan(sessLow) : lowPrevSess[1]
closePrevSess := sessEnd ? fixnan(sessClose) : closePrevSess[1]

// Now figure out which kind of price data
// to use for the pivot calculation
theHigh = if (pivotType == "Daily")
    dailyHigh
else
    if (pivotType == "Intraday")
        highPrevSess
    else
        weeklyHigh

theLow = if (pivotType == "Daily")
    dailyLow
else
    if (pivotType == "Intraday")
        lowPrevSess
    else
        weeklyLow

theClose = if (pivotType == "Daily")
    dailyClose
else
    if (pivotType == "Intraday")
        closePrevSess
    else
        weeklyClose

// Finally calculate the pivot levels
pp = (theHigh + theLow + theClose) / 3
bc= (theHigh + theLow)/2
tc= (pp-bc)+pp

r1 = pp+(.382*(theHigh-theLow))
s1 = pp-(.382*(theHigh-theLow))
r2 = pp +(.618*(theHigh-theLow))
s2 = pp -(.618*(theHigh-theLow))
r3 = pp +(1*(theHigh-theLow))
s3 = pp -(1*(theHigh-theLow))

// Step 3. Output indicator data
// Plot the various pivot levels
plot(series=plotS3R3 ? r3 : na, title="R3",
     style=circles, linewidth=1, color=#0023FF)
plot(series=plotS2R2 ? r2 : na, title="R2",
     style=circles, linewidth=1, color=#1E90FF)
plot(series=plotS1R1 ? r1 : na, title="R1",
     style=circles, linewidth=1, color=#09E0F3)

plot(series=plotTCBC ? tc : na, title="TC",
     style=circles, linewidth=.75, color=#FF00D1)
plot(series=plotPP ? pp : na, title="PP",
     style=circles, linewidth=1, color=#000000)
plot(series=plotTCBC ? bc : na, title="BC",
     style=circles, linewidth=.75, color=#FF00D1)

plot(series=plotS1R1 ? s1 : na, title="S1",
     style=circles, linewidth=1, color=#09E0F3)
plot(series=plotS2R2 ? s2 : na, title="S2",
     style=circles, linewidth=1, color=#1E90FF)
plot(series=plotS3R3 ? s3 : na, title="S3",
     style=circles, linewidth=1, color=#0023FF)

// Display the pivot names on the chart, if applicable
newPivots = (showLabels == false) ? false :
     (pivotType == "Intraday") ? sessEnd :
     (pivotType == "Daily") ? dayofmonth != dayofmonth[1] :
     dayofweek == monday and dayofmonth != dayofmonth[1]

plotchar(series=newPivots and plotS3R3 ? r3 : na,
     char='', text="R3", offset=1,
     location=location.absolute,
     color=#0023FF, title="R3 label")

plotchar(series=newPivots and plotS2R2 ? r2 : na,
     char='', text="R2", offset=1,
     location=location.absolute,
     color=#1E90FF, title="R2 label")

plotchar(series=newPivots and plotS1R1 ? r1 : na,
     char='', text="R1", offset=1,
     location=location.absolute,
     color=#09E0F3, title="R1 label")

plotchar(series=newPivots and plotTCBC ? r1 : na,
     char='', text="TC", offset=1,
     location=location.absolute,
     color=#FF00D1, title="TC label")
     
plotchar(series=newPivots and plotTCBC ? r1 : na,
     char='', text="BC", offset=1,
     location=location.absolute,
     color=#FF00D1, title="BC label")

plotchar(series=newPivots and plotS1R1 ? s1 : na,
     char='', text="S1", offset=1,
     location=location.absolute,
     color=#09E0F3, title="S1 label")

plotchar(series=newPivots and plotS2R2 ? s2 : na,
     char='', text="S2", offset=1,
     location=location.absolute,
     color=#1E90FF, title="S2 label")

plotchar(series=newPivots and plotS3R3 ? s3 : na,
     char='', text="S3", offset=1,
     location=location.absolute,
     color=#0023FF, title="S3 label")

// Highlight the intra-day price data session on the chart
bgcolor(color=showSess and inSession and (pivotType == "Intraday") ?
     orange : na, transp=95)

// Step 4. Create indicator alerts
alertcondition(condition=cross(close, s3),
     title="Pivot S3 Cross",
     message="Prices crossed Pivot S3 level")

alertcondition(condition=cross(close, s2),
     title="Pivot S2 Cross",
     message="Prices crossed Pivot S2 level")

alertcondition(condition=cross(close, s1),
     title="Pivot S1 Cross",
     message="Prices crossed Pivot S1 level")
     
alertcondition(condition=cross(close, tc),
     title="Pivot TC Cross",
     message="Prices crossed Pivot TC level")

alertcondition(condition=cross(close, pp),
     title="Pivot PP Cross",
     message="Prices crossed the main Pivot Point level")
     
alertcondition(condition=cross(close, bc),
     title="Pivot BC Cross",
     message="Prices crossed Pivot BC level")

alertcondition(condition=cross(close, r1),
     title="Pivot R1 Cross",
     message="Prices crossed Pivot R1 level")

alertcondition(condition=cross(close, r2),
     title="Pivot R2 Cross",
     message="Prices crossed Pivot R2 level")

alertcondition(condition=cross(close, r3),
     title="Pivot R3 Cross",
     message="Prices crossed Pivot R3 level")
    
MA = sma(close, 20)
plot(MA, color=red)

Factor				= input(2, type=float)
Pd					= input(10, minval=1,maxval = 100)
Up					= hl2-(Factor*atr(Pd))
Dn					= hl2+(Factor*atr(Pd))
TrendUp				= 0.0
TrendUp				:= close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown			= 0.0
TrendDown			:= close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn
Trend				= 0.0
Trend 				:= close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
Tsl 				= Trend==1? TrendUp: TrendDown

plot(Tsl, color=blue)

if close>open
    if open<pp
        if close>pp
            if close>MA
                strategy.entry("long", true) 
if close<open
    if open>pp
        if close<pp
            if close<MA
                strategy.entry("short", false) 
                
strategy.close("long", when = open<Tsl)
strategy.close("short", when = open>Tsl)