Type/to search
8
Follow
1364
Followers
Módulo de visualização para construir estratégias de negociação - avançado
Original
Created 2019-07-17 10:22:20  Updated 2023-10-24 21:40:50
 3
 4790

img

Módulo de visualização para construir estratégias de negociação - avançado

Aprenda a estratégia de negociação da construção de módulos visuais - capítulo de introdução, e tenha uma compreensão conceitual da construção e junção de módulos visuais.
Então é fácil aprender a usar outros módulos.
Algumas funções mais complexas podem ser combinadas.

  • Módulo de categoria de transação

    Em estudos e testes anteriores, entramos em contato com vários módulos de "categoria de transação".
    Por exemplo:
    Módulo "Cotações de Câmbio"
    Módulo "Troca Obter K-line"
    ...

    Não entrarei em detalhes sobre aqueles que já foram usados.

    • 1. Obtenha o número de trocas

      img

      Ao escrever uma estratégia para negociar com um robô, você pode adicionar mais de um objeto de troca, por exemplo, uma estratégia de hedge.
      Ou você precisa percorrer (travessia significa visitar cada um deles, um por um) os objetos de troca para acessar as condições de mercado.
      Neste momento, você precisa usar um módulo para obter o número de trocas.

      Podemos primeiro usar uma estrutura simples para imprimir o número de trocas atualmente configuradas:
      img

      Na verdade, é como chamar o seguinte código de política JavaScript:

      function main () { Log(exchanges.length) }

      Vejamos os resultados da execução deste módulo combinado:
      img

      Você pode ver que adicionamos 3 objetos de câmbio, representando três contas de câmbio diferentes, e o resultado da saída do log de backtest é 3.

    • 2. Obtenha o nome da troca

      img

      Ao adicionar três objetos de troca, a caixa suspensa mostrará três opções.
      Aprenda um módulo de loop com antecedência, no tipo loop.
      img

      Vamos aprender um módulo de julgamento condicional com antecedência:
      img
      A condição de julgamento pode ser escrita como:
      img

      Usamos o módulo loop para iterar sobre os nomes de troca adicionados
      Use o módulo de julgamento condicional para determinar se a contagem de loop atual corresponde ao nome da troca a ser impressa.

      img

      Resultados da execução do backtest:
      img

      Como o código de estratégia JavaScript:

      function main () { for (var i = 1 ; i <= exchanges.length ; i++) { if (i == 1) { Log(exchanges[0].GetName()) } else if (i == 2) { Log(exchanges[1].GetName()) } else { Log(exchanges[2].GetName()) } } }
    • 3. Obtenha o par de negociação atual da bolsa

      img

      Um exemplo simples obtém o par de negociação do primeiro objeto de troca atualmente definido e o atribui à variável de texto (criada na categoria de variável com antecedência).

      img
      Resultados do backtesting:
      img

      Se você chamar o código da política JavaScript:

      function main () { var text = exchange.GetCurrency() Log(text) }
    • 4. Módulo de pedidos

      img
      Este módulo é muito importante e é usado para colocação de pedidos. A variável de preço é incorporada na primeira posição do encaixe (ranhura) para especificar o preço do pedido. Você também pode inserir diretamente um valor fixo.
      A segunda posição do espigão (ponto) incorpora a variável de quantidade do pedido, que é usada para especificar a quantidade do pedido.

      Por exemplo, criaremos um exemplo de colocação de uma ordem de compra com base no preço mais recente dos dados de mercado de ticks atuais, com um deslizamento de 10 yuans, definindo a quantidade da ordem para 0,1 moedas e imprimindo o ID da ordem.
      img

      Resultados da execução do backtest:
      img

      Como o seguinte código de política JavaScript:

      function main () { var id = exchange.Buy(_C(exchange.GetTicker).Last + 10, 0.1) Log(id) }
    • 5. Módulo para obtenção da ordem de confiança do par de negociação atual

      img

      Este módulo retornará todas as ordens não finalizadas para o par de negociação atual. A estrutura retornada é uma lista (array), que pode ser processada por módulos do tipo lista (operações de travessia, etc.).
      Por exemplo: modificamos ligeiramente o exemplo do módulo de pedido [4] acima e alteramos o preço de 10 yuans adicionado ao fazer um pedido para uma subtração de preço de 10 yuans. A ordem não será executada imediatamente, mas ficará pendente na profundidade de compra e venda (ou seja, em um determinado nível entre Compra 1, Compra 2 e Compra N), de modo que a ordem estará em uma ordem pendente aguardando execução.
      Em seguida, usamos o módulo "Obter a ordem de confiança do par de negociação atual" para obter uma lista de ordens no estado PENDENTE (aguardando execução).
      Para evitar a execução de ordens em condições de mercado subsequentes e afetar a observação final do backtest, após o módulo "Obter a ordem de confiança do par de negociação atual" ser executado e a lista de ordens ser impressa, usamos imediatamente o "Lançar exceção " módulo para parar o programa.

      img

      O backtesting mostra:
      img

      O preço da ordem de compra é 10 yuans menor que o preço mais recente naquele momento, então a transação não será concluída imediatamente.
      Depois, pegue os pedidos que estão aguardando execução e imprima-os.
      Por fim, uma exceção é lançada para interromper o programa.

      Todo o módulo montado é como chamar uma estratégia JavaScript:

      function main () { var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1) Log(id) Log(exchange.GetOrders()) throw "stop" }
    • 6. Cancelar módulo de pedido

      img

      Este módulo é usado para cancelar um pedido.

      Há muitos cenários em que isso é necessário ao escrever políticas:

      Cancele todos os pedidos pendentes.

      Sem dúvida, isso exigirá o uso do "módulo de cancelamento de ordem". Ao aprender o módulo de cancelamento de ordem, podemos usar [5] para obter o módulo para a ordem de confiança do par de negociação atual e combiná-los para atingir essa função.

      Primeiro, para testar o cancelamento de todos os pedidos, fazer um pedido não é muito óbvio, começamos fazendo dois pedidos com preços e quantidades diferentes para distinguir os dois pedidos.

      img

      Use o módulo "Percorrer cada elemento na lista" no módulo do tipo loop para percorrer os pedidos na lista de pedidos pendentes atual.
      img
      Durante a travessia, cada ordem recuperada é atribuída ao módulo variável order (criado no tipo de módulo variável, conforme mostrado abaixo:)
      img
      Use o módulo de tipo de ferramenta:
      img
      Retire o ID do pedido e passe-o para a posição côncava do módulo de cancelamento de pedido, e o módulo de cancelamento de pedido executa o pedido de cancelamento.

      Execução de backtest:
      img

      Usando a descrição da política JavaScript:

      function main () { var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1) Log(id) var id2 = exchange.Buy(_C(exchange.GetTicker).Last - 12, 0.2) Log(id2) var orders = exchange.GetOrders() Log(orders) for (var i in orders) { var order = orders[i] Log(exchange.CancelOrder(order.Id)) } }
    • 7. Um módulo para obter informações detalhadas de um pedido com base no ID do pedido

      img

      Este módulo pode retornar informações detalhadas do pedido conectando um módulo variável de ID do pedido à posição de encaixe e espiga.

      img

      Preste atenção na ordem retornada após a execução:
      img

      Comparado com os resultados da execução no exemplo [5], pode-se descobrir que a ordem impressa é uma informação de ordem separada.[] Entre colchetes.
      Como o exemplo [5] retorna uma lista, este exemplo retorna uma única informação de ordem (obtida com base na variável ID module na posição do encaixe passada pelo módulo).

      O exemplo acima é equivalente à execução de uma política JavaScript:

      function main () { var id = exchange.Buy(_C(exchange.GetTicker).Last - 10, 0.1) Log(exchange.GetOrder(id)) }
    • 8. Módulo de negociação de futuros

      Estudaremos os módulos acima um por um e definiremos a bolsa de teste para futuros de commodities.

      Configurações de backtesting:
      img
      O exemplo a seguir faz um backtest dessa configuração.

      • Módulo para julgar o status da conexão entre os servidores de futuros de commodities CTP e da empresa de futuros

        img

        Futuros de commodities têm horários de abertura e fechamento. Quando o mercado está fechado, você não consegue se conectar.

      • Configurar o módulo de contrato

        img

        Quando o objeto de troca é configurado como uma bolsa de futuros, se você não definir o contrato e obter diretamente as informações de mercado, um erro será relatado:
        img

        Definimos o contrato para MA909, que é o principal contrato atual para metanol.
        img
        Dessa forma, obtém-se o valor de preço mais recente no mercado de ticks atual do contrato MA909.

      • Configurar módulo de direção de ordens de negociação de futuros

        No módulo de ordem de execução
        img
        A direção da ordem precisa ser especificada porque os futuros têm:
        comprar: abrir uma posição longa
        vender: abrir uma posição curta
        closebuy: fechar posição longa
        closesell: fechar posição vendida
        Quatro direções (futuros de commodities têm mais duas direções: closebuy_today fecha posições compradas hoje, closesell_today fecha posições vendidas hoje).

        Por exemplo, se o módulo de ordens estiver definido para comprar, haverá dois significados: abrir uma posição longa e fechar uma posição curta, o que cria ambiguidade.
        Portanto, o módulo "Definir direção da ordem de negociação de futuros" é necessário para definir uma direção clara da ordem.

        img

        O backtesting mostra:
        img

        Como o código de estratégia JavaScript:

        function main () { while (true) { if (exchange.IO("status")) { exchange.SetContractType("MA909") Log(exchange.GetTicker().Last) exchange.SetDirection("buy") Log(exchange.Buy(1000, 1)) throw "stop" } else { Log("未连接商品期货前置机") } Sleep(1000) } }
    • 9. Módulo de negociação de futuros de criptomoedas

      O uso de futuros de moeda digital é basicamente o mesmo que o uso de futuros de commodities em [8] acima.

      • Tomando o OKEX como exemplo, o código do contrato pode ser:

        • this_week : esta semana
        • next_week: semana que vem
        • trimestre: trimestre
        • troca: perpétuo
      • BitMEX :

        • XBTUSD
        • ETHUSD
      • Configurando o módulo de alavancagem

        img

        Usado para definir alavancagem para futuros de moeda digital.

        # 注意 : 回测不支持。

        Como na estratégia JavaScript:

        function main () { exchange.SetMarginLevel(10) }

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 (2)

    学了一个多月编程还是写不了策略,,现在全靠积木了!

    7 years ago

    感谢支持,这个系列文章会继续做的。
    其实根据每个范例后面对应的JavaScript策略代码,很容易就能掌握用JS 写策略的。

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