Estratégia de negociação baseada no estimador Faytterro

Autora:ChaoZhang, Data: 22 de setembro de 2023
Tags:

Resumo

Esta estratégia opera com base nos sinais de negociação gerados pelo Estimador Faytterro. O Estimador Faytterro é um indicador que julga tendências calculadora da taxa de convergência e divergência dos preços. Esta estratégia combina os sinais de negociação do Estimador Faytterro e algumas condições adicionais para gerar sinais longos e curtos de diferentes tamanhos em pontos ideais.

Estratégia lógica

O núcleo desta estratégia é o Estimador Faytterro. Seu cálculo é: primeiro calcular a taxa de convergência e divergência (CR) dos preços, em seguida, construir uma função quadrática, que pode refletir a forma da curva CR, definindo diferentes coeficientes. Observando os pontos de inflexão da curva quadrática, ele julga a mudança das tendências de preços.

Especificamente, a estratégia primeiro calcula a CR dos preços. Em seguida, constrói uma matriz dizi de comprimento 2*len, e enche-a com valores de função quadrática sequencialmente. Os coeficientes da função quadrática refletem o valor de CR. Depois disso, observando os dois valores no índice len+1+5 e len+1+4, determina se a função quadrática tem um ponto de inflexão. Se houver um ponto de inflexão, gera sinais de compra ou venda.

Com base nisso, a estratégia também estabelece algumas condições adicionais, tais como a definição da distância mínima entre as rupturas de preço para evitar negociações frequentes, a geração de sinais de tamanhos diferentes, etc. Estas condições são utilizadas para filtrar alguns pontos de negociação indesejáveis.

Análise das vantagens

Esta estratégia tem as seguintes vantagens:

  1. Usando o Faytterro Estimator para julgar tendências, que é sensível às flutuações de preços e pode capturar mudanças de tendência precocemente.

  2. Construir uma função quadrática para refletir a forma da curva CR e encontrar pontos de inflexão de forma direta e eficaz.

  3. A geração de sinais de diferentes tamanhos permite a negociação de pirâmide em pontos ideais, aumentando o potencial de lucro.

  4. Aumentar a configuração da distância mínima filtra efetivamente os sinais e evita negociações frequentes ineficazes.

  5. Muitos parâmetros ajustáveis podem ser otimizados para diferentes produtos comerciais, melhorando a adaptabilidade.

  6. A lógica da estratégia é clara e fácil de entender, e o código é altamente legível, tornando-o fácil de aprender.

Análise de riscos

Há também alguns riscos a considerar para esta estratégia:

  1. O Faytterro Estimator apresenta o risco de ajustamento da curva e pode apresentar um desempenho inferior em alguns produtos comerciais.

  2. Julgar apenas com base em pontos de inflexão da curva quadrática pode ser muito bruto, levando a julgamentos errados.

  3. A frequente negociação em pirâmide aumenta o custo das comissões.

  4. Um grande número de parâmetros ajustáveis aumenta a dificuldade de otimização.

  5. Não pode lidar eficazmente com erros de apreciação em períodos de oscilação de preços.

  6. A ausência de um mecanismo de stop loss pode levar a perdas maiores.

As soluções correspondentes são:

  1. Otimizar os parâmetros de diferentes produtos para melhorar a robustez.

  2. Adicionar outros indicadores de filtragem para evitar erros de apreciação baseados apenas nos pontos de inflexão.

  3. Configure o stop loss adequado para controlar a perda única.

  4. Usar métodos de big data para otimizar automaticamente parâmetros.

  5. Adicionar a identificação da oscilação para evitar a negociação em períodos oscilantes.

  6. Definir uma lógica de stop loss razoável.

Orientações de otimização

As direcções de otimização incluem:

  1. Adicionar a lógica de stop loss para controlar a perda única, como a perda de stop trailing ou a perda de stop time.

  2. Adicionar outros indicadores para evitar julgamentos errôneos baseados apenas no estimador Faytterro, por exemplo, combinando com MACD, KDJ, etc.

  3. Adicionar mecanismos de confirmação para evitar ser parado por retrações de curto prazo.

  4. Otimizar parâmetros ajustáveis para diferentes produtos utilizando algoritmos genéticos, otimização bayesiana, etc.

  5. Identificar os mercados oscilantes utilizando ATR, DMI, etc. e evitar a negociação durante oscilação.

  6. Optimize a lógica da pirâmide para evitar a perseguição de tendências.

  7. Testar parâmetros em diferentes prazos para encontrar o prazo ideal.

Conclusão

Esta estratégia toma decisões com base nos sinais de negociação do Faytterro Estimator, e adiciona julgamentos lógicos e sinais de entrada de diferentes tamanhos em cima dele para formar uma estratégia de tendência com características de pirâmide. A estratégia é intuitiva e fácil de entender, com fortes capacidades de captura de tendência. Mas também tem problemas como erros de julgamento de indicadores, sem perda de parada, dificuldade na otimização de parâmetros. As otimizações futuras incluem a adição de mecanismos de filtragem, lógica de perda de parada, otimização de parâmetros, etc. para melhorar a robustez e adaptabilidade.


/*backtest
start: 2022-09-21 00:00:00
end: 2023-08-10 00:00:00
period: 1d
basePeriod: 1h
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/
// © faytterro

//@version=5
// strategy("Faytterro Estimator Strategy", overlay=true, pyramiding=100)

src=input(hlc3,title="source")
len=input.int(10,title="faytterro estimator lenght", maxval=500)
len2=100
len3=input.float(500,title="minumum enrty-close gap (different direction)")
len4=input.float(500,title="minumum entry-entry gap (same direction)")
cr(x, y) =>
    z = 0.0
    weight = 0.0
    for i = 0 to y-1
        z:=z + x[i]*((y-1)/2+1-math.abs(i-(y-1)/2))
    z/(((y+1)/2)*(y+1)/2)
cr= cr(src,2*len-1) 
width=input.int(10, title="strong entry size", minval=1)

dizi = array.new_float(500)
// var line=array.new_line()
//if barstate.islast
for i=0 to len*2
    array.set(dizi,i,(i*(i-1)*(cr-2*cr[1]+cr[2])/2+i*(cr[1]-cr[2])+cr[2]))

buy = array.get(dizi,len+1+5)>array.get(dizi,len+1+4) and array.get(dizi,len+1+5)<cr[len] 
sell = array.get(dizi,len+1+5)<array.get(dizi,len+1+4) and array.get(dizi,len+1+5)>cr[len]
bb=buy? hlc3 : na
ss=sell? hlc3 : na 
sbuy= buy and close<(close[ta.barssince(buy or sell)])[1]-len4 and close<ta.highest(fixnan(ss),len2)-len3*3
ssell= sell and close>(close[ta.barssince(buy or sell)])[1]+len4 and close>ta.lowest(fixnan(bb),len2)+len3*3

buy:= buy and close<(close[ta.barssince(buy or sell)])[1]-len4 and close<ta.highest(fixnan(ss),len2)-len3 //and close>ta.highest(fixnan(ss),len2)-len3*3
sell:=  sell and close>(close[ta.barssince(buy or sell)])[1]+len4 and close>ta.lowest(fixnan(bb),len2)+len3 //and close<ta.lowest(fixnan(bb),len2)+len3*3
alertcondition(buy or sell)


if (sbuy)
    strategy.entry("strong buy", strategy.long,width)
if (ssell)
    strategy.entry("strong sell", strategy.short,width)
if (buy)
    strategy.entry("buy", strategy.long)
if (sell)
    strategy.entry("sell", strategy.short)

Mais.