A maioria das estratégias requer backtests para verificação antes de serem realizadas em bots. A FMZ suporta o spot, futuros e contratos perpétuos de algumas criptomoedas, bem como todas as variedades de futuros de commodities. No entanto, o mecanismo de backtest da plataforma FMZ Quant é diferente do backtest onbar comum, o que causou confusão para muitos iniciantes.
Como mostrado na imagem acima, o tempo desde o tempo de início do backtest até o tempo de término pode ser considerado como um eixo de tempo. Durante o backtest, o ponto de tempo do backtest se move de esquerda para direita ao longo do eixo para iniciar o backtest. Em um ponto de tempo, apenas os dados do histórico antes deste ponto de tempo podem ser obtidos. Com base nos dados do histórico, a estratégia faz compras e vendas e, finalmente, forma o lucro e a perda. Obviamente, a distribuição de pontos de tempo do backtest é discreta e a densidade da distribuição representa a precisão do backtest. Naturalmente, considerando que quanto mais densos são os pontos de tempo de backtest, mais longo é o tempo necessário, o sistema de backtest real precisa fazer uma escolha entre precisão e eficiência.
O mecanismo de backtest onbar é baseado em K-lines, ou seja, cada K-line gera um ponto de tempo de backtest. No ponto de tempo, você pode obter as informações, como os preços atuais da K-line mais altos, mais baixos, abertos e fechados, volume de negociação, etc., bem como as informações históricas da K-line antes deste ponto de tempo.
A desvantagem deste mecanismo é óbvia: em uma linha K, apenas uma negociação pode ser gerada, e o preço geralmente é baseado no preço de fechamento da linha K. Uma linha K só pode obter quatro preços, ou seja, preços de abertura, fechamento, mais alto e mais baixo, mas não pode obter as informações, como as mudanças de preço em uma linha K, e se o preço mais baixo ocorre primeiro ou o preço mais alto primeiro.
A imagem acima mostra a interface de configuração do backtest FMZ. O modo de backtest é dividido em dois tipos, a saber, o nível de simulação e o nível real do mercado, que serão introduzidos separadamente abaixo:
O que é carrapatos?
Ao contrário dos dados da linha K, o tick é o preço em um ponto de tempo específico. De acordo com os dados da linha K, nós realmente só sabemos quando o preço aberto e o preço de fechamento ocorreram. Não está claro quando o preço atinge o valor mais alto no período da linha K. Na verdade, os dados da linha K também são gerados com base no tick. De acordo com os dados da linha K, também é possível simular as mudanças de um tick específico em um período da linha K. Embora não seja um tick real, ele pode tornar nosso backtest mais preciso. E o período da linha K baseado na simulação pode ser muito menor do que o período usado para o backtest, então a precisão é maior.
Teste de regresso de nível de simulação
Para o backtest do nível de simulação, você precisa selecionar o período da linha K e o período da linha K sub-camada usado para o backtest. Por exemplo, se a estratégia usa o backtest da linha horária e a linha K sub-camada é definida em 5 minutos, então o intervalo de pontos de tempo do backtest será baseado no tick simulado pela linha K de 5 minutos, o que se reflete nas mudanças contínuas do preço de fechamento da linha K na última hora. O mecanismo de geração de ticks nas linhas K de acordo com as linhas K é semelhante ao do MT4.https://www.fmz.com/bbs-topic/662
Usamos uma estratégia simples para demonstrar este mecanismo; o código de estratégia:
function main() {
while(true){
var records = exchange.GetRecords() //GetRecords can fill the parameters, and obtain K-lines of different periods
var ticker = exchange.GetTicker()
Log('K-line close price: ', records[records.length-1].Close, 'ticker Buy1 Sell1 prices: ', ticker.Buy, ticker.Sell)
//js backtest does not use Sleep, and it will skip to the next tick; Python needs 1 hour of sleep time
}
}
Resultado do ensaio de regresso:
Apenas os ticks abertos e fechados de cada linha K são fixados, e os 12 ticks simulados são adicionados no meio, de modo que uma linha K formará 14 pontos de tempo de backtest. Se você fizer o backtest por um dia com o período da linha K de 5 minutos, um total de 24×12×14 = 4032 pontos de tempo serão gerados, enquanto o backtest onBar tradicional tem apenas 24, de modo que a precisão é muito melhorada. As operações de posição aberta e fechada também podem ser concluídas dentro de um período de linha K. Embora os ticks gerados intermediários sejam simulados, isso não afeta muito. No backtest, desde que o preço da ordem seja maior que o preço da venda, e o preço da ordem de venda seja menor que o preço da compra, o backtest será combinado.
Teste de retrocesso do nível real do mercado
O backtest de nível de mercado real usa o tick real e o intervalo mais curto entre cada ponto de tempo é de apenas 1s. Este tipo de backtest é preciso para a mudança por segundo, mas devido à grande quantidade de dados, a velocidade do backtest é lenta e o tempo de backtest não pode ser muito longo.
Mesmo o backtest de nível de mercado real e a negociação de bot real ainda têm deficiências de dados óbvias, como a incapacidade de obter os negócios do histórico de negociação, a incapacidade de obter mudanças reais de profundidade, atrasos reais da rede e assim por diante.
Por que apenas alguns pares de negociação e plataformas são suportados para backtest?
No momento, existem apenas dados de alguns pares de negociação comuns. Na verdade, a relação entre a estratégia e a variedade não é muito próxima, por isso é suficiente verificar a estratégia.
Pode simular o BitMEX para cobrar a taxa de financiamento?
Claro, você pode escolher BitMEX backtest para abrir o registro.
Onde o backtest é operado?
O backtest das estratégias JavaScript é realizado no navegador, enquanto o Python pode escolher o servidor FMZ ou seu próprio docker para operar o backtest.
Os registos dos backtests podem ser baixados?
Há um botão de descarregar no canto direito dos registos.
O backtest pode ser operado localmente?
FMZ abre o motor de backtest de Python.https://www.fmz.com/bbs-topic/1687