Módulo de visualização para construir estratégia de negociação - compreensão avançada

Autora:Lydia., Criado: 2022-12-13 14:11:36, Atualizado: 2023-09-20 09:53:59

img

Módulo de visualização para construir estratégia de negociação - compreensão avançada

Aprendemos o Módulo de Visualização para Construir Estratégia de Negociação - Primeiro Conhecimento, e temos uma compreensão conceitual da construção de módulos visuais e splicing, Em seguida, é fácil aprender a utilizar outros módulos. É possível combinar algumas funções mais complexas.

Modulo de categoria de negociação

No aprendizado e testes anteriores, fomos expostos a vários módulos de categoria de negociação. Por exemplo: Exchange Get Ticker módulo Exchange Get OHLC módulo - Não.

Estes foram utilizados não serão repetidos aqui.

1. Obtenha o número de trocas

img

Ao escrever estratégias para usar robôs de negociação, você pode adicionar mais de um objeto de troca, como estratégias de hedging. Ou você precisa atravessar (percorrendo significa visitar os objetos de troca um por um) os objetos de troca para acessar o mercado. É aqui que entra em jogo o módulo para obter o número de trocas.

Podemos imprimir o número de trocas atualmente configuradas em uma estrutura simples:

img

Na verdade, é como chamar tal código de estratégia JavaScript:

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

Vamos analisar os resultados da execução deste módulo combinado:

img img img

Podemos ver que adicionamos três objetos de troca, representando três contas de troca diferentes, e o resultado do log backtest é 3.

2. Obtenha os nomes das trocas

img

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

img

Aprenda um módulo de julgamento de condições com antecedência:

img

As condições de julgamento podem ser escritas da seguinte forma:

img

Usamos o módulo de loop para atravessar os nomes de troca adicionados. Usamos o módulo de julgamento de condição para julgar se a contagem de loop atual corresponde ao nome da troca a ser impressa.

img

Resultados da operação de ensaio posterior:

img

Como 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. Obter o par de negociação atual da troca

img

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

img

Resultados dos testes de regresso:

img img img

Se você chamar código de estratégia JavaScript:

function main () {
    var text = exchange.GetCurrency()
    Log(text)
}

4. Módulo de ordem

img

Este módulo é muito importante para a operação da ordem. A primeira posição tenon (côncava) é incorporada com uma variável de preço, que é usada para especificar o preço da ordem. A segunda posição do tenão (côncava) está incorporada com a variável de quantidade de ordem, que é usada para especificar a quantidade de ordem.

Por exemplo, nós emoldurar um exemplo de colocar uma ordem de compra na adição de um preço de deslizamento de 10 yuans com base no preço mais recente dos dados do mercado de ticks atual, com a quantidade de ordem definida em 0,1 moedas, e imprimir o ID da ordem.

img

Resultados da operação de ensaio posterior:

img

Como o seguinte código de estratégia JavaScript:

function main () {
    var id = exchange.Buy(_C(exchange.GetTicker).Last + 10, 0.1)
    Log(id)
}

5. Obter ordens pendentes do módulo de par de negociação atual

img

Este módulo retornará todas as ordens pendentes no estado inacabado do par de negociação atual. Por exemplo, modificamos ligeiramente o módulo de ordem do exemplo acima[4] e mudamos o preço de 10 yuans adicionados ao colocar uma ordem para menos 10 yuans. A ordem não será fechada imediatamente, mas será colocada na profundidade da transação (ou seja, comprar um, comprar dois, comprar um certo nível em N), desta forma, a ordem estará no estado de ordens pendentes esperando para ser preenchida. Em seguida, usamos o módulo de Get pending orders do par de negociação atual para obter a lista de ordens em status PENDING (esperando para ser preenchido). A fim de evitar o impacto na observação final do backtest devido às ordens sendo preenchidas no mercado subsequente, após o módulo Get pending orders of the current trading pair executar, imprimimos a lista de ordens e usamos o módulo Throw exception imediatamente para parar o programa.

img

Os testes de retrospectiva mostram que:

img

O preço da ordem de compra foi 10 yuans mais baixo do que o último preço naquele momento, por isso não será preenchido imediatamente. Em seguida, obtenha a ordem no estado de transação pendente e imprima-a. Finalmente, uma exceção é lançada para parar o programa.

Todo o módulo montado é como uma chamada para a 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 o módulo de encomenda

img

Este módulo é usado para cancelar a ordem.

Existem muitos cenários que exigem tais operações ao escrever estratégias:

Cancelem todas as ordens pendentes.

Não há dúvida de que o Cancel order module deve ser usado. Ao aprender o módulo de ordem de cancelamento, podemos usar [5] para obter ordens pendentes do módulo de par de negociação atual e combinar para alcançar essa função.

Em primeiro lugar, a fim de testar o cancelamento de todos os pedidos, não é óbvio para colocar um pedido.

img

Use o módulo Traverse every element in the list no módulo Loop para percorrer as ordens na lista atual de ordens pendentes.

img

Durante a travessia, cada ordem recuperada é atribuída um valor à ordem do módulo variável (criada no tipo de módulo variável, conforme mostrado abaixo:)

img

Utilize o módulo Util:

img

Retire o ID da encomenda, passe-o para a posição tenon (côncava) do módulo Cancel order e o módulo Cancel order executa o cancelamento da encomenda.

Operação de ensaio posterior:

img

Use a descrição da estratégia 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. Módulo para obter os detalhes de um pedido com base no seu ID de ordem

img

A posição tenonal (côncava) do módulo está ligada a um módulo de variável ID de ordem e os detalhes da ordem podem ser devolvidos.

img

Observe a ordem devolvida após a execução:

img

Em comparação com os resultados de execução do exemplo [5], pode-se concluir que a encomenda impressa é uma informação de encomenda separada sem parênteses []. Porque o exemplo [5] retorna uma lista, mas este exemplo retorna uma informação de ordem separada (obtida com base no módulo da variável ID sobre a posição do tenon passada pelo módulo).

O exemplo acima é semelhante à execução da estratégia 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

Aprenderemos os módulos acima um por um e definiremos a troca de teste como futuros de commodities.

Configurações de backtesting:

img

O exemplo a seguir executa backtest com base nas configurações.

  • Julgar o módulo de estado de conexão entre os futuros de mercadorias CTP e o servidor da empresa de futuros

img

Os futuros de commodities têm horas de abertura e de fechamento.

  • Modulo de contrato definido

img

Quando o objeto da troca for configurado como uma troca de futuros, se a troca não estabelecer um contrato e obter as informações de mercado diretamente, será notificado um erro.

Definimos o contrato como MA909, o principal contrato de metanol no momento.

Desta forma, obtém-se o valor do preço mais recente no mercado atual do contrato MA909.

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

No módulo de execução de ordens

img

A direcção da ordem deve ser especificada, porque os futuros têm: compra: posições longas abertas Vender: posições abertas curtas closebuy: fechar posições longas Closesell: fechar posições curtas Quatro direcções (existem mais duas direcções para os futuros de matérias-primas: closebuy_today para fechar hoje as posições longas e closesell_today para fechar hoje as posições curtas).

Por exemplo, se o módulo de ordens for definido como buy, existem dois significados de abertura de posições longas e fechamento de posições curtas, o que é ambíguo. Por conseguinte, o módulo Estabelecer a direção da ordem para negociação de futuros é necessário para definir uma direção clara da ordem.

img

Exibição de testes de retrocesso:

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("The commodity futures front-end processor is not connected")
        }
        Sleep(1000)
    }
}

9. Módulo de negociação de futuros de moeda digital

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

  • Tomando como exemplo o OKEX, o código do contrato pode ser:
    • this_week: esta semana
    • next_week: próxima semana
    • trimestre: trimestre
    • swap: perpétuo
  • BitMEX:
    • XBTUSD
    • ETHUSD
  • Modulo de alavancagem definido

img

É utilizado para definir a alavancagem dos futuros de moeda digital.

#Note: Backtesting is not supported.

Como a estratégia JavaScript:

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

Exemplos de estratégias de visualização:

https://www.fmz.com/strategy/121404 https://www.fmz.com/strategy/129895 https://www.fmz.com/strategy/123904 https://www.fmz.com/strategy/122318Para mais estratégias, consulte:https://www.fmz.com/square

Outros artigos desta série

  • Módulo de visualização para a construção de estratégias de negociação - aprofundamento (https://www.fmz.com/digest-topic/9509) Módulo de visualização para a construção de uma estratégia de negociação - Primeiro conhecimento (https://www.fmz.com/bbs-topic/9814) A programação chata pode ser facilmente completada por blocos de construção.

Relacionados

Mais.