Type/to search
8
Follow
1364
Followers
Módulo de visualização para construir estratégia de negociação - primeira vista
Original
Created 2019-07-08 09:23:59  Updated 2024-12-23 17:57:33
 7
 8305

img

Módulo de visualização para construir estratégia de negociação - primeira vista

A programação visual sempre foi uma meta desejada pelos desenvolvedores de ferramentas de software, mesmo no campo da negociação quantitativa.
Porque a abordagem de visualização "o que você vê é o que você obtém" reduz muito o limite técnico para o desenvolvimento de programação.
Os usuários não precisam mais lidar com um monte de codificação chata. Eles só precisam usar seus cérebros, imaginação e pensamento lógico, e focar no negócio em si.
Você pode realizar um programa que você deseja, não é incrível!

Então vamos entrar juntos no campo da programação visual de estratégias de negociação quantitativa!

  • Inventor inicial da programação visual quantizada

    Após efetuar login em https://www.fmz.com, registre uma conta (se já tiver se registrado, faça login diretamente) e clique em: Centro de Controle->Biblioteca de Políticas->Nova Política.

    img

    Podemos ver uma estratégia de visualização inicial.
    Ele somente emite as informações de ativos da conta da exchange configurada padrão (o primeiro objeto de exchange adicionado no backtest ou robô).
    (Como mostrado abaixo)

    img

    Antes de começarmos a aprender como usar a visualização, podemos primeiro entender alguns conceitos de design de visualização.

    • 1. Emenda

      Uma observação cuidadosa revela que todos os módulos têm encaixes (côncavos) e encaixes (convexos), o que significa que os módulos podem ser "conectados" e "conectados".
      Se os códigos funcionais representados por dois módulos puderem ser conectados, eles serão encaixados quando você aproximar a espiga e o encaixe dos dois módulos.

      img

    • 2. Configurações e ajustes do módulo

      Alguns módulos possuem algumas configurações especiais, por exemplo:

      img

      Você pode arrastar o módulo "Projeto" à esquerda para o módulo "Unir", para poder adicionar uma posição de encaixe e espiga, adicionando assim uma posição para emendar o texto.
      Dessa forma, você pode fazer alguns ajustes e configurações no módulo clicando na pequena engrenagem.

    • 3. Parâmetros de entrada padrão do módulo

      Alguns módulos exigem parâmetros de entrada, que podem ser valores, strings, etc.
      Se você não adicionar variáveis ​​como parâmetros de entrada do módulo, o módulo será executado de acordo com os parâmetros de entrada padrão.

      img
      Um módulo de cálculo como este para encontrar raízes quadradas gera os resultados dos cálculos deste módulo.
      img
      Como você pode ver, se o parâmetro de entrada estiver ausente, o valor padrão 9 será usado como parâmetro de entrada para calcular a raiz quadrada de 9.
      img

      Claro, se você quiser usar um módulo variável como um parâmetro de entrada, você pode conectar diretamente o módulo variável à posição de encaixe e espiga (recesso).
      img

    • 4. Operação

      O módulo pode ser clicado e arrastado com o botão esquerdo do mouse.
      Os módulos podem ser copiados usando ctrl + c e colados usando ctrl + v, tão convenientemente quanto copiar e colar código ou texto.
      A área de operação pode ser ampliada ou reduzida usando a roda do mouse, e todos os módulos serão ampliados ou reduzidos.
      Clique e segure uma área em branco na área de operação e arraste para mover a área de operação.
      A lixeira à direita registra os módulos que foram excluídos recentemente.
      Mais importante, depois de montar a estratégia do módulo, não se esqueça de clicar em “Salvar”.

  • Introdução ao módulo Ferramentas de visualização

    Você pode ver que há muitas categorias de módulos no lado esquerdo da área de edição visual, e há muitos módulos visuais disponíveis em cada categoria.

    img Há 11 categorias no total.

    • Módulo de ferramentas:

      img


      • 1. Informações de saída:

        Este módulo é normalmente usado em combinação com módulos de texto, conforme mostrado abaixo:
        img
        Você pode inserir uma string no módulo de classe de texto para que, quando você executar o módulo "informações de saída", o conteúdo da string no módulo de texto seja impresso.
        img
        Teste retrospectivo:
        img

        Como código de linguagem JavaScript:

        function main(){ Log("你好,可视化编程!") }

      • 2. Envio do WeChat:

        Este módulo se parece com "Informações de saída", exceto que ele emite informações e as envia para a conta WeChat vinculada à conta atual.
        img
        img

        Como código de linguagem JavaScript:

        function main () { Log("微信推送!@") }

      • 3. Lançando uma exceção

        O módulo throw exception permite que o programa gere um erro e então interrompa a execução do programa (sem escrever código de tratamento de exceção).
        img

        Isso é semelhante à estratégia do JavaScript, em que a função throw "string a ser gerada" é executada diretamente na função principal.

        function main () { throw "第一句就抛出异常,让程序停止!" }

        Resultados do backtesting:
        img
        Geralmente é usado com mais frequência durante a depuração, por exemplo, quando você deseja que o programa pare sob uma determinada condição e imprima alguns dados naquele momento para facilitar a observação.
        Ou você pode colocar um módulo de geração de exceções no fluxo de código onde podem ocorrer problemas, para que o programa possa relatar erros e descobrir alguns erros.


      • 4. Hibernação

        Módulo de hibernação
        img
        Como na estratégia JavaScript:

        function main () { Sleep(1000 * 5) }

        Teste o módulo de hibernação:
        img
        Resultados do backtesting:
        img


      • 5. Impressão de renda

        img

        Este módulo é semelhante à função LogProfit da API da plataforma de negociação quantitativa do Inventor, imprimindo o log de lucro e desenhando automaticamente a curva de lucro com base nos parâmetros de entrada.

        Por exemplo:
        img
        A execução do backtest é mostrada abaixo:
        img
        O código de política JavaScript correspondente é o seguinte:

        function main () { LogProfit(1) Sleep(1000 * 5) LogProfit(2) Sleep(1000 * 5) LogProfit(3) Sleep(1000 * 5) LogProfit(2) Sleep(1000 * 5) LogProfit(5) }

        Ele pode ser emendado em qualquer local onde você queira gerar informações de receita.


      • 6. Laço

        img
        O módulo de loop pode encapsular uma série de combinações de módulos emendados e permitir que essa combinação de módulos seja executada em um loop.

        teste:
        img
        Resultados do backtesting:
        img
        Pode-se observar que após o módulo de loop envolver a combinação de módulos que consiste em Print Profit e Sleep, a combinação de módulos será executada continuamente.


      • 7. Execução do loop a cada N segundos

        img
        O uso deste módulo é basicamente o mesmo do módulo de loop, a única diferença é que este módulo tem uma função de suspensão integrada.
        img


      • 8. Processamento de precisão

        img
        Este módulo pode ser usado quando módulos variáveis ​​ou valores numéricos precisam controlar a precisão. O valor numérico da parte do parâmetro de entrada será emitido como o valor numérico das casas decimais especificadas de acordo com as configurações.

        Por exemplo, o número 3,1415926535897 é processado com precisão.
        img

        O backtesting mostra:
        img


      • 9. Limpe o log

        img

        Usado para limpar logs. Dependendo dos parâmetros de entrada, uma parte dos logs pode ser retida.
        Conforme a documentação da API:

        LogReset()

      • 10. Limpe o registro de renda

        img

        Usado para limpar o log de receita. Dependendo dos parâmetros de entrada, uma parte do log pode ser retida.
        Conforme a documentação da API:

        LogProfitReset()

      A seguir estão alguns módulos de ferramentas usados ​​com frequência

      • 11. Módulo funcional para obtenção de determinado atributo do mercado

        img

        Este módulo de ferramenta precisa ser usado em conjunto com o módulo de mercado no "Tipo de módulo de negociação", conforme mostrado na figura:
        img

        Use o módulo de informações de saída para gerar o preço de transação mais recente do mercado de ticker mais recente:
        img

        O backtesting mostra:
        img

        Como o código de estratégia JavaScript:

        function main () { Log(exchange.GetTicker().Last) }
      • 12. Módulo para obtenção dos atributos de uma determinada barra de dados K-line

        img

        Este módulo também precisa ser usado junto com o módulo de aquisição de dados K-line no "Tipo de módulo de negociação".

        Primeiro crie um módulo variável e nomeie-o: K-line.
        img
        Em seguida, obtenha os dados da linha K, use o módulo de dados da linha K para obtê-los e atribua-os ao módulo de variável: "linha K".
        img
        Em seguida, use o módulo de comprimento da lista no "Tipo de módulo de lista" para obter o comprimento do módulo variável da linha K, que é usado para especificar de qual barra da linha K obter dados.
        img
        Costure, conforme mostrado:
        img
        Quando o backtest é executado, o registro de data e hora da última barra da linha K é impresso.
        img

      • 13. Módulo para obtenção de dados de ordens no livro de ordens

        img

        Ele também precisa ser usado junto com o módulo Obter Dados de Profundidade no "Tipo de Módulo de Transação".

        img

        Defina o índice como 0, defina uma ordem de venda e obtenha as informações da ordem de venda.

        img

        Como o código de estratégia JavaScript:

        function main () { Log(exchange.GetDepth().Asks[0]) }
      • 14. Módulo para obtenção de determinado atributo em informações de ativos

        img
        Este módulo precisa ser usado em conjunto com o módulo Obter informações de ativos.
        img

        Por exemplo: imprimir a quantidade de moedas disponíveis na conta corrente
        img

        O backtesting mostra:
        img

        Como na estratégia JavaScript:

        function main () { Log(exchange.GetAccount().Stocks) }
      • 15. Módulo para obter um determinado atributo em dados de pedidos

        img

        Este módulo é usado para obter o valor de um determinado atributo nos dados do pedido, como o preço ou a quantidade da primeira venda no livro de pedidos (exemplo número 13).
        img

        Resultados do backtesting:
        img
        Como na estratégia JavaScript:

        function main () { Log(exchange.GetDepth().Asks[0].Price) }

        Ele também pode ser usado para obter um determinado atributo nas informações do pedido retornadas pelo "Módulo de Detalhes do Pedido de Consulta" (que será explicado na seção avançada).

      • 16. Módulo para obtenção dos atributos de uma determinada posição nas informações de posição

        img

        Da mesma forma, ele deve ser usado junto com o "Get Futures Position Module". Deve-se notar que os dados de posição retornados pelo Get Futures Position Module são uma matriz (lista), que é uma estrutura de dados contendo posições de diferentes contratos e direções . Portanto, você deve especificar o índice ao usá-lo.

        Depois de aprender tanto, vamos combinar uma operação de hedge, ou seja, fazer hedge tanto de contratos de curto prazo quanto de contratos futuros ao mesmo tempo.
        Fazemos um hedge de arbitragem positivo, ou seja, abrimos um contrato a termo curto, 1 contrato, e abrimos um contrato longo no curto prazo.

        img

        Resultados do backtesting:
        img

Exemplo de estratégia de visualização:

Mais estratégias estão disponíveis em: https://www.fmz.com/square

Outros artigos desta série

Programação chata pode ser facilmente concluída usando blocos de construção. Experimente, é muito interessante!

Related Recommendations
Comment
All comments (7)

    指标里没有cci,我如果要用cci是不是就不能用这个可视化去创建

    4 years ago

    这个系列里的文章有讲如何实现自定义的模块。

    4 years ago

    除了深入,初识,进阶这三个还有本系列其他的文章吗,为什么我没找到自定义模块和指标模块用法呢

    4 years ago

    请问可视化中的指标模块是怎么使用的

    5 years ago

    这个系列文章可以看完,又讲。

    5 years ago

    好的,谢谢。找到了

    5 years ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)