Estratégias de execução de sinais TradingViewWebHook

Autora:Sonhos pequenos, Data: 28 de abril de 2020 17:01:35
Tags:EstudoAjudados no comércio

Artigo relacionado:https://www.fmz.com/bbs-topic/5533O vídeo do canal B:https://www.bilibili.com/video/BV1Wk4y1k7zz/

  • Atualizado em 29.7.2020 Adicionar SPK e BPK duas instruções, respectivamente: vender posições abertas após vender posições abertas e comprar posições abertas após comprar posições abertas.

/*
- 交互命令字符串格式
  action:amount
  action: buy , sell , long , short , cover_long , cover_short, spk , bpk
- 交易所类型
  eType变量取值: 0 spot , 1 futures

- TV文档链接
  https://www.tradingview.com/pine-script-docs/en/v4/Quickstart_guide.html
  https://cn.tradingview.com/chart/8xfTuX7F/

- TV webhook 发送请求
  https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyyy&method=CommandRobot&args=[186515,"action:amount"]

- 引用类库
  引用数字货币交易类库
*/

// 参数
// var IsMarketOrder = false 
// var QuotePrecision = 2
// var BasePrecision = 2

// 期货参数
// var Ct = ""


// 全局变量
var BUY = "buy"
var SELL = "sell"
var LONG = "long"
var SHORT = "short"
var COVER_LONG = "cover_long"
var COVER_SHORT = "cover_short"
var SPK = "spk"
var BPK = "bpk"


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 if (action == SPK) {   // 卖出平多仓,卖出开空仓
                    exchange.SetDirection("closebuy")
                    var tradeInfo1 = IsMarketOrder ? exchange.Sell(-1, amount) : exchange.Sell(ticker.Buy, amount)
                    exchange.SetDirection("sell")
                    var tradeInfo2 = IsMarketOrder ? exchange.Sell(-1, amount) : exchange.Sell(ticker.Buy, amount)
                    tradeInfo = [tradeInfo1, tradeInfo2]
                } else if (action == BPK) {   // 买入平空仓,买入开多仓
                    exchange.SetDirection("closesell")
                    var tradeInfo1 = IsMarketOrder ? exchange.Buy(-1, amount) : exchange.Buy(ticker.Sell, amount)
                    exchange.SetDirection("buy")
                    var tradeInfo2 = IsMarketOrder ? exchange.Buy(-1, amount) : exchange.Buy(ticker.Sell, amount)
                    tradeInfo = [tradeInfo1, tradeInfo2]
                } 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)
    }
}



Relacionados

Mais.

superãoSe você não entendeu, pode traduzir?

ZZ791377920Qual é o tipo de bolsa que está a ser apoiada?

ZZ791377920A quantidade de transações instantâneas preenchidas é de 10, quando o pedido é feito, a quantidade se torna 10u, onde é o problema de configuração?

O que é isso?ReferenceError: 'QuotePrecision' is not defined at main (__FILE__:13) Não está definido no principal (__FILE__:13)

- Não, não.Pergunte-me se o contrato só pode definir quantidade de transações, como escrever se as transações estão cheias a cada vez.

15937556103Os professores podem enviar uma estratégia completa sobre o contrato?

15937556103/upload/asset/203b175e3c2c22ac9681c.png Por que é que é sempre assim?

Tobey2022Olá, é possível colocar várias transações em um único robô? e, em seguida, adicionar o URL do alerta para o nome do par de transações, um robô executar vários pares de transações alerta

Le7mareslong,short,cover_long,cover_SHORT, será que vou adicionar o webhook separadamente?

Sbwffg198212O que é que isso quer dizer, que a bolsa de futuros não apoia, que eu quero fazer um contrato perpétuo para o Bitcoin BTC_USDT

Sbwffg198212O que é que isso quer dizer, que a bolsa de futuros não apoia, que eu quero fazer um contrato perpétuo para o Bitcoin BTC_USDT

Sbwffg198212/upload/asset/1cd7a606f646b8c0d32be

Em direção oposta ao Q.Meu irmão, você pode publicar um vídeo didático sobre como adicionar e configurar contratos de futuros, com mais detalhes?

Sug210/upload/asset/125e8fed0f51ab1f8122e.jpg Com o comando spk, um erro foi reportado

Céu noturnoComo resolver o problema de TV emitir um alerta e FMZ ocasionalmente não receber o sinal? Especificamente, duas políticas de TV indicam que dois robôs enviam sinais para FMZ ao mesmo tempo, ocasionalmente um robô não recebe.

Península não resfriadaSpk, bpk, você quer adicionar o número? Se o sinal de TV tiver vários alarmes, o número total de alarmes pode ser aberto em uma única vez, como em um plano vazio.

melo23Contract multiplicador onde escolher

Sonhos pequenosOlhe para o parâmetro da política, se você adicionar um objeto de câmbio de futuros, configure um contrato. Caso contrário, o robô não sabe qual o contrato a operar.

Richie.Olá, por que a configuração do contrato ct está vazia?

Sonhos pequenosA configuração do "webhook" na TV pode ser alterada, dependendo da variedade.

Sonhos pequenosA compra do bilhete de preço no mercado, o próximo volume é o valor.

Sonhos pequenosO que eu acho é que você fez um erro, e depois de verificar a documentação da API, a política está funcionando.

O que é isso?Não é possível mudar a chave novamente, é preciso copiar a política completa para ajustar?

Sonhos pequenosO código 1 é o API KEY errado, verifique.

O que é isso?Agora eu estou testando dentro da plataforma para fazer um pedido, mas com o API de extensão, um erro é reportado, retornando, code:1, data: [], eu estou acessando diretamente o link, semelhante ao que acontece quando um navegador abre um link.

Sonhos pequenosNão basta copiar o código, é preciso copiar a estratégia completa.

Sonhos pequenosA TV envia sinais, escreve o número, a estratégia é o número. Se for hip hop, etc., a estratégia precisa mudar.

Sonhos pequenosA estratégia em si é um exemplo completo de como executar um futuro, você usou o comando errado, verifique.

Sonhos pequenosO comando que você usou no seu webhook não é correto, use o comando de futuros e leia o código cuidadosamente.

Tobey2022 好的,已经在众包板块发布了信息,期望你的成果和合作,thanks.

Sonhos pequenosO que não mudou é que a plataforma pode ser multinacional e que alguns desenvolvedores podem fazer pedidos.

Tobey2022O que você pode fazer é enviar as alterações diretamente para você, porque outras pessoas podem estar familiarizadas com o assunto por algum tempo.

Sonhos pequenosA plataforma tem um bloco de crowdsourcing onde você pode publicar suas necessidades.

Tobey2022@ChiloChilo Dream, se você pode mudar uma versão dessa estratégia, se possível, é claro que você pode pagar para comprar, espero seus resultados e respostas, obrigado.

Sonhos pequenosSim, mas essa estratégia precisa ser modificada.

Sonhos pequenosNão sei bem o que queres dizer.

Le7maresEu definiu quatro alertas em long, short, coverlong e covershort, mas como a estratégia é em si mesma estratégia e não estudo, todas as quatro instruções são ativadas simultaneamente.

Le7maresComo é que se faz a diferença?

Sonhos pequenosO URL do webhook pode ser identificado.

Le7maresDescobri um problema, recebendo apenas alertas de negociação de indicadores de tradingview, mas a estratégia que escrevi, estabeleceu quatro alertas diferentes, mas não parecia ser reconhecido, quando os sinais são gerados, os quatro sinais são abertos simultaneamente.

Sonhos pequenosA solicitação de alarme na TV Não. https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyyy&method=CommandRobot&args=[186515, "action:amount"] Não. O que você escreve no local de ação e o que o robô recebe? Não. https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyyy&method=CommandRobot&args=[186515, "long:1"] Não.

Sonhos pequenosVeja o tutorial inicial do FMZ, para operar a conta de câmbio de futuros, configure o câmbio de futuros e adicione objetos de câmbio de futuros ao robô.

Sbwffg198212/upload/asset/1ccc5603d54593dcba809.png

Sbwffg198212Eu só mudei esses lugares, Deus me ajude a ver onde está errado, eu não vou adicionar objetos de câmbio de futuros, definir contratos em parâmetros, permanentemente é um swap, o valor da moeda é XXX_USD, o valor da U é XXX_USDT.

Sonhos pequenosAdicione um objeto de câmbio de futuros, o qual define um contrato, o permanente é um swap, o valor da moeda é XXX_USD, o valor da U é XXX_USDT.

Sonhos pequenosVerifique se o SPK foi chamado sem o estoque.

Sonhos pequenosO modo de TV direta apresentado na biblioteca da plataforma FMZ, http://www.fmz.com/digest-topic/5969.

Sonhos pequenosO nível de alavancagem pode ser definido no mercado de câmbio. Ou pode ser definido no código da estratégia antes de fazer uma encomenda.

Sonhos pequenosO que você precisa saber é que, se você não tem um contrato, você não sabe o que fazer.

Sonhos pequenosNão sei. https://www.fmz.com/api/v1?access_key=xxx&secret_key=yyyy&method=CommandRobot&args=[186515, "action:amount"] Não sei. A ação pode ser escrita como spk, bpk

Céu noturnoEu gostaria de saber como configurá-los para SPK e BPK, TV.