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.
No aprendizado e testes anteriores, fomos expostos a vários módulos de categoria de negociação.
Por exemplo:
Estes foram utilizados não serão repetidos aqui.
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:
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:
Podemos ver que adicionamos três objetos de troca, representando três contas de troca diferentes, e o resultado do log backtest é 3.
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.
Aprenda um módulo de julgamento de condições com antecedência:
As condições de julgamento podem ser escritas da seguinte forma:
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.
Resultados da operação de ensaio posterior:
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())
}
}
}
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).
Resultados dos testes de regresso:
Se você chamar código de estratégia JavaScript:
function main () {
var text = exchange.GetCurrency()
Log(text)
}
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.
Resultados da operação de ensaio posterior:
Como o seguinte código de estratégia JavaScript:
function main () {
var id = exchange.Buy(_C(exchange.GetTicker).Last + 10, 0.1)
Log(id)
}
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
Os testes de retrospectiva mostram que:
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"
}
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
Em primeiro lugar, a fim de testar o cancelamento de todos os pedidos, não é óbvio para colocar um pedido.
Use o módulo
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:)
Utilize o módulo
Retire o ID da encomenda, passe-o para a posição tenon (côncava) do módulo
Operação de ensaio posterior:
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))
}
}
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.
Observe a ordem devolvida após a execução:
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))
}
Aprenderemos os módulos acima um por um e definiremos a troca de teste como futuros de commodities.
Configurações de backtesting:
O exemplo a seguir executa backtest com base nas configurações.
Os futuros de commodities têm horas de abertura e de fechamento.
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.
No módulo de execução de ordens
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
Exibição de testes de retrocesso:
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)
}
}
O uso de futuros de moeda digital é basicamente o mesmo que o de futuros de commodities em [8] acima
É 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