Les ressources ont été chargées... Je charge...

60 lignes de stratégies de triangulation (enseignement)

Auteur:L'inventeur de la quantification - un petit rêve, Date: le 16 avril 2019 à 12:55:22
Les étiquettes:L'étudeHaietriangulaire

Les stratégies pédagogiques du triangle

Le principe

  • Par exemple: Une bourse: ETH_BTC Échangeur B: ETH_USDT L'échange C (en fait, l'échange B est une autre paire de transactions, qui est logiquement considérée comme C。) : BTC_USDT

  • B, C est une combinaison d'ETH_BTC et A est une contrepartie de l'échange.

Optimiser les espaces

  • Le solde monétaire.
  • Le prix de l'échange est calculé en fonction du taux de transaction.
  • Il est difficile de se déplacer.
  • Les commandes sont analysées en profondeur afin de calculer le meilleur risque. Je ne sais pas.

Retour sur le bug

  • Si vous avez des erreurs, merci de nous laisser un commentaire.

// 交易对以 ETH_BTC , ETH_USDT , BTC_USDT 为例
// 教学策略,还有很大优化空间,例如:币平衡模块,根据手续费率控制对冲差价,硬搬砖等等。
function main () {                                                                                      
    if (exchanges[0].GetQuoteCurrency() != exchanges[2].GetCurrency().split("_")[0] || 
        exchanges[0].GetCurrency().split("_")[0] != exchanges[1].GetCurrency().split("_")[0]) {
        throw "交易所 交易对 配置错误。"
    }
    var marketSlideRate = 1 // 1.02
    var hedgeDiff = 0.0007
    var hedgeAmount = 0.1
    var isFirst = true
    var concurrenter = function (funcName, isWait, tasks, amounts) {
        for (var i = 0 ; i < exchanges.length; i++) {
            if (isFirst) {
                exchanges[i].acc = _C(exchanges[i].GetAccount)
                exchanges[i].initAcc = exchanges[i].acc
            }
            if (isWait) {
                var a = funcName == "GetTicker" ? exchanges[i].ticker = exchanges[i].tiR.wait() : exchanges[i].id = exchanges[i].trR.wait()
                if (funcName == "trade") {
                    exchanges[i].acc = _C(exchanges[i].GetAccount)
                }
            } else {
                var b = funcName == "GetTicker" ? exchanges[i].tiR = exchanges[i].Go(funcName) : exchanges[i].trR = exchanges[i].Go(tasks[i], -1, amounts[i], exchanges[i].GetCurrency())
            }
        }
        if (funcName == "trade" && isWait) {
            Log("BTC:", exchange.BTC = exchanges[0].acc.Balance + exchanges[2].acc.Stocks, "ETH:", exchange.ETH = exchanges[0].acc.Stocks + exchanges[1].acc.Stocks, "USDT:", 
                exchange.USDT = exchanges[1].acc.Balance + exchanges[2].acc.Balance, "#FF0000")
            LogProfit(exchange.USDT - (exchanges[1].initAcc.Balance + exchanges[2].initAcc.Balance) - 
                (exchanges[0].initAcc.Balance + exchanges[2].initAcc.Stocks - exchange.BTC) * exchanges[2].ticker.Last -
                (exchanges[0].initAcc.Stocks + exchanges[1].initAcc.Stocks - exchange.ETH) * exchanges[1].ticker.Last)
        }
        isFirst = false
    }

    while (1) {
        concurrenter("GetTicker", false)
        concurrenter("GetTicker", true)
        var tickerA = exchanges[0].ticker
        var tickerB = exchanges[1].ticker
        var tickerC = exchanges[2].ticker

        var tickerBC = {
            Buy : tickerB.Buy / tickerC.Sell,
            Sell : tickerB.Sell / tickerC.Buy,
        }

        if (tickerA.Buy - tickerBC.Sell > hedgeDiff && exchanges[0].acc.Stocks > 0.2 && exchanges[1].acc.Balance > 500 && exchanges[2].acc.Stocks > 0.03) {                          // Sell A , Buy BC (Buy B Sell C)
            concurrenter("trade", false, ["Sell", "Buy", "Sell"], [hedgeAmount, marketSlideRate * tickerB.Sell * hedgeAmount, tickerB.Sell * hedgeAmount / tickerC.Buy])
            concurrenter("trade", true)
        }
        if (tickerBC.Buy - tickerA.Sell > hedgeDiff && exchanges[0].acc.Balance > 0.03 && exchanges[1].acc.Stocks > 0.2 && exchanges[2].acc.Balance > 500) {                          // Buy A , Sell BC (...)
            concurrenter("trade", false, ["Buy", "Sell", "Buy"], [marketSlideRate * hedgeAmount * tickerA.Sell, hedgeAmount, marketSlideRate * hedgeAmount * tickerA.Sell * tickerC.Sell])
            concurrenter("trade", true)
        }
        Sleep(500)
    }
}



Relationnée

Plus de

N.B.M.N.M.Pour: TypeError: ne peut pas lire la propriété 'Sell' de null au niveau principal (__FILE__:45) Pour: Je suis en train d'essayer de vous aider.

N.B.M.N.M.Bonjour, il faut trois pièces de monnaie pour courir, ou il faut USDT pour courir.

N.B.M.N.M.Comment ne pas courir?

Je suis zéro.Où est la vidéo pédagogique?

L'inventeur de la quantification - un petit rêveLes trois pièces sont nécessaires.

L'inventeur de la quantification - un petit rêveDes demandes trop fréquentes!

N.B.M.N.M.Bonjour, il faut trois pièces de monnaie pour courir, ou il faut USDT pour courir.

N.B.M.N.M.On peut définir le volume de transaction à 0.03?

N.B.M.N.M.Je vais recommencer.

L'inventeur de la quantification - un petit rêveLes messages d'erreur peuvent être envoyés ici, ou sur le groupe officiel de FMZ @dreamback.

N.B.M.N.M.Je ne peux pas courir, je ne peux pas me lever, je ne peux pas me lever, je ne peux pas me lever.

L'inventeur de la quantification - un petit rêveEnvoyez des questions spécifiques, ou ajoutez le groupe officiel de FMZ sur WeChat @Mönchön

N.B.M.N.M.Vous pouvez ajouter votre compte sur WeChat?

L'inventeur de la quantification - un petit rêveC'est une tactique à la main, si vous avez un problème, envoyez des questions concrètes.