[TOC]

O desenvolvimento de estratégias na plataforma de negociação quantitativa Inventor é inseparável do design de parâmetros estratégicos e interações estratégicas. A plataforma de negociação quantitativa Inventor está comprometida em fornecer ferramentas de negociação quantitativa simples, fáceis de usar e poderosas, além de iterar continuamente o design e as funções do produto. Ao atualizar os “parâmetros de estratégia” e os “controles de interação”, a flexibilidade de design de parâmetros e interações no design de estratégia foi aumentada ainda mais. As funções dos parâmetros de estratégia e controles interativos foram aprimoradas para tornar alguns requisitos de design mais fáceis de serem alcançados. Neste artigo, vamos dar uma olhada em dois aspectos essenciais do design de estratégia: “design de parâmetros de estratégia” e “design de interação de estratégia”.
Os tipos de parâmetros de estratégia no Inventor Quant não aumentaram e ainda são os cinco tipos de parâmetros com os quais estamos familiarizados:
Então você certamente me perguntará: qual conteúdo foi adicionado e otimizado nesta atualização da plataforma?
Esta atualização adiciona “configuração de componente” para controles de vinculação de parâmetros, simplifica as funções de “agrupamento” e “dependência de parâmetro” e integra essas duas funções na “configuração de componente”. Para o valor padrão do parâmetro, uma opção “opcional”/“obrigatório” é adicionada para determinar se a estratégia está qualificada para operação. Se o parâmetro for definido como “obrigatório”, mas nenhum valor específico for escrito no controle de parâmetro quando o a estratégia é executada, Parâmetros, a estratégia não pode ser executada neste momento. Agora que temos uma compreensão geral das mudanças de atualização, vamos testá-las em detalhes.

Já falamos brevemente sobre as funções “opcionais”/“obrigatórias”, então não entrarei em detalhes aqui. O seguinte explica principalmente “configuração de componente”. A configuração de componente pode ser entendida simplesmente como:
Defina as várias propriedades, tipos e regras dos controles aos quais os parâmetros correspondem (estão vinculados). O controle de limite padrão para parâmetros de tipo numérico (tipo de número) é uma caixa de entrada. Você pode definir regras para os dados recebidos pela caixa de entrada, ou seja, use os controles “valor mínimo” e “valor máximo” na figura para definir eles.
Além do controle de caixa de entrada padrão, a plataforma adicionou:

Parâmetros do tipo booleano são especiais porque têm apenas um controle correspondente. É o controle de switch padrão. E o valor padrão do parâmetro também é necessário.
Como os valores booleanos são verdadeiros ou falsos, eles são opções binárias. Portanto, é muito apropriado usar um controle de chave para corresponder a esse tipo de parâmetro.
Geralmente, parâmetros do tipo booleano são usados para controlar se certas funções de estratégia estão habilitadas na plataforma.

Além do controle de caixa de entrada padrão, a plataforma adicionou:
texto Em “Tipo de componente”, selecione a configuração: Texto. O controle da caixa de entrada na interface de estratégia correspondente ao parâmetro atual mudará para uma caixa de texto maior. As diferenças entre um controle de texto e um controle de caixa de entrada comum são: o texto inserido na caixa de texto pode ser quebrado, e a caixa de texto pode ajustar o tamanho do controle. O valor variável do parâmetro interface é: string.
Selecionador de tempo Em “Tipo de componente”, selecione a configuração como: Seletor de tempo. O controle da caixa de entrada na interface de estratégia correspondente aos parâmetros atuais se tornará um controle para definir hora e data. O “Time Selector for Component Type with String Type Parameter” é diferente do “Time Selector for Component Type with Numeric Type Parameter”. A seleção de tempo para o parâmetro do tipo string tem uma opção adicional “Time Format”, que pode definir o Select do controle Formatar:
Seletor de cores Em “Tipo de componente”, selecione a configuração como: Seletor de cores. O controle da caixa de entrada na interface de estratégia correspondente ao parâmetro atual se tornará um controle de seleção de cores. Geralmente usado para projetar parâmetros para definir cores. O valor variável do parâmetro interface é: string (o valor da cor correspondente à cor selecionada, por exemplo: #7e1717).

O controle padrão correspondente ao parâmetro do tipo caixa suspensa é uma caixa suspensa, mas desta vez muitas atualizações foram feitas na caixa suspensa simples de seleção única anterior:
Além do controle de caixa suspensa padrão, desta vez a plataforma adiciona:

O parâmetro do tipo string criptografada também é especial e tem apenas um controle correspondente. É o controle de caixa de entrada criptografada padrão.
Na plataforma, controles do tipo string criptografada geralmente são usados para definir algumas informações confidenciais, como chaves secretas, senhas, etc. Esses valores de parâmetros de entrada serão transmitidos após serem criptografados localmente.
O valor variável do parâmetro interface é: string.
Para todos os tipos de parâmetros de interface de estratégia acima, esta atualização integra as funções anteriores de “agrupamento de parâmetros” e “dependência de parâmetros” na “configuração de componentes”. Há configurações de “Agrupamento” e “Filtro” na configuração do componente de todos os parâmetros da interface.
Agrupamento Você pode inserir diretamente os rótulos que deseja agrupar no controle da caixa suspensa do grupo e usar a tecla Enter para confirmar a entrada do grupo. O sistema registrará o rótulo inserido atualmente nas opções de agrupamento. Então você pode atribuir grupos aos parâmetros de interface atuais. Após o agrupamento, na interface de backtesting de estratégia/negociação real, os parâmetros marcados como um grupo serão exibidos em uma área de agrupamento.
Filtros Insira algumas expressões no controle de filtro para determinar se o parâmetro atual precisa ser ativado e exibido. Esta função permite que o parâmetro atual seja exibido ou ocultado dependendo de uma determinada configuração de parâmetro. Exemplos de expressão de filtro:
过滤器格式: a>b , a==1 , a , !a , a>=1&&a<=10 , a>b
Aqui, a e b representam variáveis de parâmetros de interface de estratégia.
Se as explicações acima não forem muito intuitivas, a melhor maneira de entendê-las é usar e testar estas funções de parâmetros:
Tomemos como exemplo a política de linguagem JavaScript:
function main() {
Log("---------------------------开始测试数字类型参数---------------------------")
Log("变量pNum1:", pNum1, ", 变量值类型:", typeof(pNum1))
Log("变量pNum2:", pNum2, ", 变量值类型:", typeof(pNum2))
Log("变量pNum3:", pNum3, ", 变量值类型:", typeof(pNum3))
Log("变量pNum4:", pNum4, ", 变量值类型:", typeof(pNum4))
Log("---------------------------开始测试布尔类型参数---------------------------")
Log("变量pBool1:", pBool1, ", 变量值类型:", typeof(pBool1))
Log("变量pBool2:", pBool2, ", 变量值类型:", typeof(pBool2))
Log("---------------------------开始测试字符串类型参数---------------------------")
Log("变量pStr1:", pStr1, ", 变量值类型:", typeof(pStr1))
Log("变量pStr2:", pStr2, ", 变量值类型:", typeof(pStr2))
Log("变量pStr3:", pStr3, ", 变量值类型:", typeof(pStr3))
Log("变量pStr4:", pStr4, ", 变量值类型:", typeof(pStr4))
Log("---------------------------开始测试下拉框类型参数---------------------------")
Log("变量pCombox1:", pCombox1, ", 变量值类型:", typeof(pCombox1))
Log("变量pCombox2:", pCombox2, ", 变量值类型:", typeof(pCombox2))
Log("变量pCombox3:", pCombox3, ", 变量值类型:", typeof(pCombox3))
Log("---------------------------开始测试加密串类型参数---------------------------")
Log("变量pSecretStr1:", pSecretStr1, ", 变量值类型:", typeof(pSecretStr1))
}

Estratégia completa de teste de parâmetros: https://www.fmz.com/strategy/455212
Há um design de dependência de parâmetros oculto nos parâmetros acima. Muitas estratégias têm o requisito de habilitar uma série de configurações com base em um determinado parâmetro, o que pode ser alcançado com dependências de parâmetros como esta.
Há também cinco tipos de controles interativos de estratégia na Plataforma de Negociação Quantitativa do Inventor, e esses controles interativos também foram otimizados e atualizados desta vez. Adicionada “configuração de componentes” para simplificar a função de agrupamento.

Os controles interativos são basicamente os mesmos que a “configuração do componente” dos parâmetros da interface de estratégia. Além dos controles da caixa de entrada padrão, os tipos de componentes também suportam:
O uso é o mesmo de vários tipos de componentes de parâmetros de interface de estratégia, portanto não será repetido aqui.

Os controles interativos são basicamente os mesmos que a “configuração de componentes” dos parâmetros da interface de estratégia.

Além do controle da caixa de entrada padrão, o tipo de componente também suporta:

A caixa suspensa do controle interativo também foi atualizada: “suporte a múltiplas seleções”, “valores padrão personalizados”, vinculação de opções a dados específicos, etc.
Além do componente de caixa suspensa padrão, o seguinte foi adicionado:

Um controle interativo do tipo botão não tem nenhum item de entrada. Quando acionado, o comando interativo enviado contém apenas o nome do controle do botão.
A melhor maneira de entender é testá-lo manualmente. Uma estratégia de teste também é preparada aqui.
Vale ressaltar que controles interativos não podem ser testados no sistema de backtesting, e somente testes em tempo real podem ser criados.
function main() {
var lastCmd = ""
while (true) {
var cmd = GetCommand() // 接收交互控件产生的消息
if (cmd) {
Log(cmd)
lastCmd = cmd
}
LogStatus(_D(), lastCmd)
Sleep(500)
}
}
Insira aleatoriamente algumas informações, defina algumas opções e clique no botão de controle interativo para gerar mensagens interativas. A estratégia captura as mensagens e as imprime.


Estratégia de teste de controle interativo concluída: https://www.fmz.com/strategy/455231



function main() {
Log("参数test1使用币种控件选择后,test1的值为:", test1)
Log("参数test2使用交易代码控件选择后,test2的值为:", test2)
}

参数test1使用币种控件选择后,test1的值为: BTC

参数test2使用交易代码控件选择后,test2的值为: ETH_USDT.next_quarter

function main() {
while (true) {
var cmd = GetCommand()
if (cmd) {
Log(cmd)
}
Sleep(2000)
}
}

test1:SOL

test2:XRP_USDT.swap