Quando o preço desce e quebra a linha de suporte, nós pensamos que a força aérea está se fortalecendo, uma onda de tendência de queda já se formou e um sinal de venda foi gerado.Gráfico 4-20
Se, após a compra, o preço voltar a cair para a linha de Brynne, pensamos que a força multilateral está enfraquecendo ou a força aérea está se fortalecendo, produzindo um sinal de equilíbrio; se, após a venda, o preço voltar a cair para a linha de Brynne, pensamos que a força aérea está enfraquecendo ou a força multilateral está se fortalecendo, produzindo um sinal de equilíbrio.
Abertura de um negócio:如果无持仓,并且收盘价大于上轨,并且时间非14:45 Empréstimo em branco:如果无持仓,并且收盘价小于下轨,并且时间非14:45 Posicionamento multi-cabeça:如果持多单,并且收盘价小于中轨,或者时间是14:45 Embalado em branco:如果持空单,并且收盘价大于中轨,或者时间是14:45
Para implementar a estratégia, primeiro precisamos pensar em quais dados precisamos? através de que API vamos obter? então, como calcular a lógica do transação? e finalmente, por quais maneiras fazer o pedido?
O chamado CTA Strategy Framework é um conjunto de padrões lançados oficialmente pelos inventores da quantificação, que permite não ter que considerar os problemas triviais do desenvolvimento de estratégias de negociação quantitativa, mas concentrar-se diretamente na lógica de programação de negociações. Por exemplo, se não usarmos o framework, precisamos considerar mudanças de meses, preços de compra e venda, cancelamento ou acompanhamento de pedidos quando não estiverem transacionados.Diagrama 4-21
O gráfico acima é o quadro da estratégia do CTA usando ferramentas de quantificação do inventor. É um formato de código fixo, com todos os códigos de lógica de transação sendo escritos a partir da linha 3.
É importante notar que o código da variedade no gráfico acima é
O FMZ possui uma biblioteca de classes de negociação de commodities futuros em JavaScript, que pode ser usada no código diretamente na interface de edição de estratégias:
Pensando bem, quais dados são necessários? Descobrimos a partir da lógica de negociação estratégica: primeiro precisamos obter o estado atual do estoque, comparar a relação entre o preço de fechamento e o trajeto médio no indicador da faixa de Bryn, e finalmente julgar se o mercado está prestes a fechar. Então, vamos começar a obter esses dados.
O primeiro é obter o conjunto de linhas K e o preço de fechamento da linha superior de K, porque com o conjunto de linhas K, é possível calcular o indicador da faixa de brinquedos.Gráfico 4-22
Como mostra o gráfico acima: Linha 4: Obtenha o conjunto de linhas K, que é um formato fixo. 5a linha: Filtrar o comprimento da linha K, porque o parâmetro para calcular o indicador da faixa de brinquedos é 20, quando a linha K é menor que 20, não é possível calcular o indicador da faixa de brinquedos. Linha 6: A partir da matriz de linhas K obtida, primeiro obtém-se o objeto da linha K superior e, em seguida, obtém-se o preço de fechamento; obtém-se o segundo elemento do inversor de um conjunto, ou seja, o comprimento da matriz menos 2 ((r [r.length - 2]); os elementos da matriz de linhas K são todos objetos, os objetos contêm o preço de fechamento, o preço máximo, o preço mínimo, o preço de fechamento, o volume de transações, o tempo, para obter o preço de fechamento, adicione um eixo diretamente atrás dele.
Como somos uma estratégia diurna, precisamos nivelar as posições antes do fechamento, então para determinar se a linha K atual está perto do fechamento, se é a linha K próxima ao fechamento, a posição será nivelada, se não for a linha K próxima ao fechamento, a posição pode ser aberta, com o código escrito assim:Gráfico 24-23
Como mostra o gráfico acima: Linha 8: Obtenha a propriedade do timeout da linha da raiz K e crie um objeto de tempo ((new Date ((timeout)). Linha 9: De acordo com o objeto de tempo, calcule o número de horas e minutos, respectivamente, e determine se o tempo da linha da raiz K é 14:45.
A informação de posicionamento é uma condição muito importante na estratégia de negociação de quantificação. Quando as condições de negociação são estabelecidas, também é necessário julgar se a ordem é ou não colocada pelo estado da posição e pelo número de posições.Gráfico 4-24 Como mostra o gráfico acima: Linha 11: Obtenha o estado atual do estoque. Se houver vários pedidos, o valor é 1; se houver pedidos vazios, o valor é 1; se não houver nenhum estoque, o valor é 0.
Em seguida, é necessário calcular os valores dos indicadores da faixa de Bryn, em órbita, em órbita e em órbita. Primeiro, é necessário obter um conjunto de faixas de Bryn, a partir do qual é obtido o valor da faixa de Bryn em órbita. Na ferramenta de quantificação do inventor, obter um conjunto de faixas de Bryn é muito simples, sendo possível chamar diretamente a API da faixa de Bryn, o mais difícil é obter o valor da faixa de Bryn, pois é um conjunto de números em duas dimensões.
O conjunto de matrizes bidimensionais é, na verdade, bem compreendido, é o conjunto de matrizes, então a ordem de obtenção é a seguinte: primeiro, obtém-se o conjunto designado do conjunto e, em seguida, obtém-se o elemento designado do conjunto designado, como mostrado no gráfico abaixo:Gráfico 4-25
Como mostrado abaixo, as linhas 13 a 19 são para obter os valores de trajetória, trajetória média e trajetória inferior da faixa de Bryn; a linha 13 é para obter diretamente a matriz da faixa de Bryn usando diretamente a API do inventor. As linhas 14 a 16 são para obter as matrizes de trajetória superior, mediana e inferior da matriz bidimensional; as linhas 17 a 19 são para obter os valores de trajetória superior, mediana e inferior da faixa de Bryn da raiz K, respectivamente.Diagrama 4 a 26
Com os dados acima, é possível escrever a lógica de transação e o código para a transação de subordem. O formato também é muito simples, o mais usado é o estritamente de subordem, que pode ser descrito como: se a condição 1 e a condição 2 estiverem estabelecidas, subordem; se a condição 3 ou a condição 4 estiverem estabelecidas, subordem.Diagrama 24-27
No gráfico acima, as linhas 21-24 são a lógica de negociação e o código para a transação a seguir. De cima para baixo são: simples, simples, simples, simples, aberto.
Por exemplo, a frase "se" pode ser omitida se executar apenas uma linha de código. A frase traduz-se como: "se a posição atual for 0, e o preço de fechamento for maior do que o preço de venda, e o tempo da linha K não for 14:45, a frase "return 1 ton" pode ser omitida.
Se você estiver atento, você pode ver que essas linhas têm um retorno de 1
A partir de agora, um código completo da estratégia está escrito, e se você separar o quadro de negociação, dados de negociação, lógica de negociação, compra e venda de pedidos, não é simples de escrever, aqui está o código completo da estratégia:Gráfico 24-28
Há dois pontos a serem observados: tentar (mas não é necessário) escrever a lógica estratégica quando as condições da linha da raiz K são estabelecidas, quando a linha da raiz K é emitida, ou quando a condição da linha da raiz K é emitida, quando a linha da raiz K é emitida, o resultado da reavaliação não é muito diferente do resultado do disco real. Também pode ser escrito de outra forma, mas é preciso prestar atenção se a lógica estratégica é correta. Em geral, escrever a lógica do equilíbrio na frente da lógica de negociação, com o objetivo de fazer isso, é tentar que a lógica estratégica atenda às suas expectativas.
Acima, aprendemos cada passo para desenvolver uma estratégia completa de negociação de quantificação diária, incluindo: estratégia de resumo, método de cálculo de indicadores de faixa de brinquedos, lógica estratégica, condições de venda, implementação de código de estratégia, etc. Com este caso de estratégia, não só é possível familiarizar-se com o método de programação do inventor de ferramentas de quantificação, mas também pode ser adaptado para diferentes estratégias com base neste modelo.
A estratégia de negociação de quantificação é apenas uma síntese da experiência de negociação subjetiva ou do sistema, e você verá que é muito mais fácil escrever uma estratégia se nós, antes de escrevermos a estratégia, escrevermos as experiências ou sistemas usados na negociação subjetiva, separadamente, e depois traduzirmos um a um para o código.
No desenvolvimento de estratégias de negociação de quantificação, se apenas uma linguagem de programação puder ser escolhida, não hesite em escolher o Python, que abrange toda a cadeia de negócios, desde a captação de dados até a retomada de estratégias e transações.
1, tente implementar uma estratégia de dupla linha de frente usando o conhecimento desta seção. 2, tentar implementar o algoritmo de indicadores KDJ usando a linguagem JavaScript da ferramenta de quantificação do inventor.
No desenvolvimento de estratégias de negociação de quantificação, se apenas uma linguagem de programação puder ser escolhida, não hesite em escolher o Python, que já abrange toda a cadeia de negócios, desde a obtenção de dados até a análise de estratégias e transações.
No curso anterior, ao longo do caminho, nós aprendemos juntos: Macrolinguagem, linguagem de visualização, linguagem JavaScript, incluindo a linguagem Python, que você vai aprender neste capítulo.
Na verdade, cada linguagem de programação tem suas próprias características linguísticas, e essas linguagens não têm vantagens ou desvantagens, mas é mais para ver a estratégia de qual linguagem de programação é mais adequada e se essa linguagem de programação é adequada a você.
Ao mesmo tempo, estamos comprometidos em abrir as portas da quantificação para todos, divulgar o conhecimento de todas as linguagens de programação, a quantificação não é tão profunda e inacessível quanto imaginamos, acreditando que a quantificação do futuro será generalizada e popular.
O processo de quantificação de transações é apenas a obtenção de dados, análise de dados de cálculo, processamento de dados, etc. No que diz respeito à análise de dados, nenhuma outra linguagem pode ser tão computacional e performativa quanto o Python. Especialmente no processamento de dados de análise de sequência de tempo, o Python tem vantagens de simplicidade e facilidade. Além disso, em comparação com outras linguagens de programação, o Python é mais simples e fácil de aprender.
5 razões para escolher o Python
A quantificação é amplamente utilizada:
O Quantipian dos Estados Unidos e os inventores locais podem quantificar em Python.
2. Simples e fácil de aprender:
A filosofia de design do Python é centrada no usuário e pertence a uma linguagem interpretável que é fácil de depurar.
3. Fonte livre e aberta:
O programa é gratuito, o código aberto é compartilhado e aumenta a eficiência de aprendizagem e uso.
4. Uma biblioteca rica:
O projeto é baseado em uma série de projetos de pesquisa e desenvolvimento, incluindo: processamento de dados, computação de dados, visualização, análise estatística, análise técnica, aprendizado de máquina.
5. Interface de aplicação:
Os dados das principais plataformas são obtidos através de interfaces de armazenamento de chamadas e links de transações em tempo real.
Para ajudar você a entender rapidamente os principais conhecimentos desta seção, antes de dar uma introdução rápida aos inventores da linguagem de quantificação do JavaScript, vamos ter uma idéia inicial do conceito de substantivo nesta seção.
Abertura de um negócio: se não houver posição atual e a linha média de 5 ciclos for maior que a linha média de 20 ciclos.Empréstimo em branco: se não houver posição atual e a linha média de 5 ciclos for menor que a linha média de 20 ciclos.Posicionamento multi-cabeça: se houver um monte de ordens atualmente mantidas e a linha média de 5 ciclos for menor que a linha média de 20 ciclos.Embalado em branco: se houver uma ordem em branco e a linha média de 5 ciclos for maior que a linha média de 20 ciclos.
Se for escrito em código Python, é assim:Gráfico 24-29
O código na imagem acima é uma estratégia de negociação quantitativa completa escrita em Python. Pode ser executado no disco real e realizar transações automaticamente. Em termos de volume de código, a linguagem Python é mais do que a linguagem JavaScript, porque não usamos o framework de negociação CTA.
Mas o processo de design de toda a estratégia é quase o mesmo: configurar a variedade de mercado, obter dados de linha K, obter informações de estoque, calcular a lógica de transação, comprar e vender. Ou seja, embora a gramática de programação seja diferente, a lógica da estratégia escrita é a mesma.
Há duas versões de Python, Python 2 e Python 3. Houve uma passagem que diz que Python é como uma pistola de dois tubos, mas só pode disparar uma bala de cada vez, mas nunca se sabe qual é mais preciso. Então, se você é novo no Python, é recomendável aprender Python 3 diretamente, porque é o mais recente e a comunidade Python tem sido mantida.
O identificador é também o nome da variável, como test, test 10, test 10 e test 10 no gráfico abaixo.demo e outros. Tudo no Python é escrito em letras maiúsculas, ou seja, o nome da variável test e o nome da variável test são duas variáveis diferentes. O primeiro caractere do identificador deve ser uma letra, um sublinhado.O texto pode ser traduzido como: (a) um símbolo, (b) um símbolo, (c) um símbolo, (d) um símbolo, (e) um símbolo.Gráfico 4-30
A notação é a tradução ou interpretação de uma linha de código, cujas regras são muito simples, e que inclui notação de linha única e notação de nível de bloco. A notação de linha única começa com um ponto ((#), a notação de bloco começa com três sílabas ((
A característica principal do Python é o uso de encolhimento para representar blocos de código, sem o uso de parênteses maiúsculos {}. O número de espaços encolhidos é variável, mas as declarações do mesmo bloco de código devem conter o mesmo número de espaços encolhidos. Como mostra a figura abaixo: neste caso, o programa retornará erros. Mesmo que a condição if seja validada, não será emitido o ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ângulo ânguloGráfico 4-32
As variáveis podem armazenar qualquer tipo de dados, e escrever diretamente o nome da variável é criar a variável, mas quando a variável é criada, o programa precisa definir o valor da variável ao mesmo tempo, caso contrário, o programa retornará um erro. O operador à esquerda é o nome da variável, e o operador à direita é o valor armazenado na variável.Gráfico 4-33
O Python tem seis tipos de dados, sendo três invariáveis e três variáveis. Uma vez criado, um dado invariável tem um valor que não pode ser alterado e seu endereço em memória é único; um dado variável é uma referência ao endereço em memória, que não muda seu endereço em memória se seu valor for alterado. Dados invariáveis (três): Número (número), String (string), Tuple (grupo); Dados variáveis (três): Lista (lista), Dicionário (dicionário), Conjunto (conjunto).Gráfico 4-34
Os tipos de números do Python suportam int (inteiro), float (flotado), boolean (bool), complex (plural) e a função type (construída) que pode ser usada para consultar o tipo de objeto para o qual a variável se refere.Gráfico 4 a 35
Como a maioria das linguagens, as operações matemáticas em Python são muito intuitivas. Os operadores aritméticos, os operadores de comparação e os operadores lógicos são como o conhecemos nas escolas. Os operadores aritméticos são operações matemáticas de adição e subtração, onde os operadores de comparação podem comparar dois valores menores ou menores. Os operadores lógicos são: lógico, lógico e não lógico.Gráfico 4-36
Note-se que:
Se houver uma expressão 100* ((10-1) / ((10+5)), qual é o primeiro passo do programa para calcular? Matemática do ensino médio nos diz: 1 Se for uma operação do mesmo nível, geralmente a contagem é feita em ordem de esquerda para direita.2. Se houver adição, subtração e multiplicação, primeiro a multiplicação, depois a multiplicação e a subtração.3. Se houver parênteses, o que está dentro dos parênteses.3. Se for conforme com a lei da operação, a redução pode ser feita usando a lei da operação.Gráfico 4-37
O tipo Boole representa o verdadeiro e o falso, e é usado frequentemente no julgamento condicional e em declarações circulares. O Python define duas constantes para o valor True e o valor Flase.Gráfico 4-38
As strings são caracteres, que são frequentemente usados na configuração de código de variedade. Por exemplo, a strings se1905
Listas são os tipos de dados mais usados no Python, e você pode imaginar a lista como um recipiente, mas os elementos do recipiente são ordenados de esquerda para direita, sendo que o primeiro elemento é 0, o segundo elemento é 1, e assim por diante. Além disso, as listas no Python podem armazenar qualquer tipo de dados, como mostrado na figura abaixo:Gráfico 4-40
A função em Python não é essencialmente diferente das funções do nosso ensino médio, você pode entender o que é transmitido e o que é expelido através da computação da função, como mostrado no gráfico abaixo:Gráfico 44-41
A expressão if aparece frequentemente em nossas vidas, por exemplo: "Se chover hoje, eu aposto"; ou seja, a expressão só executa o código quando a condição é True.Gráfico 44-42
A frase if...else também é uma frase comum, como: se chover hoje, eu apostarei; caso contrário, eu não apostarei. A frase if...else é uma extensão da frase if, ou seja, a frase que segue a fraseelse executa o código apenas quando a condição especificada é Falsa.Gráfico 44-43
Como o Python não suporta as declarações de switch, o Python só pode usar a declaração elif para julgar várias condições; por exemplo: se for um raio de sol, eu vejo mais; se não for um raio de pénis, eu vejo em branco; se não, eu observo; como mostrado abaixo:Gráfico 44-44
Às vezes, quando precisamos obter dados de linha K dos últimos dias, precisamos obter a partir de uma matriz de linha K, em função da localização dos dados da linha K, então usar o loop for é muito conveniente, como mostrado no gráfico abaixo:Gráfico 4-45
Todos nós sabemos que o mercado está em constante mudança, e se você quer obter o mais recente conjunto de K-strings, você tem que continuar a executar o mesmo código repetidamente, então use o loop whilex, e o loop pode continuar a obter o mais recente conjunto de K-strings, desde que a condição seja verdadeira.Gráfico 44-46
O ciclo é condicional, e só quando este condição é "true" o ciclo começa a fazer algo repetidamente, até que este condição é "false" o ciclo termina. No entanto, as instruções break podem saltar o ciclo imediatamente durante a execução do ciclo; as instruções continue podem interromper um ciclo e continuar no próximo ciclo, como mostrado abaixo:Gráfico 44-47
A instrução de retorno termina a execução da função e retorna o valor da função. A instrução de retorno só aparece no corpo da função, e aparecer em qualquer outro lugar do código causa um erro de sintaxe!Gráfico 44-48
A estrutura de estratégia pode ser entendida como um formato fixo de estratégia, cujos inventores usaram um modelo de consulta de ferramentas de quantificação.
A linha 4 - 7 é a função de entrada principal do programa, ou seja, o computador executa o código a partir da linha 4, e depois executa diretamente a linha 5, entrando em um ciclo infinito. Em seguida, executar a função de lógica estratégica (onTick) e a função de repouso (Sleep) dentro do ciclo infinito; a função onTick é também a linha 1 do código, você pode escrever a lógica estratégica na linha 2; sabemos que no ciclo, a velocidade de execução do programa é muito rápida, então usar a função de repouso (Sleep) pode fazer a pausa, e a próxima geração de código Sleep (Sleep) é 500 por cada ciclo, e adormece 500 milissegundos.Gráfico 44-49
Isso é uma introdução rápida à linguagem Python, que, embora seja apenas um básico básico, pode ser usado para escrever uma estratégia de negociação quantitativa simples. Se você precisar escrever uma estratégia mais complexa, consulte o documento da API do Python, ferramenta de quantificação.
No campo da análise técnica, as estratégias de tendência são, sem dúvida, as duas principais. Embora o objetivo seja capturar tendências de preços, a filosofia de negociação e as características de risco das duas estratégias são muito diferentes. Aprendendo a introdução da linguagem Python neste capítulo, na próxima seção vamos levar você a escrever uma estratégia de negociação quantitativa para quebrar o canal.
1, Tente obter dados históricos de K-string com a linguagem Python da ferramenta de quantificação do inventor. 2. Tente escrever o código da estratégia no início desta seção e escreva um comentário.
No artigo anterior, aprendemos a introdução da linguagem Python, gramática básica, estrutura de estratégias, etc. Embora o conteúdo seja chato, é uma habilidade essencial para a implementação de estratégias de negociação, e também é necessário aprender. Então, neste artigo, vamos aproveitar o calor e continuar com os fundamentos do Python no artigo anterior, começando com uma estratégia simples, aprendendo e aprendendo, passo a passo, para ajudar a todos a implementar uma estratégia de negociação quantitativa viável.
Entre as muitas estratégias de negociação, a estratégia do canal de Donchian deve ser uma das mais clássicas estratégias de ruptura, já conhecida em 1970, quando empresas estrangeiras realizaram testes e pesquisas de simulação exclusivas de estratégias de negociação programadas dominantes, o que mostrou que, de todas as estratégias testadas, a estratégia do canal de Donchian foi a mais bem sucedida.
Mais tarde, houve um treinamento de um dos mais famosos comerciantes de gafanhotos na história do comércio nos Estados Unidos, que foi um grande sucesso. Os métodos de comércio dos gafanhotos eram secretos, mas mais de uma década depois, quando as leis de comércio de gafanhotos foram divulgadas, descobriu-se que os gafanhotos usavam uma versão aprimorada da estratégia do canal de Don Quixote.
A estratégia de negociação de ruptura é adequada para as variedades de negociações com um movimento mais fluido. O método de negociação de ruptura mais comum é usar a relação entre o preço e a posição relativa de suporte e resistência para determinar o ponto de venda e venda de um determinado negócio. A estratégia do canal de Dongcheng nesta seção é baseada neste princípio.
O canal de Dongqian é um indicador de tendência, que tem um aspecto e sinaliza um pouco como um indicador de faixa de brinquedos. Mas o canal de Dongqian é construído com base nos preços mais altos e mais baixos em um período. Por exemplo, quando se calcula o valor máximo do preço mais alto da linha K mais recente, forma um trajeto; quando se calcula o valor mínimo do preço mais baixo da linha K mais recente, forma um trajeto. O indicador é composto por três curvas de cores diferentes, os preços máximos e mínimos por padrão em 20 ciclos para mostrar a volatilidade dos preços do mercado. Quando o canal é estreito, indica uma menor volatilidade do mercado, e quando o canal é amplo, indica uma maior volatilidade do mercado.
Se o preço sobe e desce, é um sinal de compra; ao contrário, se o preço desce, é um sinal de venda. Como o seu sucesso e queda são calculados com o preço mais alto e o menor, em geral, raramente o preço sobe e desce simultaneamente na linha do canal. Na maioria das vezes, o preço se move ao longo de movimentos unilaterais ascendentes ou descendentes, ou entre ascendentes e descendentes.
Na ferramenta de quantificação do inventor, o método de cálculo do canal de Dongjian é simples e pode ser usado diretamente para obter o preço mais alto ou o preço mais baixo em um determinado ciclo, como mostra o gráfico abaixo: a linha 5 é o valor máximo para obter o preço mais alto de 50 ciclos e a linha 6 é o valor mínimo para obter o preço mais baixo de 50 ciclos.Gráfico 4-50
Há muitos métodos de uso do canal Dongjian, que podem ser usados separadamente ou em conjunto com outros indicadores. Neste curso, vamos adotar o método de uso mais simples. Ou seja, quando o preço quebra a trajetória ascendente, ou seja, quebra a linha de pressão superior, pensamos que a força multilateral está se fortalecendo, uma onda de corrida ascendente se formou e gerou um sinal de compra; quando o preço cai e quebra a trajetória inferior, ou seja, quebra a linha de suporte, pensamos que a força ascendente está se fortalecendo, uma onda de tendência descendente se formou e gerou um sinal de venda.Gráfico 4-51
Se, após a compra, o preço voltar a cair para a faixa média do corredor de Dongguan, pensamos que a força multilateral está enfraquecendo, ou a força aérea está se fortalecendo, produzindo um sinal de equilíbrio; se, após a venda, o preço voltar a cair para a faixa média do corredor de Dongguan, pensamos que a força aérea está enfraquecendo, ou a força multilateral está se fortalecendo, produzindo um sinal de equilíbrio.
Condições de venda Abertura de um negócioSe não houver estoque e o preço de fechamento for maior do que o preço de venda:Empréstimo em brancoSe não houver estoque e o preço de fechamento for inferior ao traçado:Posicionamento multi-cabeça: se houver mais pedidos e o preço de fechamento for menor que o médioEmbalado em brancoSe você tem um bilhete vazio e o preço de fechamento é maior do que o preço médio
O primeiro passo para a implementação da estratégia é obter os dados, pois os dados são uma parte premente da estratégia de negociação, imagine quais dados precisamos? e como obter esses dados? e depois, com base nesses dados, calcular a lógica de negociação; e, finalmente, comprar e vender transações com a lógica de negociação.
Você pode imaginar um banco de dados como um módulo funcional, e o benefício de usar um banco de dados é que você pode colocar sua energia na escrita da lógica da estratégia. Por exemplo: quando usamos um banco de dados, quando abrimos um negócio, é possível usar diretamente a API abaixo do banco de dados; mas se não usamos um banco de dados, quando abrimos um negócio, precisamos acessar o preço do negócio, precisamos considerar o problema do anúncio, mas não o negócio, precisamos considerar o problema do retiro de um pedido, etc.Figura 4-52
O gráfico acima é um quadro de estratégias de CTA usando ferramentas de quantificação dos inventores. É um formato de código fixo, com todo o código lógico de transações sendo escrito a partir da linha 4.
O JavaScript tem uma biblioteca de classes de modelos embutida, e Python precisa copiar e salvar este modelo:https://www.fmz.com/strategy/24288A política pode ser executada sem a biblioteca de modelos.
Pensando bem, quais dados são necessários? Descobrimos a partir da lógica de negociação estratégica: primeiro precisamos obter o estado atual do estoque, comparar a relação entre o preço de fechamento e o trajeto médio no indicador da faixa de Bryn, e finalmente julgar se o mercado está prestes a fechar. Então, vamos começar a obter esses dados.
O primeiro é obter um conjunto de linhas K e o preço de fechamento atual de linhas K, pois, com um conjunto de linhas K, você pode chamar uma API para obter o preço máximo ou mínimo de N ciclos.Gráfico 4-53 Como mostrado no gráfico: Linha 4: Obtenha o conjunto de linhas K, que é um formato fixo. 5a linha: Filtrar o comprimento da linha K, porque nós estamos calculando o preço máximo ou mínimo do ciclo N, o parâmetro usado é 50, e quando a linha K é menor que 50, não pode ser calculado. Então aqui, para filtrar o comprimento da linha K, se a linha K é menor que 50, pular este ciclo e continuar esperando a próxima linha K. Linha 6: Usamos o código len (records - 1) para obter o último dado da matriz de linhas K, ou seja, os dados mais recentes da linha K. Este dado é um objeto que contém: preço de abertura, preço máximo, preço mínimo, preço de fechamento, volume de transações, tempo, etc. Como é um objeto, usamos diretamente o link.
A informação sobre o estoque é uma condição muito importante na estratégia de negociação de quantificação. Quando as condições de negociação são estabelecidas, também é necessário julgar se a ordem é ou não encomendada pelo estado de estoque e número de estoques. Por exemplo: quando as condições de negociação de compra e venda são estabelecidas, se houver estoque, não é necessário encomendar repetidamente; se não houver estoque, pode ser encomendada.Gráfico 4-54
Como mostra o gráfico acima: Esta é uma função que obtém informações sobre o estoque, retornando 0 se o estoque estiver vazio; 1 se o estoque estiver vazio; e -1 se o estoque estiver vazio. Note o código acima: Linha 2: Crie uma função chamada mp, que não tem parâmetros. Linha 3: Obtenção de arquivos de armazenamento, que é um formato fixo. Linha 4: Determine o comprimento da matriz de armazenamento, se o seu comprimento for igual a, que deve ser um armazém vazio, então retornará 0. Linha 6: Use o loop for para começar a percorrer o conjunto, e a lógica seguinte é muito simples: se você tiver mais uma lista, retornará 1; se tiver uma lista vazia, retornará -1. Linha 18: Chama a função de acesso de informações de armazenamento que acabaste de escrever.
Na ferramenta de quantificação do inventor, a função TA.Highest TA e TA.Lowest TA podem ser obtidas diretamente usando a função TA.Highest TA e TA.Lowest TA sem a necessidade de escrever a lógica do cálculo. E a função TA.Highest TA e TA.Lowest TA retorna o resultado de valores específicos em vez de arquivos.Gráfico 4-55
Como mostra o gráfico acima: Linha 19: invoque a função TA.Highest para obter o valor máximo do preço máximo de 50 ciclos Linha 20: Chama a função TA.Lowest para obter o valor mínimo do preço mínimo de 50 ciclos Linha 21: Calcule a média com base no valor máximo do preço máximo de 50 ciclos e no valor mínimo do preço mínimo de 50 ciclos
Com os dados acima, é possível escrever a lógica de transação e o código para a transação de subordem. O formato também é muito simples, o mais usado é a frase de subordem, que pode ser descrita como: subordem se as condições 1 e 2 estiverem estabelecidas; subordem se as condições 3 ou 4 estiverem estabelecidas.Gráfico 4-56
Como mostra o gráfico acima: Linha 22: Usar um banco de classe de transações, um formato fixo Linhas 23 e 24: Esta é uma frase simples, que usa o que aprendemos anteriormente, como a função de comparação de divisas e a função de lógica de divisas, o que significa que todas as posições são eliminadas se houver um número maior de divisas e o preço de fechamento for menor que o médio. Linhas 25 e 26: Esta é uma frase de uma lista vazia, que usa a função de comparação de equações de equações de equações de equações de equações de equações de equações de equações de equações de equações de equações de equações de equações de equações de equações de equações de equações de equações de equações. Linha 27: julgar o estado atual do estoque e, se houver estoque vazio, seguir para o próximo passo. Linhas 28 e 29: julgar se o preço de fechamento é maior do que o de alta, e se o preço de fechamento for superior ao de alta, comprar a posição aberta. Linhas 30 e 31: julgar se o preço de fechamento é menor do que o traçado, e se o preço de fechamento cai abaixo do traçado, vender a posição aberta.
Acima, aprendemos cada passo para desenvolver uma estratégia de negociação quantitativa completa no Python, incluindo: estratégia de resumo, método de cálculo do canal de Dongjian, lógica da estratégia, condições de venda, implementação de código da estratégia, etc. Este capítulo é apenas uma estratégia simples, como um jogo de ponta, há mais de uma maneira, você pode, de acordo com o seu sistema de negociação, sobrepor diferentes métodos de negociação, formando assim sua própria estratégia de negociação quantitativa.
No desenvolvimento de estratégias de negociação quantitativa, do ponto de vista da velocidade de execução da linguagem de programação, só pode ser C ++ se for o idioma mais rápido. Especialmente no campo dos derivativos e do comércio de alta freqüência, o C ++ é um idioma específico, C ++ tem vantagens em computação numérica e pode aumentar a velocidade em vários níveis em comparação com JavaScript e Python.
1, Começar a implementar a estratégia desta seção a partir do início. 2. Tente adicionar um indicador de linha reta para a estratégia desta seção, reduzindo a frequência de negociação.
A retrospecção é o ponto em que a negociação quantitativa é muito diferente da negociação tradicional, com base em dados reais do mercado que já ocorreram historicamente, sinais de estratégia de simulação rápida, desencadeamento e captura de transações, relatórios de desempenho em um período de tempo.
Nos capítulos anteriores, aprendemos os fundamentos das principais linguagens de programação e ensinamos como usar esses fundamentos para escrever estratégias de transação simples. No entanto, uma estratégia escrita não pode ser colocada em prática diretamente, mas também precisa de um teste contínuo, de um teste contínuo, de um teste contínuo, de um teste contínuo, de um teste contínuo, de um teste contínuo, de um teste contínuo, etc., até que a estratégia possa implementar completamente o conteúdo do modelo e funcionar sem problemas.
Do ponto de vista da lógica de negociação quantitativa, a estratégia é baseada em uma série de percepções e pressupostos sobre o mercado, e a retrospectiva pode determinar de forma eficiente se esses pressupostos são válidos e estáveis.
Além disso, do ponto de vista da operação de negociação quantitativa, o retesting pode ajudar a detectar bugs na lógica da estratégia, como funções futuras, preços de roubo, multi-ajustes, etc.; fornece evidência confiável de que a estratégia pode ser usada para negociação em disco real.
Portanto, o significado de retrospectiva é redigir o processo de negociação real com dados históricos o mais real possível, verificar a eficácia da estratégia, evitar o preço caro de uma estratégia errada e nos ajudar a filtrar, melhorar e otimizar a estratégia de negociação.
A estratégia de negociação baseia-se em dados históricos estáticos no retraso; enquanto os dados dos negócios reais são dinâmicos. Por exemplo: se o preço máximo for maior que o preço de fechamento do dia anterior, a posição será aberta. Esta condição de abertura é que, no disco real, se a linha K não tiver terminado, o preço máximo é dinâmico e o sinal de negociação pode piscar novamente.
Funções futuras são usadas com preços futuros, ou seja, as condições atuais podem ser modificadas no futuro, e as funções futuras também podem causar um sinal de flash; portanto, qualquer função possui propriedades de funções futuras, como a conversão da palavra "queimada" para a função "queimada".
A função de conversão de palavras indica o ponto de inflexão dos picos e vales de onda e pode ajustar seu valor de acordo com o último preço em tempo real, mas se o preço atual mudar, o resultado do cálculo da função de conversão de palavras também mudará.Figura 5-1
O que é chamado de roubo de preço é o uso de preços passados para negociar. Por exemplo: se o preço máximo for maior que um preço fixo, o preço de compra é o preço de abertura. Esta condição é o preço de roubo, porque no mercado real, quando o preço máximo é maior que um preço, o preço já está acima de um certo distância do preço de abertura, quando o preço de abertura não pode ser comprado.
Outra situação é que, se o preço saltar acima do preço fixo estabelecido pela estratégia, pode ser negociado em retrospecto a um preço fixo, mas no mercado real este preço fixo não é obviamente comprado.
Os preços não negociáveis podem ser divididos em várias situações: A primeira: no mercado real, o ponto de queda é geralmente não comprado, e vice-versa, o ponto de queda também é; mas no retorno, é possível negociar.
O segundo tipo: o mecanismo de captação de câmbio é: preço prioritário, tempo prioritário. Algumas variedades de liquidação geralmente têm grandes pedidos, no momento em que o listado de compra e venda, é necessário esperar a espessura do listado, para negociar ou até mesmo não negociar. Mas no retrospecto, o listado de compra e venda é possível.
Terceiro tipo: se a estratégia de arbitragem, então o lucro retrospectiva é muito alto, porque a retrospectiva sempre tem assumido para pegar esses preços diferenças. Na realidade, muitas diferenças não pode pegar, ou só pegar uma perna, em geral, certamente é desfavorável para a sua direção, que deve ser negociado em primeiro lugar, então é necessário imediatamente para completar a outra perna, neste momento, o ponto de deslize já não é de 1-2 pontos, e a estratégia de arbitragem em si ganha os preços diferenças de alguns pontos, esta situação é imutável em retrospectiva.
O quarto tipo: evento do cisne negro. No círculo vermelho abaixo, no evento do cisne negro do FX, embora aparentemente haja preços de abertura, preços máximos, preços mínimos e preços de fechamento, na verdade, no mercado extremo do dia, o preço médio é um vazio, um grande número de ordens de stop loss, causando um incidente de pisar, a liquidez é zero, a dificuldade de transação é muito grande, mas pode parar os prejuízos no teste de volta.Figura 5-2
Sempre que vejo o gráfico abaixo, o meu pensamento é: haha... Como você pode ver no gráfico abaixo, um modelo ridículo, se complexo o suficiente, pode se adaptar perfeitamente aos dados.Figura 5 - 3
Para transações quantificadas, o retorno é baseado em dados históricos, mas a amostra de dados históricos é limitada se os parâmetros da estratégia de negociação forem excessivos ou a lógica de negociação for muito complexa, resultando em uma estratégia de negociação excessivamente adaptada aos dados históricos.
O processo de modelagem de estratégias de quantificação é essencialmente um processo de busca de dados locais não-aleatórios a partir de um grande volume de dados aparentemente aleatórios, que facilmente caem na armadilha do excesso de ajustamento se não forem usados conhecimentos estatísticos.
Portanto, não se iludam. Se você descobrir que os dados fora da amostra não estão funcionando bem, mas acha que é uma pena perder o modelo ou não quer admitir que o seu modelo não funciona, e continua a otimizar o modelo para os dados fora da amostra até que eles funcionem tão bem, o último ferimento será o seu verdadeiro ouro e prata.
Uma piada popular de Wall Street diz: "Suponha que existam 1000 macacos no mercado, e no primeiro ano, elimine 500 macacos que perderam para o grande baralho. No segundo ano, elimine metade e fique com 250 macacos.Figura 5-4
No nono ano, ainda tinha o último macaco. Então você olha, olha, olha para a direita e para a esquerda e sente-se bem. Quando vê a última capa da revista Finance, de repente pensa: "Oh, oh, não é o Buffett?"
É claro que é uma piada, mas você já pensou que, se houver 1000 gestores de fundos, em 10 anos, cerca de 10 gerentes de fundos vão ganhar e ganhar o mercado por 10 anos consecutivos?
Assim como o resultado da revisão à esquerda do gráfico abaixo, acredito que a maioria dos investidores vai ter um bom resultado imediato. A estratégia de investimento tem um desempenho muito sólido e quase não há um recuo significativo.Figura 5-5
E lento, como mostra o gráfico à direita, a situação real está lá dentro. A curva de reavaliação da esquerda é apenas a melhor de muitas reavaliações. Ou seja, há muitas situações piores por trás da reavaliação da esquerda.
Em um ambiente de negociação real, o preço está sempre em flutuação, e quando você está otimista sobre uma oportunidade de negociação, o momento em que você faz o pedido, o preço pode ter mudado. Assim, o problema do ponto de deslizamento é inevitável, tanto em negociações subjetivas quanto em negociações quantitativas.
Mas a retrospecção é baseada em dados estáticos, e é difícil simular um ambiente de negociação real. Por exemplo: o preço do pedido é de 1050 compras, mas o preço do negócio real pode ser de 1051. Há muitos princípios que causam esse fenômeno, como: vazio de liquidez em mercados extremos, atraso da rede, sistemas de software e hardware, resposta do servidor, etc.
Gráfico 5-6
Como mostrado acima, é um retorno sem ponto de deslizamento, a curva de capital é muito boa, mas no mercado real há uma diferença entre o preço de transação real e o preço ideal do retorno estratégico. Assim, para reduzir esse erro, pode-se definir dois pontos de deslizamento no retorno estratégico para aumentar o preço de compra ou reduzir o preço de venda.
Figura 5-7
Como mostrado acima, a mesma estratégia, se o resultado do reexame é muito diferente do resultado do reexame sem o aumento de dois saltos, também significa que a estratégia precisa ser melhorada ou substituída por uma nova. Especialmente as estratégias de alta frequência de negociação, que adicionam 1-2 saltos ao reexame, podem tornar o reexame mais próximo do ambiente de negociação real.
A resposta é muito simples, é preciso simular o comércio por um tempo antes que a estratégia seja realizada, e se o preço de transação da simulação for o mesmo que o preço de transação no momento da reavaliação, então prova que a estratégia não é um problema, pelo menos a lógica estratégica não é um problema.
De qualquer forma, para um desenvolvedor de sistemas de negociação experiente, o retrospecto é uma obrigação; porque ele pode dizer-lhe se uma ideia estratégica pode ser comprovada e eficaz em negociações históricas; mas muitas vezes o retrospecto não significa lucro futuro; porque há muitas poças no retrospecto e você não vai entender sem pagar por lições; e essas lições são empilhadas em ouro e prata de verdade.
1 - O que é o overfit e como evitar? 2 - Quais são os perversos sobreviventes da vida real?
O significado e a importância da retrospecção são inquestionáveis, e quando se realiza uma retrospecção quantitativa, a estratégia deve ser colocada no contexto histórico real, tanto quanto possível, pois se os detalhes do contexto histórico forem ignorados, a retrospecção quantitativa inteira pode ser invalidada.
A retrospecção é a retrospecção de dados, através da retrospecção de dados históricos da linha K e da simulação de regras reais de negociação, para eventualmente reunir dados sobre o índice de Sharpe, o máximo de retrospecção, o rendimento anual, a curva de capital, etc., num período de tempo.
O inventor quantificou como um software comercial de transações de quantificação, que vem com um motor de retorno de alto desempenho, que usa um framework de retorno for-loop para realizar cálculos de quantificação vetorial, mais rápido; e unificou o código do retorno e do disco real, em parte resolvendo a dificuldade do retorno fácil e do disco real.
A estratégia de quantificação da linguagem de Mac, por exemplo, foi usada para criar um site para desenvolver ferramentas de quantificação de transações.www.fmz.comClique no Centro de Controle, Biblioteca de Políticas, Escolha de Políticas, Análise Analógica para acessar a página:Gráfico 5-8
Na interface de configuração de retrô, você pode personalizar de acordo com suas necessidades reais. Por exemplo: definir o tempo de retrô, o ciclo da linha K, o tipo de dados (datos de nível analógico ou dados de nível real; em comparação, o retrô de dados de nível analógico é mais rápido e o retrô de dados de nível real é mais preciso).
A estratégia da linguagem de Mac em sua ferramenta de negociação quantitativa tem dois modos de execução de retrospecção: modelo de preço de fechamento e modelo de preço em tempo real. O modelo de preço de fechamento executa o modelo até o final da linha K atual e executa o negócio quando a linha K inferior começa. O modelo de preço em tempo real executa um modelo a cada mudança de preço e negocia imediatamente quando o sinal de negociação é criado.Gráfico 5-9
O número de posições abertas por padrão refere-se ao número de posições abertas no momento da retrospecção, sendo o número máximo de posições abertas em uma única transação o número máximo de posições abertas em uma única transação, atribuído ao motor de retrospecção. O desvio entre o nível do preço de transação no disco real e o nível do preço de transação predeterminado geralmente é movido em direção desfavorável ao comerciante, resultando em perdas adicionais na transação.
A opção de futuro preenche a variedade de contrato a ser reexaminada, como rb000 ou rb888. A opção de disco real é usada principalmente para negociações em disco real e pode manter a configuração padrão durante o reexame. Se o bot for reiniciado automaticamente após a interrupção da política no disco real, o bot reinicia automaticamente a posição do sinal anterior, sem a necessidade de recalcular o sinal.Gráfico 5-10
A opção de negociação em tempo real é destinada principalmente a transações de moeda digital e pode ser mantida como configuração padrão no retrospecto. Pode ser especificado o volume de transações, o volume mínimo de transações, a precisão da moeda de preço, a precisão da variedade de transações, as taxas de processamento, o tempo de sincronização de contas, o intervalo de estatística de lucros e prejuízos, entre outros, além de definir o fator de alavancagem e outras configurações relacionadas.Figura 5-11
Antes de fazer o reteto, determine a sua estratégia de negociação, aqui nós usamos o exemplo da estratégia do termostato do termostato, que usa uma estratégia de tendência em um mercado de tendências, em um mercado de choques, de acordo com o estado do mercado.Figura 5-12 Na interface de re-test analógico, configurar as configurações de re-test, clique diretamente no botão para iniciar o re-test e, depois de algumas dezenas de segundos, os resultados do re-test serão apresentados imediatamente. No registro do re-test, o número de segundos de uso do re-test, o total de registros e o número de transações são registrados. Nele, as informações da conta são impressas para o resultado final do re-test estratégico: lucro médio, prejuízo de armazenamento, garantia, taxas de procedimento e estimativa de lucro.Figura 5-13
A barra de informações de estado registra a variedade de transações, o volume de ações, o preço de ações, o preço mais recente, o tipo de sinal mais recente, o preço mais alto e mais baixo após a ação, a quantidade de atualizações e o tempo, bem como informações de fundos. Além disso, o rótulo de lucro e prejuízo flutuante mostra a curva de capital detalhada da conta, incluindo indicadores de desempenho comuns: taxa de retorno, retorno anual, taxa de Sharpe, taxa máxima de volatilidade anual, taxa de retração, que basicamente atende às necessidades da maioria dos usuários.
Entre eles, o indicador de desempenho mais importante é: o índice de Sharpe. É um indicador abrangente que considera os ganhos e os riscos, mas também é um indicador de referência importante para medir o produto de um fundo.
A taxa de flutuação anual, como seu nome sugere, é a taxa de flutuação diária x o número de dias de negociação por ano, que é uma medida do risco do fundo, mas absolutamente não todo o risco. Por exemplo, a estratégia A tem uma grande taxa de flutuação, mas está sempre flutuando para cima, com bons retornos, a estratégia B tem uma pequena taxa de flutuação, mas está sempre parado, podemos dizer que a estratégia B é melhor do que a estratégia A?Figura 5-14
Por fim, no painel de informações do log, é registrado em detalhes o momento em que cada transação foi capturada, incluindo a hora específica da transação, o local de troca, o tipo de compra e venda e o tipo de posicionamento aberto, o preço de conclusão dos negócios capturados pelo mecanismo de rastreamento, o número de transações e as informações de impressão.Figura 5-15
Muitas vezes, ou na maioria das vezes, os resultados dos retrospectivos são muito diferentes dos esperados. Afinal, uma estratégia de lucro estável e duradouro não é tão fácil de obter, e isso requer sua capacidade de compreensão do mercado.
Se a sua estratégia de reavaliação é um resultado de perda de dinheiro, não se desanime, isso é normal. Veja primeiro se a lógica estratégica está mal escrita, se os parâmetros extremos são adotados, se as condições de liquidação são excessivas, etc.
Se a sua estratégia de retrospecção for muito boa, a curva de capital é perfeita, o Sharpe ratio é superior a 1 ou mais. Não se preocupe, a maioria das vezes, é possível eliminar esses problemas usando dados extra-sampulados e simulações de negociação real.
O que foi dito acima é uma descrição do processo completo de reavaliação da estratégia de negociação, que pode ser dito específico para cada detalhe. Note-se que o reavaliação de dados históricos é, afinal, um ambiente ideal para todos os riscos conhecidos. Por isso, o tempo de reavaliação da estratégia é melhor para passar por uma rodada de mercado de touros e ursos, o número de transações efetivas não deve ser inferior a 100 vezes, para evitar o desvio de alguns sobreviventes.
O mercado está sempre em mudança e evolução, e uma estratégia bem repassada no passado não significa que a estratégia será sempre boa no futuro. Não é possível que a estratégia apenas responda aos riscos conhecidos no ambiente de repassagem, mas sim aos riscos desconhecidos no futuro. Portanto, é muito necessário aumentar a capacidade de resistência ao risco e a universalidade da estratégia.
1. Tente copiar as estratégias desta seção e testar o relatório de desempenho 2o, tentar melhorar e otimizar as estratégias desta seção com base em sua própria experiência de negociação
Quando o nosso reexame de estratégia é concluído, o inventor do instrumento de negociação quantitativa produz uma variedade de indicadores de desempenho e gráficos de curvas de ganhos na página web. Mas, possivelmente, porque não estamos muito familiarizados com a definição e o conteúdo desses indicadores, o que pode levar a uma má estratégia de julgamento de grupos, este artigo começará com os principais conceitos de indicadores para ajudar a ler o relatório de reexame de estratégia e distinguir as vantagens e desvantagens da estratégia.
Quer seja um registro de dados de transações em disco real, quer seja um relatório de retestes que usa dados históricos de back-testing, os benefícios dos modelos são avaliados por meio de estatísticas sobre a situação das transações.
A questão fundamental é: quais são as estatísticas com as quais se deve fazer a comparação? Vejamos um exemplo: Supondo que tenhamos dois conjuntos de dados em testes com o mesmo período de tempo, podemos determinar qual dos modelos tem melhor desempenho?Figura 5-16
A resposta é que não. A monotonia do sistema de avaliação levará o sistema de negociação quantitativa a um impasse.
Os sistemas de negociação devem ser capazes de entrar em operação através de retrospecção histórica. Os sistemas de negociação que não possuem retrospecção histórica não podem lucrar em negociações reais a longo prazo.
Um sistema de negociação que pode ser revisto historicamente não é necessariamente um sistema de negociação útil, mas não é um sistema de negociação útil que não pode ser revisto historicamente. Em geral, precisamos analisar os relatórios de desempenho em termos de estabilidade, sustentabilidade, julgamento se estão sendo esperados, etc.Figura 5-17
Como mostrado acima, mas qualquer comerciante que tenha entrado em contato com a quantificação, pode ter encontrado uma série de termos de dados redundantes e incompreensíveis sobre o desempenho do teste de retrospectiva, e muitos desses dados de desempenho são contraditórios. Muitos iniciantes em quantificação, em vez disso, ficam com dúvidas sobre quais dados devem se concentrar.
Os indicadores de desempenho descritos no gráfico acima, geralmente podem ser divididos em várias categorias: índices de desempenho, análise de ciclo, curvas diversas, análise de transações extremas, etc. Mesmo de um ponto de vista estritamente do produto do fundo, a maioria é apenas a apresentação dos resultados do cálculo de retrospectiva, o que não deve significar muito, como: necessidade de limite de fundos de conta, ganhos de retenção, limites de confiança, etc. Até mesmo você só precisa se preocupar com alguns importantes. Abaixo, selecionei alguns dos indicadores de desempenho de retrospectiva, os mais importantes, como explicação detalhada.
A fórmula para calcular a regressão máxima é a seguinte:
Hailhydra2Muito bom artigo!
Quantificação do Vaziomarcação