O recurso está a ser carregado... Carregamento...

Estratégias de execução de sinais TradingViewWebHook

Autora:Inventor quantificado - sonho pequeno, 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

Inventor quantificado - sonho pequenoOlhe 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?

Inventor quantificado - sonho pequenoA configuração do "webhook" na TV pode ser alterada, dependendo da variedade.

Inventor quantificado - sonho pequenoA compra do bilhete de preço no mercado, o próximo volume é o valor.

Inventor quantificado - sonho pequenoO 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?

Inventor quantificado - sonho pequenoO 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.

Inventor quantificado - sonho pequenoNão basta copiar o código, é preciso copiar a estratégia completa.

Inventor quantificado - sonho pequenoA TV envia sinais, escreve o número, a estratégia é o número. Se for hip hop, etc., a estratégia precisa mudar.

Inventor quantificado - sonho pequenoA estratégia em si é um exemplo completo de como executar um futuro, você usou o comando errado, verifique.

Inventor quantificado - sonho pequenoO comando que você usou no seu webhook não é correto, use o comando de futuros e leia o código cuidadosamente.

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

Inventor quantificado - sonho pequenoO 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.

Inventor quantificado - sonho pequenoA 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.

Inventor quantificado - sonho pequenoSim, mas essa estratégia precisa ser modificada.

Inventor quantificado - sonho pequenoNã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?

Inventor quantificado - sonho pequenoO 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.

Inventor quantificado - sonho pequenoA 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.

Inventor quantificado - sonho pequenoVeja 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.

Inventor quantificado - sonho pequenoAdicione 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.

Inventor quantificado - sonho pequenoVerifique se o SPK foi chamado sem o estoque.

Inventor quantificado - sonho pequenoO modo de TV direta apresentado na biblioteca da plataforma FMZ, http://www.fmz.com/digest-topic/5969.

Inventor quantificado - sonho pequenoO 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.

Inventor quantificado - sonho pequenoO que você precisa saber é que, se você não tem um contrato, você não sabe o que fazer.

Inventor quantificado - sonho pequenoNã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.