Estrategias de arriesgamiento triangular de 60 líneas

El autor:Un sueño pequeño., Fecha: 2019-04-16 12:55:22
Las etiquetas:EstudioCubiertade forma triangular

Triángulo de las estrategias de enseñanza de cobertura

El principio

  • Por ejemplo: A: el intercambio: ETH_BTC B: ETH_USDT C exchange (en realidad es B exchange, otro par de transacciones, que lógicamente se considera C..): BTC_USDT

  • B, C, la transacción de la bolsa de valores combina ETH_BTC y la cobertura de la bolsa de valores A. Así, BC es en realidad una cuenta de bolsa.

Optimización del espacio

  • El equilibrio de monedas.
  • La diferencia de cobertura, la diferencia dinámica, se calcula de acuerdo con el tipo de pago.
  • ¿Qué es lo que está pasando?
  • El pedido es escaneado en profundidad y se calcula el valor óptimo de cobertura. ¿Qué es esto?

Comentarios de error

  • Si hay errores, bienvenidos a los comentarios.

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



Relacionados

Más.

Se trata de unaPro: TipoError: no se puede leer la propiedad 'Vender' de null en el principal (__FILE__:45) Pro: GetTicker: 429: {"msg":"Solicitudes muy frecuentes.","código":"50011"}

Se trata de unaHola, esto es para correr con tres monedas, o puede correr con USDT.

Se trata de una¿Por qué no puedes correr?

No hay nada.¿Dónde está el video de enseñanza?

Un sueño pequeño.Los tres monedas son necesarias.

Un sueño pequeño.¡Solicitudes muy frecuentes!

Se trata de unaHola, esto es para correr con tres monedas, o puede correr con USDT.

Se trata de una¿Se puede establecer el volumen de transacción en 0.03? ¿Qué es lo que representa 0.0007 y 1/1.02?

Se trata de unaEstá bien, voy a correr otra vez.

Un sueño pequeño.Envía tu error aquí o en el grupo oficial de FMZ @dreamback.

Se trata de una¿Puedes bajar tu mensaje de micrófono?

Un sueño pequeño.Envíe una pregunta específica, o agregue el grupo oficial de FMZ en el grupo de microblogs @dreamback

Se trata de una¿Puedes añadir tu WeChat?

Un sueño pequeño.Esta es una estrategia de contado, si hay un problema, hay que enviar preguntas concretas.