
A estratégia de rastreamento de inversão de extremos permite o rastreamento de tendências por meio do rastreamento dos extremos da faixa de flutuação dos preços, fazendo mais curto-circuito no extremo do ponto de inversão.
A estratégia baseia-se principalmente nos seguintes princípios:
A função de segurança obtém os valores máximos (high) e mínimos (low) das linhas K de diferentes períodos, e verifica se eles são iguais aos valores máximos (low) das linhas K anteriores, para determinar se um novo limite foi atingido.
Quando um novo ponto extremo é detectado, se a tendência atual for de vários pontos, então faça um curto-circuito nesse ponto extremo; se a tendência atual for de zero, então faça um curto-circuito nesse ponto extremo.
O ponto de parada é definido como o novo ponto máximo que se forma após o fechamento adicional, permitindo o traçado de tendência do stop loss.
Adaptação de estratégias para diferentes períodos de tempo, definindo um intervalo de tempo de vigência da estratégia a partir da data do ano.
A estratégia tem as seguintes vantagens:
A capacidade de capturar eficazmente os extremos das mudanças de preços, de fazer operações de reversão e de realizar o rastreamento de tendências.
A administração de tempo e dinheiro permite controlar o tempo e o dinheiro usado na estratégia, reduzindo o risco.
O uso de novos extremos como ponto de parada permite que o ponto de parada seja ajustado de acordo com a nova faixa de flutuação do preço, permitindo uma parada dinâmica.
A lógica da estratégia é simples, clara, fácil de entender, fácil de decolar e otimizar.
A estratégia também traz alguns riscos:
O julgamento do ponto de extremo pode ocorrer em situações de julgamento equivocado, resultando em erros de extrapolação. Pode-se otimizar ajustando a lógica de julgamento do ponto de extremo.
A localização de um stop loss perto do ponto de entrada pode aumentar a probabilidade de um stop loss ser acionado. Pode-se configurar um stop loss flutuante fora do campo com regexes.
Sem considerar a lógica de adição e reversão de posições que acompanham a tendência, pode ser difícil lucrar em situações de tendência. Pode-se adicionar regras de adição e reversão de posições para otimização.
As configurações de moeda e de tempo são rígidas e não podem ser ajustadas de forma dinâmica. Pode-se criar um sistema de otimização de parâmetros para resolver isso.
A estratégia pode ser otimizada em várias direções:
Otimização da lógica de julgamento de ponto de extremo, adicionando mais condições de filtragem para evitar julgamentos errados.
Aumentar o mecanismo de suspensão flutuante, ajustando a distância de suspensão de acordo com a variação do preço e da amplitude de flutuação.
A adição de módulos de levantamento de posições e reversão de posições baseados em tendências e flutuações aumenta a rentabilidade.
Estabelecer mecanismos de otimização de parâmetros para testes e otimização automatizados de parâmetros.
Acompanhamento de modelos de aprendizagem de máquina para a tomada de decisões estratégicas.
A estratégia de rastreamento de reviravoltas de extremos tem uma forte capacidade de adaptação e lucratividade, capturando os extremos de mudanças de preço e seguindo a tendência. Com a continuação da otimização do julgamento de extremos, mecanismos de parada de perdas e regras de abertura de posições, a estratégia tem potencial de se tornar uma estratégia de negociação quantitativa estável e confiável.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 6h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy(title = "Noro's Extremum Strategy v1.0", shorttitle = "Extremum str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
tf = input('W', title = 'Timeframe for extremums')
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//Levels
highm = request.security(syminfo.tickerid, tf, high[1])
lowm = request.security(syminfo.tickerid, tf, low[1])
upcolorm = highm == highm[1] ? lime : na
dncolorm = lowm == lowm[1] ? red : na
plot(highm, color = upcolorm, linewidth = 3)
plot(lowm, color = dncolorm, linewidth = 3)
//Signals
size = strategy.position_size
up = size > 0 ? highm * 1000000 : highm != highm[1] ? highm : up[1]
dn = size < 0 ? 0 : lowm != lowm[1] ? lowm : dn[1]
exit = true
//Trading
lot = strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]
if highm > 0 and high[1] < highm and highm == highm[1]
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = up)
if lowm > 0 and low[1] > lowm and lowm == lowm[1]
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dn)
if exit
strategy.close_all()