5.2 Como fazer backtesting quantitativo de negociação

Autora:Bem-estar, Criado: 2019-05-08 13:08:52, Atualizado:

Resumo

O significado e a importância do backtesting é indubitável. Ao fazer o backtesting quantitativo, a estratégia deve ser colocada no ambiente histórico o mais real e próximo possível. Se alguns detalhes no ambiente histórico forem ignorados, todo o backtesting quantitativo pode ser inválido.

O backtesting é equivalente à reprodução de dados. Ao reproduzir dados históricos da linha K e executar regras de negociação de mercado real, como a taxa de Sharpe, taxa máxima de retração, taxa de retorno anualizada e curvas de capital.github.com, que podem ser personalizados de forma flexível.

O FMZ Quant, como um software comercial de negociação quantitativa, vem com o motor de backtest de alto desempenho, usando o frame de backtest for-loop (polling), para quantificar o cálculo mais rapidamente.

FMZ Quant Backtest Interface Introdução

  • Passo 1

Tomando como exemplo a estratégia de cronometragem FMZ Quant Thermostat, vamos abrir o sítio oficial da FMZ Quant (www.fmz.comClique no painel, Estratégia, selecione uma estratégia, clique em backtest e vá para a página seguinte:

img img

Na interface de configuração de backtest, você pode personalizá-lo de acordo com suas necessidades reais. Como: definir o período de backtest, o ciclo de linha K, o tipo de dados (dados de nível de simulação ou dados de nível de mercado real. Em contraste, a velocidade de backtesting de dados de nível de simulação é mais rápida, o backtesting de dados de nível de mercado real é mais preciso). Além disso, você também pode definir a taxa de comissão para o backtest e os fundos iniciais da conta.

  • Passo 2

Clique na biblioteca de negociação mylanguage core (porque essa estratégia é escrita pela linguagem M, se você usar outra linguagem de programação, essa opção pode não aparecer) Em primeiro lugar, defina o rótulo de negociação. A linguagem FMZ Quant M tem dois tipos de métodos de execução de backtest, que são: o modelo de preço de fechamento e o modelo de preço mais recente. O modelo de preço de fechamento refere-se à execução do modelo após a linha K atual ser concluída, e a negociação é executada no início da próxima linha K; O modelo de preço mais recente refere-se à execução de um modelo para cada mudança de preço, e quando o sinal de negociação é estabelecido, ele será negociado imediatamente.

img img

O tamanho padrão do lote aberto refere-se ao montante da posição de abertura e fechamento durante o backtesting. Quantidade máxima de negociação uma vez é a posição máxima de abertura que é enviada para o motor de backtest por uma única transação.

A diferença entre o preço de negociação real e o preço de negociação planejado é sempre significativa. Este desvio geralmente se move em uma direção que não é favorável para o comerciante, resultando em perdas adicionais na negociação.

  • Passo 3

Preencha o contrato de futuros com o tipo de contrato que você quer backtest, para cryptocurreny, nós só precisamos especificar o período de k-linha que queremos backtest, neste caso, basta usar semana k linha, então, colocar this_week em.

img

A opção configurações de mercado real é usada principalmente para negociação de mercado real, no ambiente de backtesting, nós apenas mantemos que a configuração padrão será boa. Se o progresso de recuperação automática for marcado como verdadeiro, então quando o robô parar no mercado real, reiniciar o robô irá restaurar automaticamente a posição do sinal anterior sem recalcular o sinal. o número de tentativas de ordem definido para 20 por padrão. Quando a encomenda falha, ele tentará reenviar até 20 vezes. Intervalo de votação de rede (milissegundos) é onde o robô executa o código de estratégia a cada outra vez.

img

  • Passo 4

Opção de negociação spot é principalmente para negociação de criptomoedas, quando backtesting, mantê-lo nas configurações padrão vai ficar bem. Se você quiser, você pode especificar todos os parâmetros nessas configurações.

img

Estratégia Backtest

Antes do backtesting, determine sua estratégia de negociação. Aqui, tomamos a estratégia de tempo Thermostat como exemplo. Esta estratégia adotará uma estratégia de tendência no mercado de tendência de acordo com o estado do mercado e adotará uma estratégia de oscilação no mercado volátil. O código fonte é como mostrado abaixo (também pode ser baixado na página de estratégia do Quadrado do site FMZ Quant):

// Calculate CMI indicator to distinguish between Oscillating and trend market
CMI:=ABS(C-REF(C,29))/(HHV(H,30)-LLV(L,30))*100;

// Define key prices
KOD:=(H+L+C)/3;

// In the Oscillating market, the closing price is greater than the key price is suitable for selling market, otherwise it is for buying market
BE:=IFELSE(C>KOD,1,0);
SE:=IFELSE(C<=KOD,1,0);

// Define 10-day ATR indicator
TR:=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));
ATR10:=MA(TR,10);

// Define the highest and lowest price 3-day moving average
AVG3HI:=MA(H,3);
AVG3LO:=MA(L,3);

// Calculate the entry price of the Oscillating market
LEP:=IFELSE(C>KOD,O+ATR10*0.5,O+ATR10*0.75);
SEP:=IFELSE(C>KOD,O-ATR10*0.75,O-ATR10*0.5);
LEP1:=MAX(LEP,AVG3LO);
SEP1:=MIN(SEP,AVG3HI);

// Calculate the entry price of the trend market
UPBAND:=MA(C,50)+STD(C,50)*2;
DNBAND:=MA(C,50)-STD(C,50)*2;

// Calculate the quit price of the trend market
MA50:=MA(C,50);

// Oscillating strategy logic
CMI<20&&C>=LEP1,BK;
CMI<20&&C<=SEP1,SK;
CMI<20&&C>=AVG3HI,SP;
CMI<20&&C<=AVG3LO,BP;

// Trend strategy logic
CMI>=20&&C>=UPBAND,BK;
CMI>=20&&C<=DNBAND,SK;
CMI>=20&&C<=MA50,SP;
CMI>=20&&C>=MA50,BP;
AUTOFILTER;

Na interface de backtesting de simulação, depois de configurar as configurações de backtesting, clique no botão Start Backtest, e os resultados do backtest serão exibidos imediatamente após alguns segundos. No log do backtest, ele mostrará quantos segundos foram usados para backtest, logs e o número total de transações. As informações da conta imprimem os resultados finais do backtest da estratégia: lucro e perda médio, lucro e perda de posição, margem, taxas de comissão e retornos estimados.

img

A barra de status registra a variedade de negociação, as posições, os preços das posições, o preço mais recente, os tipos de sinal de negociação anteriores, o preço mais alto e mais baixo das posições, o número de atualizações, bem como informações de capital e tempo.

Entre eles, o indicador de desempenho mais importante é: taxa de Sharpe. Foi ao implementar o índice abrangente considerar os benefícios e riscos, e é um índice importante para medir um produto de fundo. Em geral, é quanto risco você suporta, cada vez que você ganha lucro, então o valor da taxa de Sharpe é maior, melhor.

A volatilidade anualizada, em termos simples, a anualização de um número pressupõe que as observações em um curto período de tempo continuarão ao longo de um ano. É uma medida do risco do fundo, mas definitivamente não é o risco total. Por exemplo, a Estratégia A tem uma volatilidade maior, mas tem sido volatilidade para cima, o lucro é bom; A Estratégia B tem uma pequena volatilidade, mas tem se movido de forma constante (à pouco e nem se move). Podemos dizer que a Estratégia B é melhor que a Estratégia A?

img

Por último, nas informações do diário, um registo pormenorizado de cada situação de negociação por intermédio de corretores no momento do backtesting, incluindo a hora específica da negociação, as informações de troca, o tipo de posição aberta e de posição fechada, o mecanismo de correspondência de ordens do mecanismo de backtest, bem como o número de transações e as informações impressas.

img

Após o teste de retorno

Muitas vezes, e na maioria dos casos, os resultados do backtesting estarão longe do que você espera. Afinal, uma estratégia de longo prazo, estável e rentável não é tão fácil de obter, o que requer sua capacidade de entender o mercado.

Se os resultados do backtest de sua estratégia estão perdendo dinheiro, não se desanime. Isso é realmente bastante normal. verifique se a lógica da estratégia foi mal interpretada pelo código, se está usando alguns parâmetros extremos, se está usando condições de posição de abertura demais, etc. Também é necessário reexaminar as estratégias de negociação e ideias de negociação de outro ângulo.

Se os resultados do backtest de sua estratégia forem muito bons, a curva de financiamento é perfeita, com uma taxa de Sharpe superior a 1. Por favor, não tenha pressa. Neste caso, a maioria das situações está usando as funções futuras, roubando preços, superajustando ou não adicionando preço de deslizamento, etc. Você pode usar os dados fora da amostra e a simulação de negociação no mercado real para excluir esses problemas.

Resumindo

O processo de backtesting da estratégia de negociação é o seguinte, pode-se dizer que foi específico em todos os detalhes. Deve-se notar que o backtesting de dados históricos é um ambiente ideal onde todos os riscos são conhecidos. Portanto, é melhor passar por uma rodada de mercado de touros e ursos para o tempo de backtesting da estratégia. O número efetivo de negociações deve ser não inferior a 100 vezes, a fim de evitar alguns viés de sobreviventes.

O mercado está sempre em processo de mudança e evolução. A estratégia histórica de backtesting não significa que o futuro será o mesmo. Não é apenas para deixar a estratégia lidar com os riscos possíveis conhecidos no ambiente de backtesting, mas também para lidar com os riscos desconhecidos no futuro. Portanto, é muito necessário aumentar a resistência ao risco e a universalidade da estratégia.

Exercícios após a escola

  1. Tente copiar a estratégia nesta seção e testá-la.

  2. Tente melhorar e otimizar a estratégia nesta seção com base em sua experiência comercial.


Mais.