
A API de extensão da Plataforma de Negociação Quantitativa do Inventor foi atualizada recentemente para oferecer suporte ao modo de acesso direto, o que facilita o envio de sinais de alarme do TradingView para o robô da Plataforma de Negociação Quantitativa do Inventor para realizar negociações automáticas. Se você ainda não sabe o que é a API de extensão, deixe-me explicar em detalhes.
Links relacionados à documentação da API do Inventor
A principal função da API estendida é fornecer uma interface para várias funções na plataforma de negociação quantitativa do inventor da operação programática, como iniciar robôs em lotes ao mesmo tempo, iniciar e parar robôs em horários programados, ler detalhes de informações do robô, etc. Usamos a API de extensão da plataforma de negociação quantitativa do Inventor para implementar a negociação de sinais de alerta do TradingView. Esse requisito requer apenas a extensão da API.CommandRobot(RobotId, Cmd)A interface pode enviar instruções interativas para o robô com o ID especificado. O robô pode executar operações correspondentes (como colocar ordens de compra ou venda) após receber as instruções.
Para usar a API de extensão, primeiro você precisa criar sua própria conta de inventorAPI KEY:
API KEYA chave éaccess keyesecret keycomposição,API KEYEsta é a chave para a plataforma de negociação quantitativa inventada pelas operações programadas, por isso ela deve ser mantida adequadamente e nunca divulgada. Criando uma extensão FMZAPI KEYVocê pode especificar permissões quando usarAPI KEYConceder acessoCommandRobot(RobotId, Cmd)Neste exemplo, por motivos de segurança, conceda permissões somente às extensões FMZ.API KEYDotarCommandRobot(RobotId, Cmd)Permissões de acesso para a interface.
Modo de acesso direto significaAPI KEYEscreva-o diretamente na consulta da URL. Por exemplo, a URL para acessar a API de extensão da Inventor Quantitative Trading Platform pode ser escrita como:
https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyyy&method=CommandRobot&args=[186515,"ok12345"]
em,https://www.fmz.com/api/v1é o endereço da interface,?Depois dissoQuery,parâmetroaccess_keyO exemplo principal é representado por xxx (preencha sua própria chave de acesso à conta FMZ ao usar), parâmetrossecret_keyA chave secreta é representada por yyyy (preencha a sua própria chave secreta da conta ao usá-la), o parâmetromethodÉ o nome específico da interface API estendida a ser acessada.argsPara ser chamadomethodParâmetros da interface.
Usamos o TradingView como fonte de sinal para enviar comandos de negociação ao robô da plataforma de negociação quantitativa do inventor.CommandRobotEsta interface.
Primeiro de tudo, você precisa ter uma conta TradingView Pro. O recurso WebHood no alarme não está disponível no nível Básico. Vamos para o gráfico no TradingView.

Adiciona um indicador ao gráfico, mas também outros algoritmos de script. Aqui usamos o mais comumente usadoMACDIndicador e, em seguida, defina o período da linha K para 1 minuto (para disparar o sinal mais rapidamente e facilitar a demonstração).

Clique com o botão direito do mouse no gráfico e selecione Adicionar alerta no menu pop-up.

Definir na janela pop-up “Alerta”WebHookNesta etapa, você não precisa se apressar para configurá-lo. Vamos primeiro executar o robô que monitora sinais na Plataforma de Negociação Quantitativa do Inventor.
Código fonte da estratégia:
// 全局变量
var BUY = "buy" // 注意:现货用的命令
var SELL = "sell" // 现货用的命令
var LONG = "long" // 期货用的命令
var SHORT = "short" // 期货用的命令
var COVER_LONG = "cover_long" // 期货用的命令
var COVER_SHORT = "cover_short" // 期货用的命令
function main() {
// 清空日志,如不需要,可以删除
LogReset(1)
// 设置精度
exchange.SetPrecision(QuotePrecision, BasePrecision)
// 识别期货还是现货
var eType = 0
var eName = exchange.GetName()
var patt = /Futures_/
if (patt.test(eName)) {
Log("添加的交易所为期货交易所:", eName, "#FF0000")
eType = 1
if (Ct == "") {
throw "Ct 合约设置为空"
} else {
Log(exchange.SetContractType(Ct), "设置合约:", Ct, "#FF0000")
}
} else {
Log("添加的交易所为现货交易所:", eName, "#32CD32")
}
var lastMsg = ""
var acc = _C(exchange.GetAccount)
while(true) {
var cmd = GetCommand()
if (cmd) {
// 检测交互命令
lastMsg = "命令:" + cmd + "时间:" + _D()
var arr = cmd.split(":")
if (arr.length != 2) {
Log("cmd信息有误:", cmd, "#FF0000")
continue
}
var action = arr[0]
var amount = parseFloat(arr[1])
if (eType == 0) {
if (action == BUY) {
var buyInfo = IsMarketOrder ? exchange.Buy(-1, amount) : $.Buy(amount)
Log("buyInfo:", buyInfo)
} else if (action == SELL) {
var sellInfo = IsMarketOrder ? exchange.Sell(-1, amount) : $.Sell(amount)
Log("sellInfo:", sellInfo)
} else {
Log("现货交易所不支持!", "#FF0000")
}
} else if (eType == 1) {
var tradeInfo = null
var ticker = _C(exchange.GetTicker)
if (action == LONG) {
exchange.SetDirection("buy")
tradeInfo = IsMarketOrder ? exchange.Buy(-1, amount) : exchange.Buy(ticker.Sell, amount)
} else if (action == SHORT) {
exchange.SetDirection("sell")
tradeInfo = IsMarketOrder ? exchange.Sell(-1, amount) : exchange.Sell(ticker.Buy, amount)
} else if (action == COVER_LONG) {
exchange.SetDirection("closebuy")
tradeInfo = IsMarketOrder ? exchange.Sell(-1, amount) : exchange.Sell(ticker.Buy, amount)
} else if (action == COVER_SHORT) {
exchange.SetDirection("closesell")
tradeInfo = IsMarketOrder ? exchange.Buy(-1, amount) : exchange.Buy(ticker.Sell, amount)
} else {
Log("期货交易所不支持!", "#FF0000")
}
if (tradeInfo) {
Log("tradeInfo:", tradeInfo)
}
} else {
throw "eType error, eType:" + eType
}
acc = _C(exchange.GetAccount)
}
var tbl = {
type : "table",
title : "状态信息",
cols : ["数据"],
rows : []
}
// tbl.rows.push([JSON.stringify(acc)]) // 测试时使用
LogStatus(_D(), eName, "上次接收到的命令:", lastMsg, "\n", "`" + JSON.stringify(tbl) + "`")
Sleep(1000)
}
}
O código da estratégia é muito simples, detecçãoGetCommandO valor de retorno da função, quando uma mensagem interativa é enviada ao programa de política,GetCommandA função retornará esta mensagem e, então, o programa de estratégia fará as operações de negociação correspondentes com base no conteúdo da mensagem. O botão interativo foi configurado nesta estratégia, que pode testar a função interativa. Por exemplo, execute esta estratégia e configure o robô com uma troca simulada da Inventor Quantitative Trading Platform.WexApp。

Clique no botão de interação para testar a capacidade do robô de receber comandos de compra.

Você pode ver que a sequência de comando recebida pelo robô é:buy:0.01。
Precisamos apenas fazer com que a URL de solicitação do WebHook acesse a API da extensão da plataforma de negociação quantitativa do Inventor quando o alerta do TradingView for acionado.CommandRobotAo utilizar a interface, os parâmetros transportados sãobuy:0.01É isso.
De volta ao TradingView, preenchemos a URL do WebHook. Daraccess_key、secret_keyPreencha seus próprios parâmetrosAPI KEY。methodCorrigido, só precisamos acessarCommandRobotEsta interface API estendida,argsOs parâmetros são[机器人ID,命令字符串]Na forma de, podemos obter diretamente o ID do robô através da página do robô, conforme mostrado na figura:
Desta vez, deixamos o sinal disparar e compramos 0,02 moedas. A sequência de comando é:"buy:0.02". Isso completa o URL do WebHook. Este método suporta apenas a escrita do sinal na URL. Se você quiser obter o conteúdo da mensagem de alerta que pode ser emitida pela própria estratégia de TV, consulte https://www.fmz.com/api#%E7%9B %B4%E6 %8E%A5%E9%AA%8C%E8%AF%81.
https://www.fmz.com/api/v1?access_key=e3809e173e23004821a9bfb6a468e308&secret_key=45a811e0009d91ad21154e79d4074bc6&method=CommandRobot&args=[191755,"buy:0.02"]
Configurando no TradingView:

Aguardando o sinal disparar… Aguardando o sinal disparar. Aguardando o sinal disparar. …

O robô recebeu o sinal:

Dessa forma, você pode usar as funções de gráficos ricos e algoritmos de indicadores no TradingView em conjunto com os robôs de estratégia da Inventor Quantitative Trading Platform para atingir a negociação automatizada que você deseja. Comparado com a portabilidade das estratégias no TradingView para as linguagens JavaScript e Python, o a dificuldade é bastante reduzida.
O código de estratégia do “Monitoring Signal Order Placing Robot” é apenas para aprendizado e pesquisa. Ele precisa ser otimizado e ajustado por você para uso real. Ele suporta futuros e é recomendado configurá-lo para o modo de ordem de mercado. Veja a estratégia parâmetros de código para mais detalhes. Este é apenas um ponto de partida. Se você tiver alguma dúvida ou sugestão, deixe uma mensagem.