60 baris triangle strategi lindung nilai (pelajaran)

Penulis:Mimpi kecil, Tarikh: 2019-04-16 12:55:22
Tag:KajianHedgesegitiga

Triangle Hedge Strategi Pengajaran

Prinsip

  • Contohnya: Pertukaran A: ETH_BTC Bursa B: ETH_USDT Bursa C (yang sebenarnya adalah Bursa B) adalah pasangan perdagangan lain, secara logiknya dianggap sebagai C (^): BTC_USDT

  • B, C pertukaran perdagangan pasangan gabungan ETH_BTC dan A pertukaran lindung nilai. Jadi BC sebenarnya adalah akaun pertukaran.

Mengoptimumkan ruang

  • Perimbangan mata wang.
  • Perbezaan lindung nilai, perbezaan dinamik dikira berdasarkan kadar bayaran prosedur.
  • Pergi ke mana sahaja yang anda mahu.
  • Perintah pengimbas dalaman yang tipis untuk mengira liputan yang optimum. ...

Ulasan bug

  • Jika ada kesilapan, terima kasih untuk komen.

// 交易对以 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)
    }
}



Berkaitan

Lebih lanjut

BNMBNMPro: TypeError: tidak boleh membaca sifat 'Sell' dari null pada utama (__FILE__:45) Pro: GetTicker: 429: {"msg":"Permintaan terlalu kerap.","kod":"50011"}

BNMBNMHei, ini hanya boleh berjalan jika anda mempunyai tiga mata wang atau jika anda mempunyai USDT.

BNMBNMTidak boleh berlari.

FmzeroDi mana video pengajaran?

Mimpi kecilPermintaan untuk tiga mata wang.

Mimpi kecilPermintaan terlalu kerap!

BNMBNMHei, ini hanya boleh berjalan jika anda mempunyai tiga mata wang atau jika anda mempunyai USDT.

BNMBNMApakah jumlah transaksi boleh ditetapkan 0.03? Apa yang 0.0007 dan 1/1.02 bermaksud?

BNMBNMBaiklah, saya akan berlari lagi.

Mimpi kecilJika anda ingin membuat laporan kesalahan, boleh hantar di sini atau melalui kumpulan rasmi FMZ @dreamback.

BNMBNMJika anda tidak boleh berlari, bolehkah anda menutup akaun anda?

Mimpi kecilSila hantar soalan atau tambah kepada kumpulan WeChat rasmi FMZ @MomGo

BNMBNMAdakah anda boleh menambahkan WeChat anda?

Mimpi kecilIni adalah strategi yang mudah, jika ada masalah, anda perlu menghantar soalan yang spesifik.