Cliente de Market Center


Fecha de creación: 2020-01-19 23:29:25 Última modificación: 2020-02-09 20:15:26
Copiar: 21 Número de Visitas: 2394
17
Seguir
34
Seguidores

Cliente de Market Center

Esto esEl clienteLa cooperaciónEl centro de operacionesusar

¿Por qué hay un centro de eventos?

Para acceder a las situaciones, hay REST y Websocket, y Websocket, debido a una serie de factores irresistibles, hace que su conexión sea forzada a la interrupción, en este caso la estrategia requiere un mecanismo de tolerancia a los errores. REST suele ser la forma más segura. Cuando tienes varias políticas que se ejecutan en la misma plataforma, como por ejemplo OKEx, y que se ejecutan en el mismo servidor, el acceso a la API REST está limitado en frecuencia (consulte la documentación de la API de la plataforma para más detalles). La restricción puede ser de varias maneras, como restricción de IP, restricción de cuenta o una combinación de ambas. El uso de un centro de eventos reduce la frecuencia de las solicitudes REST

Las formas tradicionales

El centro de operaciones

Despliegue de los Centros de Acción

  1. Fuente de las fuentesCompilación y implementación
  2. Despliegue binario
  3. Si necesita ayuda, comuníquese con: wx:btstarinfo, Q:6510575

Tenga en cuenta

  • El Centro de Tráfico sólo ofrece la interfaz de datos de tránsito, no la siguiente interfaz
  • El centro de operaciones sólo funciona en Linux, Unix

API

  • GetSupportList
  • SubscribeSpotTicker
  • SubscribeSpotDepth
  • SubscribeSpotTrade
  • GetSpotTicker
  • GetSpotDepth
  • GetSpotTrade
  • SubscribeFutureTicker
  • SubscribeFutureDepth
  • SubscribeFutureTrade
  • GetFutureTicker
  • GetFutureDepth
  • GetFutureTrade
Código Fuente de la Estrategia
// a client for market center, https://github.com/goex-top/market_center
// api list 
// * GetSupportList
// * SubscribeSpotTicker
// * SubscribeSpotDepth
// * ~~SubscribeSpotTrade~~
// * GetSpotTicker
// * GetSpotDepth
// * ~~GetSpotTrade~~
// * SubscribeFutureTicker
// * SubscribeFutureDepth
// * ~~SubscribeFutureTrade~~
// * GetFutureTicker
// * GetFutureDepth
// * ~~GetFutureTrade~~

// params wit web
// var udspath = /tmp/goex.market.center //ref to https://github.com/goex-top/market_center/blob/1e1bb15c69a1da6fddbba3d506920e91f9ec7842/const.go#L35

// local variable
// var client = null

var ReqType = {
    ReqType_GetSupportList: 1,
    ReqType_SubscribeSpotDepth: 2,
    ReqType_SubscribeSpotTicker: 3,
    ReqType_SubscribeFutureDepth: 4,
    ReqType_SubscribeFutureTicker: 5,
    ReqType_GetSpotDepth: 6,
    ReqType_GetSpotTicker: 7,
    ReqType_GetFutureDepth: 8,
    ReqType_GetFutureTicker: 9,
}

//---------------------------------------
function newUDSClient() {
    var client = Dial('unix://'+udspath)
    if (null === client) {
        throw 'new usd client fail'
    }
    return client
}

function udsRequest(client, req) {
    try {
        client.write(JSON.stringify(req))
        var rsp = client.read(20)
        if (rsp === null) {
            return null
        }
    
        var obj = JSON.parse(rsp)
        if(obj.status !== 0) {
            return null
        }
        return obj.data
    }
    catch(e) {
        return null
    }
    
}

function GetSupportList(client) {
    var req = {type:ReqType.ReqType_GetSupportList}
    var rsp = udsRequest(client, req)
    if (rsp === null) {
        return null
    }
    return rsp
}

function GetSpotDepth(client, exchangeName, pair) {
    var req = {type:ReqType.ReqType_GetSpotDepth, exchange_name: exchangeName, currency_pair: pair}
    var rsp = udsRequest(client, req)
    if(rsp === null) {
        return null
    }
    return {Asks:rsp.AskList, Bids:rsp.BidList, Time:rsp.UTime, Info:rsp.rsp}
}

function GetSpotTicker(client, exchangeName, pair) {
    var req = {type:ReqType.ReqType_GetSpotTicker, exchange_name: exchangeName, currency_pair: pair}
    var rsp = udsRequest(client, req)
    if(rsp === null) {
        return null
    }
    return {
        Last:parseFloat(rsp.last), 
        Buy:parseFloat(rsp.buy), 
        Sell:parseFloat(rsp.sell), 
        Volume:parseFloat(rsp.vol), 
        Time:parseFloat(rsp.date), 
        High:parseFloat(rsp.high), 
        Low:parseFloat(rsp.low), 
        Info:rsp
    }
}

function SubscribeSpotDepth(client, exchangeName, pair, period) {
    var req = {type:ReqType.ReqType_SubscribeSpotDepth, exchange_name: exchangeName, currency_pair: pair, period: period}
    var rsp = udsRequest(client, req)
    return rsp
}

function SubscribeSpotTicker(client, exchangeName, pair, period) {
    var req = {type:ReqType.ReqType_SubscribeSpotTicker, exchange_name: exchangeName, currency_pair: pair, period: period}
    var rsp = udsRequest(client, req)
    return rsp
}

function GetFutureDepth(client, exchangeName, contractType, pair) {
    var req = {type:ReqType.ReqType_GetFutureDepth, exchange_name: exchangeName, contract_type: contractType, currency_pair: pair}
    var rsp = udsRequest(client, req)
    if(rsp === null) {
        return null
    }
    return {Asks:rsp.AskList, Bids:rsp.BidList, Time:rsp.UTime, Info:rsp.rsp}
}

function GetFutureTicker(client, exchangeName, contractType, pair) {
    var req = {type:ReqType.ReqType_GetFutureTicker, exchange_name: exchangeName, contract_type: contractType, currency_pair: pair}
    var rsp = udsRequest(client, req)
    if(rsp === null) {
        return null
    }
    return {
        Last:parseFloat(rsp.last), 
        Buy:parseFloat(rsp.buy), 
        Sell:parseFloat(rsp.sell), 
        Volume:parseFloat(rsp.vol), 
        Time:parseFloat(rsp.date), 
        High:parseFloat(rsp.high), 
        Low:parseFloat(rsp.low), 
        Info:rsp
    }
}

function SubscribeFutureDepth(client, exchangeName, contractType, pair, period) {
    var req = {type:ReqType.ReqType_SubscribeFutureDepth, exchange_name: exchangeName, contract_type: contractType, currency_pair: pair, period: period}
    var rsp = udsRequest(client, req)
    return rsp
}

function SubscribeFutureTicker(client, exchangeName, contractType, pair, period) {
    var req = {type:ReqType.ReqType_SubscribeFutureTicker, exchange_name: exchangeName, contract_type: contractType, currency_pair: pair, period: period}
    var rsp = udsRequest(client, req)
    return rsp
}

var MarketCenterClient = (function() {
    function MarketCenterClient() {
        if (typeof udspath === 'undefined' || udspath === '') {
            throw 'udspath not defined'
        }
        this.client = newUDSClient()
        this.list = GetSupportList(this.client)
        Log("this.list:" + this.list)
    }

    MarketCenterClient.prototype.GetSpotTicker = function(exchangeName, pair) {
        if (typeof exchangeName === 'undefined' || exchangeName === '') {
            throw 'GetSpotTicker exchangeName not defined'
        }
        if (typeof pair === 'undefined' || pair === '') {
            throw 'GetSpotTicker pair not defined'
        }
        return GetSpotTicker(this.client, exchangeName, pair)
    }

    MarketCenterClient.prototype.GetSpotDepth = function(exchangeName, pair) {
        if (typeof exchangeName === 'undefined' || exchangeName === '') {
            throw 'GetSpotDepth exchangeName not defined'
        }
        if (typeof pair === 'undefined' || pair === '') {
            throw 'GetSpotDepth pair not defined'
        }
    return GetSpotDepth(this.client, exchangeName, pair)
    }

    MarketCenterClient.prototype.SubscribeSpotDepth = function(exchangeName, pair, period) {
        if(typeof(period) === 'undefined') {
            period = 200
        }
        if (typeof exchangeName === 'undefined' || exchangeName === '') {
            throw 'SubscribeSpotDepth exchangeName not defined'
        }
        if (typeof pair === 'undefined' || pair === '') {
            throw 'SubscribeSpotDepth pair not defined'
        }
        var found = false
        _.each(this.list, function(item) {
            if (item === exchangeName) {
                found = true
                return false
            }
        })

        if(!found) {
            throw 'exchange ('+ exchangeName +') not support, please check it again, https://github.com/goex-top/market_center#support-exchanges'
        }
        return SubscribeSpotDepth(this.client, exchangeName, pair, period)
    }

    MarketCenterClient.prototype.SubscribeSpotTicker = function(exchangeName, pair, period) {
        if(typeof(period) === 'undefined') {
            period = 200
        }
        if (typeof exchangeName === 'undefined' || exchangeName === '') {
            throw 'SubscribeSpotTicker exchangeName not defined'
        }
        if (typeof pair === 'undefined' || pair === '') {
            throw 'SubscribeSpotTicker pair not defined'
        }
      var found = false
        _.each(this.list, function(item) {
            if (item === exchangeName) {
                found = true
                return false
            }
        })

        if(!found) {
            throw 'exchange ('+ exchangeName +') not support, please check it again, https://github.com/goex-top/market_center#support-exchanges'
        }
        return SubscribeSpotTicker(this.client, exchangeName, pair, period)
    }


    MarketCenterClient.prototype.GetFutureTicker = function(exchangeName, contractType, pair) {
        if (typeof exchangeName === 'undefined' || exchangeName === '') {
            throw 'GetFutureTicker exchangeName not defined'
        }
        if (typeof pair === 'undefined' || pair === '') {
            throw 'GetFutureTicker pair not defined'
        }
     return GetFutureTicker(this.client, exchangeName, contractType, pair)
    }

    MarketCenterClient.prototype.GetFutureDepth = function(exchangeName, contractType, pair) {
        if (typeof exchangeName === 'undefined' || exchangeName === '') {
            throw 'GetFutureDepth exchangeName not defined'
        }
        if (typeof pair === 'undefined' || pair === '') {
            throw 'GetFutureDepth pair not defined'
        }
     return GetFutureDepth(this.client, exchangeName, contractType, pair)
    }

    MarketCenterClient.prototype.SubscribeFutureDepth = function(exchangeName, contractType, pair, period) {
        if(typeof(period) === 'undefined') {
            period = 200
        }
        if (typeof exchangeName === 'undefined' || exchangeName === '') {
            throw 'SubscribeFutureDepth exchangeName not defined'
        }
        if (typeof pair === 'undefined' || pair === '') {
            throw 'SubscribeFutureDepth pair not defined'
        }
     var found = false
        _.each(this.list, function(item) {
            if (item === exchangeName) {
                found = true
                return false
            }
        })

        if(!found) {
            throw 'exchange ('+ exchangeName +') not support, please check it again, https://github.com/goex-top/market_center#support-exchanges'
        }
        return SubscribeFutureDepth(this.client, exchangeName, contractType, pair, period)
    }

    MarketCenterClient.prototype.SubscribeFutureTicker = function(exchangeName, contractType, pair, period) {
        if(typeof(period) === 'undefined') {
            period = 200
        }
        if (typeof exchangeName === 'undefined' || exchangeName === '') {
            throw 'SubscribeFutureTicker exchangeName not defined'
        }
        if (typeof pair === 'undefined' || pair === '') {
            throw 'SubscribeFutureTicker pair not defined'
        }
     var found = false
        _.each(this.list, function(item) {
            if (item === exchangeName) {
                found = true
                return false
            }
        })

        if(!found) {
            throw 'exchange ('+ exchangeName +') not support, please check it again, https://github.com/goex-top/market_center#support-exchanges'
        }
        return SubscribeFutureTicker(this.client, exchangeName, contractType, pair, period)
    }

    MarketCenterClient.prototype.GetSupportList = function() {
        return GetSupportList(this.client)
    }
    return MarketCenterClient
})()

$.NewMarketCenterClient = function() {
    return new MarketCenterClient()
}

function main() {
    mcc = $.NewMarketCenterClient()
    Log('support list'+mcc.GetSupportList())
    mcc.SubscribeSpotDepth('binance.com', 'BTC_USDT', 200)
    Sleep(1000)
    Log(mcc.GetSpotDepth('binance.com', 'BTC_USDT'))
    mcc.SubscribeSpotTicker('binance.com', 'BTC_USDT', 200)
    Sleep(1000)
    Log(mcc.GetSpotTicker('binance.com', 'BTC_USDT'))
}