From 42d458d5ea09e67ce16238e860067c3ed02eed1b Mon Sep 17 00:00:00 2001 From: Adrian Gallagher Date: Wed, 11 Jul 2018 10:41:17 +1000 Subject: [PATCH] Rename GDAX -> CoinbasePro --- README.md | 2 +- common/common_test.go | 6 +- config/config.go | 6 +- config_example.json | 14 +- exchange.go | 6 +- exchanges/{gdax => coinbasepro}/README.md | 8 +- .../gdax.go => coinbasepro/coinbasepro.go} | 344 +++++++++--------- .../coinbasepro_test.go} | 86 ++--- .../coinbasepro_types.go} | 4 +- .../coinbasepro_websocket.go} | 30 +- .../coinbasepro_wrapper.go} | 88 ++--- exchanges/exchange_test.go | 2 +- main.go | 5 +- testdata/configtest.json | 2 +- tools/documentation/documentation.go | 4 +- .../{gdax.tmpl => coinbasepro.tmpl} | 4 +- .../readme_templates/root_readme.tmpl | 2 +- 17 files changed, 308 insertions(+), 305 deletions(-) rename exchanges/{gdax => coinbasepro}/README.md (93%) rename exchanges/{gdax/gdax.go => coinbasepro/coinbasepro.go} (59%) rename exchanges/{gdax/gdax_test.go => coinbasepro/coinbasepro_test.go} (66%) rename exchanges/{gdax/gdax_types.go => coinbasepro/coinbasepro_types.go} (99%) rename exchanges/{gdax/gdax_websocket.go => coinbasepro/coinbasepro_websocket.go} (74%) rename exchanges/{gdax/gdax_wrapper.go => coinbasepro/coinbasepro_wrapper.go} (53%) rename tools/documentation/exchange_readme_templates/{gdax.tmpl => coinbasepro.tmpl} (78%) diff --git a/README.md b/README.md index f0a16487..188b36b1 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader | BTCMarkets | Yes | No | NA | | COINUT | Yes | No | NA | | Exmo | Yes | NA | NA | -| GDAX(Coinbase) | Yes | Yes | No| +| CoinbasePro | Yes | Yes | No| | Gemini | Yes | No | No | | HitBTC | Yes | Yes | No | | Huobi.Pro | Yes | No |No | diff --git a/common/common_test.go b/common/common_test.go index ac944a64..27eafb19 100644 --- a/common/common_test.go +++ b/common/common_test.go @@ -738,9 +738,9 @@ func TestGetURIPath(t *testing.T) { t.Parallel() // mapping of input vs expected result testTable := map[string]string{ - "https://api.gdax.com/accounts": "/accounts", - "https://api.gdax.com/accounts?a=1&b=2": "/accounts?a=1&b=2", - "http://www.google.com/accounts?!@#$%;^^": "", + "https://api.pro.coinbase.com/accounts": "/accounts", + "https://api.pro.coinbase.com/accounts?a=1&b=2": "/accounts?a=1&b=2", + "http://www.google.com/accounts?!@#$%;^^": "", } for testInput, expectedOutput := range testTable { actualOutput := GetURIPath(testInput) diff --git a/config/config.go b/config/config.go index a4d565e7..3b956fc3 100644 --- a/config/config.go +++ b/config/config.go @@ -470,6 +470,10 @@ func (c *Config) UpdateExchangeConfig(e ExchangeConfig) error { func (c *Config) CheckExchangeConfigValues() error { exchanges := 0 for i, exch := range c.Exchanges { + if exch.Name == "GDAX" { + c.Exchanges[i].Name = "CoinbasePro" + } + if exch.Enabled { if exch.Name == "" { return fmt.Errorf(ErrExchangeNameEmpty, i) @@ -487,7 +491,7 @@ func (c *Config) CheckExchangeConfigValues() error { if exch.APIKey == "" || exch.APISecret == "" || exch.APIKey == "Key" || exch.APISecret == "Secret" { c.Exchanges[i].AuthenticatedAPISupport = false log.Printf(WarningExchangeAuthAPIDefaultOrEmptyValues, exch.Name) - } else if exch.Name == "ITBIT" || exch.Name == "Bitstamp" || exch.Name == "COINUT" || exch.Name == "GDAX" { + } else if exch.Name == "ITBIT" || exch.Name == "Bitstamp" || exch.Name == "COINUT" || exch.Name == "CoinbasePro" { if exch.ClientID == "" || exch.ClientID == "ClientID" { c.Exchanges[i].AuthenticatedAPISupport = false log.Printf(WarningExchangeAuthAPIDefaultOrEmptyValues, exch.Name) diff --git a/config_example.json b/config_example.json index bfe5b6eb..0f47a954 100644 --- a/config_example.json +++ b/config_example.json @@ -184,7 +184,7 @@ "AuthenticatedAPISupport": false, "APIKey": "Key", "APISecret": "Secret", - "AvailablePairs": "BTCUSD,LTCUSD,LTCBTC,ETHUSD,ETHBTC,ETCBTC,ETCUSD,RRTUSD,RRTBTC,ZECUSD,ZECBTC,XMRUSD,XMRBTC,DSHUSD,DSHBTC,BTCEUR,BTCJPY,XRPUSD,XRPBTC,IOTUSD,IOTBTC,IOTETH,EOSUSD,EOSBTC,EOSETH,SANUSD,SANBTC,SANETH,OMGUSD,OMGBTC,OMGETH,BCHUSD,BCHBTC,BCHETH,NEOUSD,NEOBTC,NEOETH,ETPUSD,ETPBTC,ETPETH,QTMUSD,QTMBTC,QTMETH,AVTUSD,AVTBTC,AVTETH,EDOUSD,EDOBTC,EDOETH,BTGUSD,BTGBTC,DATUSD,DATBTC,DATETH,QSHUSD,QSHBTC,QSHETH,YYWUSD,YYWBTC,YYWETH,GNTUSD,GNTBTC,GNTETH,SNTUSD,SNTBTC,SNTETH,IOTEUR,BATUSD,BATBTC,BATETH,MNAUSD,MNABTC,MNAETH,FUNUSD,FUNBTC,FUNETH,ZRXUSD,ZRXBTC,ZRXETH,TNBUSD,TNBBTC,TNBETH,SPKUSD,SPKBTC,SPKETH,TRXUSD,TRXBTC,TRXETH,RCNUSD,RCNBTC,RCNETH,RLCUSD,RLCBTC,RLCETH,AIDUSD,AIDBTC,AIDETH,SNGUSD,SNGBTC,SNGETH,REPUSD,REPBTC,REPETH,ELFUSD,ELFBTC,ELFETH,BTCGBP,ETHEUR,ETHJPY,ETHGBP,NEOEUR,NEOJPY,NEOGBP,EOSEUR,EOSJPY,EOSGBP,IOTJPY,IOTGBP,IOSUSD,IOSBTC,IOSETH,AIOUSD,AIOBTC,AIOETH,REQUSD,REQBTC,REQETH,RDNUSD,RDNBTC,RDNETH,LRCUSD,LRCBTC,LRCETH,WAXUSD,WAXBTC,WAXETH,DAIUSD,DAIBTC,DAIETH,CFIUSD,CFIBTC,CFIETH,AGIUSD,AGIBTC,AGIETH,BFTUSD,BFTBTC,BFTETH,MTNUSD,MTNBTC,MTNETH,ODEUSD,ODEBTC,ODEETH,ANTUSD,ANTBTC,ANTETH,DTHUSD,DTHBTC,DTHETH,MITUSD,MITBTC,MITETH,STJUSD,STJBTC,STJETH,XLMUSD,XLMEUR,XLMJPY,XLMGBP,XLMBTC,XLMETH,XVGUSD,XVGEUR,XVGJPY,XVGGBP,XVGBTC,XVGETH,BCIUSD,BCIBTC,MKRUSD,MKRBTC,MKRETH,VENUSD,VENBTC,VENETH,KNCUSD,KNCBTC,KNCETH,POAUSD,POABTC,POAETH,LYMUSD,LYMBTC,LYMETH,UTKUSD,UTKBTC,UTKETH,VEEUSD,VEEBTC,VEEETH,DADUSD,DADBTC,DADETH,ORSUSD,ORSBTC,ORSETH,AUCUSD,AUCBTC,AUCETH,POYUSD,POYBTC,POYETH,FSNUSD,FSNBTC,FSNETH,CBTUSD,CBTBTC,CBTETH", + "AvailablePairs": "BTCUSD,LTCUSD,LTCBTC,ETHUSD,ETHBTC,ETCBTC,ETCUSD,RRTUSD,RRTBTC,ZECUSD,ZECBTC,XMRUSD,XMRBTC,DSHUSD,DSHBTC,BTCEUR,BTCJPY,XRPUSD,XRPBTC,IOTUSD,IOTBTC,IOTETH,EOSUSD,EOSBTC,EOSETH,SANUSD,SANBTC,SANETH,OMGUSD,OMGBTC,OMGETH,BCHUSD,BCHBTC,BCHETH,NEOUSD,NEOBTC,NEOETH,ETPUSD,ETPBTC,ETPETH,QTMUSD,QTMBTC,QTMETH,AVTUSD,AVTBTC,AVTETH,EDOUSD,EDOBTC,EDOETH,BTGUSD,BTGBTC,DATUSD,DATBTC,DATETH,QSHUSD,QSHBTC,QSHETH,YYWUSD,YYWBTC,YYWETH,GNTUSD,GNTBTC,GNTETH,SNTUSD,SNTBTC,SNTETH,IOTEUR,BATUSD,BATBTC,BATETH,MNAUSD,MNABTC,MNAETH,FUNUSD,FUNBTC,FUNETH,ZRXUSD,ZRXBTC,ZRXETH,TNBUSD,TNBBTC,TNBETH,SPKUSD,SPKBTC,SPKETH,TRXUSD,TRXBTC,TRXETH,RCNUSD,RCNBTC,RCNETH,RLCUSD,RLCBTC,RLCETH,AIDUSD,AIDBTC,AIDETH,SNGUSD,SNGBTC,SNGETH,REPUSD,REPBTC,REPETH,ELFUSD,ELFBTC,ELFETH,BTCGBP,ETHEUR,ETHJPY,ETHGBP,NEOEUR,NEOJPY,NEOGBP,EOSEUR,EOSJPY,EOSGBP,IOTJPY,IOTGBP,IOSUSD,IOSBTC,IOSETH,AIOUSD,AIOBTC,AIOETH,REQUSD,REQBTC,REQETH,RDNUSD,RDNBTC,RDNETH,LRCUSD,LRCBTC,LRCETH,WAXUSD,WAXBTC,WAXETH,DAIUSD,DAIBTC,DAIETH,CFIUSD,CFIBTC,CFIETH,AGIUSD,AGIBTC,AGIETH,BFTUSD,BFTBTC,BFTETH,MTNUSD,MTNBTC,MTNETH,ODEUSD,ODEBTC,ODEETH,ANTUSD,ANTBTC,ANTETH,DTHUSD,DTHBTC,DTHETH,MITUSD,MITBTC,MITETH,STJUSD,STJBTC,STJETH,XLMUSD,XLMEUR,XLMJPY,XLMGBP,XLMBTC,XLMETH,XVGUSD,XVGEUR,XVGJPY,XVGGBP,XVGBTC,XVGETH,BCIUSD,BCIBTC,MKRUSD,MKRBTC,MKRETH,VENUSD,VENBTC,VENETH,KNCUSD,KNCBTC,KNCETH,POAUSD,POABTC,POAETH,LYMUSD,LYMBTC,LYMETH,UTKUSD,UTKBTC,UTKETH,VEEUSD,VEEBTC,VEEETH,DADUSD,DADBTC,DADETH,ORSUSD,ORSBTC,ORSETH,AUCUSD,AUCBTC,AUCETH,POYUSD,POYBTC,POYETH,FSNUSD,FSNBTC,FSNETH,CBTUSD,CBTBTC,CBTETH,ZCNUSD,ZCNBTC,ZCNETH,SENUSD,SENBTC,SENETH,NCAUSD,NCABTC,NCAETH,CNDUSD,CNDBTC,CNDETH,CTXUSD,CTXBTC,CTXETH,PAIUSD,PAIBTC,SEEUSD,SEEBTC,SEEETH,ESSUSD,ESSBTC,ESSETH", "EnabledPairs": "BTCUSD,LTCUSD,LTCBTC,ETHUSD,ETHBTC", "BaseCurrencies": "USD", "AssetTypes": "SPOT", @@ -282,7 +282,7 @@ "AuthenticatedAPISupport": false, "APIKey": "Key", "APISecret": "Secret", - "AvailablePairs": "BTC-LTC,BTC-DOGE,BTC-VTC,BTC-PPC,BTC-FTC,BTC-RDD,BTC-NXT,BTC-DASH,BTC-POT,BTC-BLK,BTC-EMC2,BTC-XMY,BTC-AUR,BTC-EFL,BTC-GLD,BTC-SLR,BTC-PTC,BTC-GRS,BTC-NLG,BTC-RBY,BTC-XWC,BTC-MONA,BTC-THC,BTC-ENRG,BTC-ERC,BTC-VRC,BTC-CURE,BTC-XMR,BTC-CLOAK,BTC-KORE,BTC-XDN,BTC-TRUST,BTC-NAV,BTC-XST,BTC-VIA,BTC-PINK,BTC-IOC,BTC-CANN,BTC-SYS,BTC-NEOS,BTC-DGB,BTC-BURST,BTC-EXCL,BTC-SWIFT,BTC-DOPE,BTC-BLOCK,BTC-ABY,BTC-BYC,BTC-XMG,BTC-BAY,BTC-SPR,BTC-VTR,BTC-XRP,BTC-GAME,BTC-COVAL,BTC-NXS,BTC-XCP,BTC-BITB,BTC-GEO,BTC-FLDC,BTC-GRC,BTC-FLO,BTC-NBT,BTC-MUE,BTC-XEM,BTC-CLAM,BTC-DMD,BTC-GAM,BTC-SPHR,BTC-OK,BTC-AEON,BTC-ETH,BTC-TX,BTC-BCY,BTC-EXP,BTC-OMNI,BTC-AMP,BTC-XLM,USDT-BTC,BTC-RVR,BTC-EMC,BTC-FCT,BTC-EGC,BTC-SLS,BTC-RADS,BTC-DCR,BTC-BSD,BTC-XVG,BTC-PIVX,BTC-MEME,BTC-STEEM,BTC-2GIVE,BTC-LSK,BTC-BRK,BTC-WAVES,BTC-LBC,BTC-SBD,BTC-BRX,BTC-ETC,ETH-ETC,BTC-STRAT,BTC-UNB,BTC-SYNX,BTC-EBST,BTC-VRM,BTC-SEQ,BTC-REP,BTC-SHIFT,BTC-ARDR,BTC-XZC,BTC-NEO,BTC-ZEC,BTC-ZCL,BTC-IOP,BTC-GOLOS,BTC-UBQ,BTC-KMD,BTC-GBG,BTC-SIB,BTC-ION,BTC-LMC,BTC-QWARK,BTC-CRW,BTC-SWT,BTC-MLN,BTC-ARK,BTC-DYN,BTC-TKS,BTC-MUSIC,BTC-DTB,BTC-INCNT,BTC-GBYTE,BTC-GNT,BTC-NXC,BTC-EDG,BTC-LGD,ETH-GNT,ETH-REP,USDT-ETH,ETH-WINGS,BTC-WINGS,BTC-RLC,BTC-GNO,BTC-GUP,BTC-LUN,ETH-GUP,ETH-RLC,ETH-LUN,ETH-GNO,BTC-HMQ,ETH-HMQ,BTC-ANT,ETH-ANT,BTC-SC,ETH-BAT,BTC-BAT,BTC-ZEN,BTC-QRL,ETH-QRL,BTC-CRB,ETH-CRB,ETH-LGD,BTC-PTOY,ETH-PTOY,BTC-CFI,ETH-CFI,BTC-BNT,ETH-BNT,BTC-NMR,ETH-NMR,ETH-LTC,ETH-XRP,BTC-SNT,ETH-SNT,BTC-DCT,BTC-XEL,BTC-MCO,ETH-MCO,BTC-ADT,ETH-ADT,BTC-PAY,ETH-PAY,BTC-STORJ,ETH-STORJ,BTC-ADX,ETH-ADX,ETH-DASH,ETH-SC,ETH-ZEC,USDT-ZEC,USDT-LTC,USDT-ETC,USDT-XRP,BTC-OMG,ETH-OMG,BTC-CVC,ETH-CVC,BTC-PART,BTC-QTUM,ETH-QTUM,ETH-XMR,ETH-XEM,ETH-XLM,ETH-NEO,USDT-XMR,USDT-DASH,ETH-BCC,USDT-BCC,BTC-BCC,BTC-DNT,ETH-DNT,USDT-NEO,ETH-WAVES,ETH-STRAT,ETH-DGB,ETH-FCT,USDT-OMG,BTC-ADA,BTC-MANA,ETH-MANA,BTC-SALT,ETH-SALT,BTC-TIX,ETH-TIX,BTC-RCN,ETH-RCN,BTC-VIB,ETH-VIB,BTC-MER,BTC-POWR,ETH-POWR,BTC-BTG,ETH-BTG,USDT-BTG,ETH-ADA,BTC-ENG,ETH-ENG,USDT-ADA,USDT-XVG,USDT-NXT,BTC-UKG,ETH-UKG,BTC-IGNIS,BTC-SRN,ETH-SRN,BTC-WAX,ETH-WAX,BTC-ZRX,ETH-ZRX,BTC-VEE,ETH-VEE,BTC-BCPT,ETH-BCPT,BTC-TRX,ETH-TRX,BTC-TUSD,BTC-LRC,ETH-LRC,ETH-TUSD,BTC-UP,ETH-UP,BTC-DMT,ETH-DMT,USDT-TUSD,BTC-POLY,ETH-POLY,BTC-PRO,ETH-PRO,USDT-SC,USDT-TRX,BTC-BLT,ETH-BLT,BTC-STORM,ETH-STORM,BTC-AID,ETH-AID,BTC-NGC,ETH-NGC,BTC-GTO,ETH-GTO,USDT-DCR,BTC-OCN,ETH-OCN,USD-BTC,USD-USDT,USD-TUSD,BTC-TUBE,BTC-CBC", + "AvailablePairs": "BTC-LTC,BTC-DOGE,BTC-VTC,BTC-PPC,BTC-FTC,BTC-RDD,BTC-NXT,BTC-DASH,BTC-POT,BTC-BLK,BTC-EMC2,BTC-XMY,BTC-AUR,BTC-EFL,BTC-GLD,BTC-SLR,BTC-PTC,BTC-GRS,BTC-NLG,BTC-RBY,BTC-XWC,BTC-MONA,BTC-THC,BTC-ENRG,BTC-ERC,BTC-VRC,BTC-CURE,BTC-XMR,BTC-CLOAK,BTC-KORE,BTC-XDN,BTC-TRUST,BTC-NAV,BTC-XST,BTC-VIA,BTC-PINK,BTC-IOC,BTC-CANN,BTC-SYS,BTC-NEOS,BTC-DGB,BTC-BURST,BTC-EXCL,BTC-BITS,BTC-DOPE,BTC-BLOCK,BTC-ABY,BTC-BYC,BTC-XMG,BTC-BAY,BTC-SPR,BTC-VTR,BTC-XRP,BTC-GAME,BTC-COVAL,BTC-NXS,BTC-XCP,BTC-BITB,BTC-GEO,BTC-FLDC,BTC-GRC,BTC-FLO,BTC-NBT,BTC-MUE,BTC-XEM,BTC-CLAM,BTC-DMD,BTC-GAM,BTC-SPHR,BTC-OK,BTC-AEON,BTC-ETH,BTC-TX,BTC-BCY,BTC-EXP,BTC-OMNI,BTC-AMP,BTC-XLM,USDT-BTC,BTC-RVR,BTC-EMC,BTC-FCT,BTC-EGC,BTC-SLS,BTC-RADS,BTC-DCR,BTC-BSD,BTC-XVG,BTC-PIVX,BTC-MEME,BTC-STEEM,BTC-2GIVE,BTC-LSK,BTC-BRK,BTC-WAVES,BTC-LBC,BTC-SBD,BTC-BRX,BTC-ETC,ETH-ETC,BTC-STRAT,BTC-UNB,BTC-SYNX,BTC-EBST,BTC-VRM,BTC-SEQ,BTC-REP,BTC-SHIFT,BTC-ARDR,BTC-XZC,BTC-NEO,BTC-ZEC,BTC-ZCL,BTC-IOP,BTC-GOLOS,BTC-UBQ,BTC-KMD,BTC-GBG,BTC-SIB,BTC-ION,BTC-LMC,BTC-QWARK,BTC-CRW,BTC-SWT,BTC-MLN,BTC-ARK,BTC-DYN,BTC-TKS,BTC-MUSIC,BTC-DTB,BTC-INCNT,BTC-GBYTE,BTC-GNT,BTC-NXC,BTC-EDG,BTC-MORE,ETH-GNT,ETH-REP,USDT-ETH,ETH-WINGS,BTC-WINGS,BTC-RLC,BTC-GNO,BTC-GUP,BTC-LUN,ETH-GUP,ETH-RLC,ETH-LUN,ETH-GNO,BTC-HMQ,BTC-ANT,ETH-ANT,BTC-SC,ETH-BAT,BTC-BAT,BTC-ZEN,BTC-QRL,BTC-CRB,ETH-MORE,BTC-PTOY,BTC-CFI,ETH-CFI,BTC-BNT,ETH-BNT,BTC-NMR,ETH-LTC,ETH-XRP,BTC-SNT,ETH-SNT,BTC-DCT,BTC-XEL,BTC-MCO,ETH-MCO,BTC-ADT,ETH-ADT,BTC-PAY,ETH-PAY,BTC-STORJ,BTC-ADX,ETH-ADX,ETH-DASH,ETH-SC,ETH-ZEC,USDT-ZEC,USDT-LTC,USDT-ETC,USDT-XRP,BTC-OMG,ETH-OMG,BTC-CVC,ETH-CVC,BTC-PART,BTC-QTUM,ETH-QTUM,ETH-XMR,ETH-XEM,ETH-XLM,ETH-NEO,USDT-XMR,USDT-DASH,ETH-BCH,USDT-BCH,BTC-BCH,BTC-DNT,ETH-DNT,USDT-NEO,ETH-WAVES,ETH-STRAT,ETH-DGB,ETH-FCT,USDT-OMG,BTC-ADA,BTC-MANA,ETH-MANA,BTC-SALT,ETH-SALT,BTC-TIX,ETH-TIX,BTC-RCN,ETH-RCN,BTC-VIB,ETH-VIB,BTC-MER,BTC-POWR,ETH-POWR,BTC-BTG,ETH-BTG,USDT-BTG,ETH-ADA,BTC-ENG,ETH-ENG,USDT-ADA,USDT-XVG,USDT-NXT,BTC-UKG,ETH-UKG,BTC-IGNIS,BTC-SRN,ETH-SRN,BTC-WAX,ETH-WAX,BTC-ZRX,ETH-ZRX,BTC-VEE,ETH-VEE,BTC-BCPT,ETH-BCPT,BTC-TRX,ETH-TRX,BTC-TUSD,BTC-LRC,ETH-LRC,ETH-TUSD,BTC-UP,ETH-UP,BTC-DMT,ETH-DMT,USDT-TUSD,BTC-POLY,ETH-POLY,BTC-PRO,ETH-PRO,USDT-SC,USDT-TRX,BTC-BLT,ETH-BLT,BTC-STORM,ETH-STORM,BTC-AID,ETH-AID,BTC-NGC,ETH-NGC,BTC-GTO,ETH-GTO,USDT-DCR,BTC-OCN,ETH-OCN,USD-BTC,USD-USDT,USD-TUSD,BTC-TUBE,BTC-CBC,BTC-CMCT,USD-ETH,BTC-NLC2,BTC-BKX", "EnabledPairs": "USDT-BTC", "BaseCurrencies": "USD", "AssetTypes": "SPOT", @@ -377,7 +377,7 @@ "AuthenticatedAPISupport": false, "APIKey": "Key", "APISecret": "Secret", - "AvailablePairs": "ZEC_USD,ZEC_RUB,ETH_USDT,DASH_USD,ETC_RUB,KICK_BTC,DASH_RUB,BCH_ETH,ETC_BTC,EOS_USD,LTC_EUR,ZEC_EUR,BTG_USD,XRP_BTC,WAVES_BTC,BTG_BTC,ETH_EUR,XMR_BTC,XMR_USD,BTC_USDT,WAVES_RUB,LTC_BTC,USDT_USD,BTC_RUB,ETH_BTC,ETH_PLN,XRP_RUB,USD_RUB,BTC_UAH,EOS_BTC,HBZ_ETH,DASH_BTC,ETH_UAH,ETC_USD,XRP_USD,KICK_ETH,BTC_USD,BTC_EUR,BCH_BTC,HBZ_BTC,BCH_RUB,ETH_USD,LTC_RUB,USDT_RUB,BTC_PLN,BCH_USD,ETH_LTC,ETH_RUB,LTC_USD,DOGE_BTC,HBZ_USD,ZEC_BTC,XMR_EUR", + "AvailablePairs": "STQ_EUR,ZEC_USD,XRP_USD,XLM_BTC,XLM_USD,ETC_RUB,BCH_RUB,ETH_USD,ZEC_RUB,WAVES_BTC,BTC_USD,DXT_BTC,EOS_BTC,XRP_RUB,BTC_UAH,STQ_BTC,ETC_USD,ETH_UAH,BTC_USDT,ETH_USDT,HBZ_USD,LTC_BTC,XMR_EUR,LTC_EUR,BTG_USD,DASH_RUB,ETH_BTC,ZEC_EUR,KICK_BTC,DASH_USD,ETH_LTC,ETH_RUB,USDT_USD,WAVES_RUB,BCH_ETH,ETH_PLN,ETC_BTC,BTCZ_BTC,STQ_RUB,EOS_USD,BTC_PLN,LTC_USD,KICK_ETH,DXT_USD,HBZ_ETH,ETH_EUR,XMR_USD,USDT_RUB,USD_RUB,BCH_USD,DASH_BTC,LTC_RUB,DOGE_BTC,BCH_BTC,ZEC_BTC,XRP_BTC,BTC_EUR,BTG_BTC,HBZ_BTC,XMR_BTC,BTC_RUB,XLM_RUB,STQ_USD", "EnabledPairs": "BTC_USD,LTC_USD", "BaseCurrencies": "USD,EUR,RUB,PLN,UAH", "AssetTypes": "SPOT", @@ -393,7 +393,7 @@ } }, { - "Name": "GDAX", + "Name": "CoinbasePro", "Enabled": true, "Verbose": false, "Websocket": false, @@ -451,7 +451,7 @@ "AuthenticatedAPISupport": false, "APIKey": "Key", "APISecret": "Secret", - "AvailablePairs": "BCN-BTC,BTC-USD,DASH-BTC,DOGE-BTC,DOGE-USD,DSH-BTC,EMC-BTC,ETH-BTC,FCN-BTC,LSK-BTC,LTC-BTC,LTC-USD,NXT-BTC,QCN-BTC,SBD-BTC,SC-BTC,STEEM-BTC,XDN-BTC,XEM-BTC,XMR-BTC,ARDR-BTC,ZEC-BTC,WAVES-BTC,MAID-BTC,AMP-BTC,BUS-BTC,DGD-BTC,ICN-BTC,SNGLS-BTC,1ST-BTC,TRST-BTC,TIME-BTC,GNO-BTC,REP-BTC,XMR-USD,DASH-USD,ETH-USD,NXT-USD,ZRC-BTC,BOS-BTC,DCT-BTC,ANT-BTC,AEON-BTC,GUP-BTC,PLU-BTC,LUN-BTC,TAAS-BTC,NXC-BTC,EDG-BTC,RLC-BTC,SWT-BTC,TKN-BTC,WINGS-BTC,XAUR-BTC,AE-BTC,PTOY-BTC,ZEC-USD,XEM-USD,BCN-USD,XDN-USD,MAID-USD,ETC-BTC,ETC-USD,CFI-BTC,PLBT-BTC,BNT-BTC,XDNCO-BTC,FYN-ETH,SNM-BTC,SNM-ETH,SNT-ETH,CVC-USD,PAY-ETH,OAX-ETH,OMG-ETH,BQX-ETH,XTZ-BTC,DICE-BTC,CFI-ETH,PTOY-ETH,1ST-ETH,XAUR-ETH,TAAS-ETH,TIME-ETH,DICE-ETH,SWT-ETH,XMR-ETH,ETC-ETH,DASH-ETH,ZEC-ETH,PLU-ETH,GNO-ETH,XRP-BTC,NET-ETH,STRAT-USD,STRAT-BTC,SNC-ETH,ADX-ETH,BET-ETH,EOS-ETH,DENT-ETH,SAN-ETH,EOS-BTC,EOS-USD,MNE-BTC,MSP-ETH,DDF-ETH,XTZ-ETH,XTZ-USD,UET-ETH,MYB-ETH,SUR-ETH,IXT-ETH,PLR-ETH,TIX-ETH,NDC-ETH,PRO-ETH,AVT-ETH,COSS-ETH,EVX-USD,DLT-BTC,BNT-ETH,BNT-USD,QAU-BTC,QAU-ETH,MANA-USD,DNT-BTC,FYP-BTC,OPT-BTC,TNT-ETH,IFT-BTC,STX-BTC,STX-ETH,STX-USD,TNT-USD,TNT-BTC,CAT-BTC,CAT-ETH,CAT-USD,BCH-BTC,BCH-ETH,BCH-USD,ENG-ETH,XUC-USD,SNC-BTC,SNC-USD,OAX-USD,OAX-BTC,BAS-ETH,ZRX-BTC,ZRX-ETH,ZRX-USD,RVT-BTC,ICOS-BTC,ICOS-ETH,ICOS-USD,PPC-BTC,PPC-USD,QTUM-ETH,VERI-BTC,VERI-ETH,VERI-USD,IGNIS-ETH,PRG-BTC,PRG-ETH,PRG-USD,BMC-BTC,BMC-ETH,BMC-USD,CND-BTC,CND-ETH,CND-USD,SKIN-BTC,EMGO-BTC,EMGO-USD,CDT-ETH,CDT-USD,FUN-BTC,FUN-ETH,FUN-USD,HVN-BTC,HVN-ETH,FUEL-BTC,FUEL-ETH,FUEL-USD,POE-BTC,POE-ETH,MCAP-BTC,AIR-BTC,AIR-ETH,AIR-USD,AMB-USD,AMB-ETH,AMB-BTC,NTO-BTC,ICO-BTC,PING-BTC,GAME-BTC,TKR-ETH,HPC-BTC,PPT-ETH,MTH-BTC,MTH-ETH,WMGO-BTC,WMGO-USD,LRC-BTC,LRC-ETH,ICX-BTC,ICX-ETH,NEO-BTC,NEO-ETH,NEO-USD,CSNO-BTC,ORME-BTC,ICX-USD,PIX-BTC,PIX-ETH,IND-ETH,KICK-BTC,YOYOW-BTC,MIPS-BTC,CDT-BTC,XVG-BTC,XVG-ETH,XVG-USD,DGB-BTC,DGB-ETH,DGB-USD,DCN-BTC,DCN-ETH,DCN-USD,LAT-BTC,CCT-ETH,EBET-ETH,VIBE-BTC,VOISE-BTC,ENJ-BTC,ENJ-ETH,ENJ-USD,ZSC-BTC,ZSC-ETH,ZSC-USD,ETBS-BTC,TRX-BTC,TRX-ETH,TRX-USD,VEN-BTC,VEN-ETH,VEN-USD,ART-BTC,EVX-BTC,EVX-ETH,QVT-ETH,EBTCOLD-BTC,EBTCOLD-ETH,EBTCOLD-USD,BKB-BTC,EXN-BTC,TGT-BTC,ATS-ETH,BMT-BTC,BMT-ETH,SUB-BTC,SUB-ETH,SUB-USD,WTC-BTC,CNX-BTC,ATB-BTC,ATB-ETH,ATB-USD,ODN-BTC,BTM-BTC,BTM-ETH,BTM-USD,B2X-BTC,B2X-ETH,B2X-USD,ATM-BTC,ATM-ETH,ATM-USD,LIFE-BTC,VIB-BTC,VIB-ETH,VIB-USD,DRT-ETH,STU-USD,OMG-BTC,PAY-BTC,COSS-BTC,PPT-BTC,SNT-BTC,BTG-BTC,BTG-ETH,BTG-USD,SMART-BTC,SMART-ETH,SMART-USD,XUC-ETH,XUC-BTC,CL-BTC,CL-ETH,CL-USD,LA-ETH,CLD-BTC,CLD-ETH,CLD-USD,ELM-BTC,EDO-BTC,EDO-ETH,EDO-USD,HGT-ETH,POLL-BTC,IXT-BTC,ATS-BTC,SCL-BTC,ATL-BTC,EBTC-BTC,EBTC-ETH,EBTC-USD,ETP-BTC,ETP-ETH,ETP-USD,OTX-BTC,CDX-ETH,DRPU-BTC,NEBL-BTC,NEBL-ETH,HAC-BTC,CTX-BTC,CTX-ETH,ELE-BTC,ARN-BTC,ARN-ETH,SISA-BTC,SISA-ETH,STU-BTC,STU-ETH,GVT-ETH,INDI-BTC,BTX-BTC,LTC-ETH,BCN-ETH,MAID-ETH,NXT-ETH,STRAT-ETH,XDN-ETH,XEM-ETH,PLR-BTC,SUR-BTC,BQX-BTC,DOGE-ETH,ITS-BTC,AMM-BTC,AMM-ETH,AMM-USD,DBIX-BTC,PRE-BTC,KBR-BTC,TBT-BTC,ERO-BTC,SMS-BTC,SMS-ETH,SMS-USD,ZAP-BTC,DOV-BTC,DOV-ETH,FRD-BTC,DRPU-ETH,OTN-BTC,XRP-ETH,XRP-USD,HSR-BTC,LEND-BTC,LEND-ETH,SPF-ETH,SBTC-BTC,SBTC-ETH,BTCA-BTC,BTCA-ETH,BTCA-USD,WRC-BTC,WRC-ETH,WRC-USD,LOC-BTC,LOC-ETH,LOC-USD,SWFTC-BTC,SWFTC-ETH,SWFTC-USD,STAR-ETH,SBTC-USD,STORM-BTC,DIM-ETH,DIM-USD,DIM-BTC,NGC-BTC,NGC-ETH,NGC-USD,EMC-ETH,EMC-USD,MCO-BTC,MCO-ETH,MCO-USD,MANA-ETH,MANA-BTC,ECH-BTC,CPAY-ETH,DATA-BTC,DATA-ETH,DATA-USD,UTT-BTC,UTT-ETH,UTT-USD,KMD-BTC,KMD-ETH,KMD-USD,QTUM-USD,QTUM-BTC,SNT-USD,OMG-USD,EKO-BTC,EKO-ETH,ADX-BTC,ADX-USD,LSK-ETH,LSK-USD,PLR-USD,SUR-USD,BQX-USD,DRT-USD,REP-ETH,REP-USD,TIO-BTC,TIO-ETH,TIO-USD,WAX-BTC,WAX-ETH,WAX-USD,EET-BTC,EET-ETH,EET-USD,C20-BTC,C20-ETH,IDH-BTC,IDH-ETH,IPL-BTC,COV-BTC,COV-ETH,SENT-BTC,SENT-ETH,SENT-USD,SMT-BTC,SMT-ETH,SMT-USD,CVH-ETH,CVH-USD,CAS-BTC,CAS-ETH,CAS-USD,CHAT-BTC,CHAT-ETH,CHAT-USD,GRMD-BTC,AVH-BTC,TRAC-ETH,JNT-ETH,PCL-BTC,PCL-ETH,CLOUT-BTC,UTK-BTC,UTK-ETH,UTK-USD,GNX-ETH,CHSB-BTC,CHSB-ETH,AVH-ETH,DAY-BTC,DAY-ETH,DAY-USD,NEU-BTC,NEU-ETH,NEU-USD,AVH-USD,CLOUT-ETH,CLOUT-USD,TAU-BTC,MEK-BTC,FLP-BTC,FLP-ETH,FLP-USD,R-BTC,R-ETH,EKO-USD,BCPT-ETH,BCPT-USD,PKT-BTC,PKT-ETH,WLK-BTC,WLK-ETH,WLK-USD,EVN-BTC,CPG-BTC,CPG-ETH,BPTN-BTC,BPTN-ETH,BPTN-USD,BETR-BTC,BETR-ETH,ARCT-BTC,ARCT-USD,DBET-BTC,DBET-ETH,DBET-USD,RNTB-ETH,HAND-ETH,HAND-USD,BEZ-BTC,BEZ-ETH,BEZ-USD,ACO-ETH,CTE-BTC,CTE-ETH,CTE-USD,UTNP-BTC,UTNP-ETH,UTNP-USD,CPY-BTC,CPY-ETH,CHP-ETH,BCPT-BTC,ACT-BTC,ACT-ETH,ACT-USD,HIRE-ETH,ADA-BTC,ADA-ETH,ADA-USD,SIG-BTC,RPM-BTC,RPM-ETH,MTX-BTC,MTX-ETH,MTX-USD,BGG-BTC,BGG-ETH,BGG-USD,SETH-ETH,WIZ-BTC,WIZ-ETH,WIZ-USD,DADI-BTC,DADI-ETH,BDG-ETH,DATX-BTC,DATX-ETH,TRUE-BTC,DRG-BTC,DRG-ETH,BANCA-BTC,BANCA-ETH,ZAP-ETH,ZAP-USD,AUTO-BTC,NOAH-BTC,SOC-BTC,WILD-BTC,INSUR-BTC,INSUR-ETH,OCN-BTC,OCN-ETH,STQ-BTC,STQ-ETH,XLM-BTC,XLM-ETH,XLM-USD,IOTA-BTC,IOTA-ETH,IOTA-USD,DRT-BTC,MLD-BTC,MLD-ETH,MLD-USD,BETR-USD,CGC-ETH,ERT-BTC,CRPT-BTC,CRPT-USD,MESH-BTC,MESH-ETH,MESH-USD,HLW-ETH,IHT-BTC,IHT-ETH,IHT-USD,SCC-BTC,YCC-BTC,DAN-BTC,TEL-BTC,TEL-ETH,BUBO-BTC,BUBO-ETH,BUBO-USD,VIT-BTC,VIT-ETH,VIT-USD,NCT-BTC,NCT-ETH,NCT-USD,AXP-BTC,AXP-ETH,BMH-BTC,BANCA-USD,NOAH-ETH,NOAH-USD,HQX-BTC,LDC-BTC,XMO-BTC,XMO-USD,XMO-ETH,BERRY-BTC,BERRY-ETH,BERRY-USD,BSTN-BTC,BSTN-ETH,BSTN-USD,GBX-BTC,GBX-ETH,GBX-USD,SHIP-BTC,SHIP-ETH,NANO-BTC,NANO-ETH,NANO-USD,LNC-BTC,UNC-BTC,UNC-ETH,RPX-BTC,RPX-ETH,RPX-USD,KIN-ETH,ARDR-USD,DAXT-BTC,DAXT-ETH,FOTA-ETH,FOTA-BTC,SETH-BTC,CVT-BTC,CVT-ETH,CVT-USD,STQ-USD,GNT-BTC,GNT-ETH,GNT-USD,ADH-BTC,ADH-ETH,BBC-BTC,BBC-ETH,GET-BTC,MITH-BTC,MITH-ETH,MITH-USD,SUNC-ETH,DADI-USD,TKY-BTC,ACAT-BTC,ACAT-ETH,ACAT-USD,BTX-USD,TCN-BTC,VIO-ETH,WIKI-BTC,WIKI-ETH,WIKI-USD,ONT-BTC,ONT-ETH,ONT-USD,FTX-BTC,FTX-ETH,FREC-BTC,NAVI-BTC,FREC-ETH,FREC-USD,VME-ETH,NAVI-ETH,BTCP-BTC,LND-ETH,CSM-BTC,NANJ-BTC,MTC-BTC,MTC-ETH,MTC-USD,NTK-BTC,NTK-ETH,NTK-USD,AUC-BTC,AUC-ETH,CMCT-BTC,CMCT-ETH,CMCT-USD,MAN-BTC,MAN-ETH,MAN-USD,HIRE-BTC,TKA-BTC,TKA-ETH,TKA-USD,PNT-BTC,PNT-ETH,FXT-BTC,NEXO-BTC,CHX-BTC,CHX-ETH,CHX-USD,PAT-BTC,PAT-ETH,XMC-BTC,EJOY-BTC,EJOY-ETH,EJOY-USD,FXT-ETH,HERO-BTC,HERO-ETH,XMC-ETH,XMC-USD,STAK-BTC,STAK-ETH,FDZ-BTC,FDZ-ETH,FDZ-USD,SPD-BTC,SPD-ETH,LUC-BTC,MITX-BTC,TIV-BTC,B2G-BTC,B2G-USD,LATX-BTC,ZPT-BTC,ZPT-ETH,HBZ-BTC,FACE-BTC,FACE-ETH,HBZ-ETH,HBZ-USD,ZPT-USD,MORPH-BTC,MORPH-ETH,MORPH-USD,EBKC-BTC,CPT-BTC,PAT-USD,WITH-BTC,MITX-ETH,JOT-BTC,JBC-BTC,JBC-ETH,BTS-BTC,BNK-BTC,BNK-ETH,BNK-USD,TIV-ETH,TIV-USD,LUC-ETH,LUC-USD,CSM-ETH,CSM-USD,INK-BTC,IOST-BTC,INK-ETH,INK-USD,CBC-BTC,IOST-USD,COIN-BTC,ZIL-BTC,COIN-USD,COIN-ETH,PMNT-BTC,ABYSS-BTC,ABYSS-ETH,ZIL-USD,BCI-BTC,CBC-ETH,CBC-USD,PITCH-BTC,PITCH-ETH,HTML-BTC,HTML-ETH,HTML-USD,TDS-BTC,TDS-USD,TDS-ETH,SBD-ETH,SBD-USD", + "AvailablePairs": "BCN-BTC,BTC-USD,DASH-BTC,DOGE-BTC,DOGE-USD,DSH-BTC,EMC-BTC,ETH-BTC,FCN-BTC,LSK-BTC,LTC-BTC,LTC-USD,NXT-BTC,SBD-BTC,SC-BTC,STEEM-BTC,XDN-BTC,XEM-BTC,XMR-BTC,ARDR-BTC,ZEC-BTC,WAVES-BTC,MAID-BTC,AMP-BTC,BUS-BTC,DGD-BTC,ICN-BTC,SNGLS-BTC,1ST-BTC,TRST-BTC,TIME-BTC,GNO-BTC,REP-BTC,XMR-USD,DASH-USD,ETH-USD,NXT-USD,ZRC-BTC,BOS-BTC,DCT-BTC,ANT-BTC,AEON-BTC,GUP-BTC,PLU-BTC,LUN-BTC,TAAS-BTC,NXC-BTC,EDG-BTC,RLC-BTC,SWT-BTC,TKN-BTC,WINGS-BTC,XAUR-BTC,AE-BTC,PTOY-BTC,ZEC-USD,XEM-USD,BCN-USD,XDN-USD,MAID-USD,ETC-BTC,ETC-USD,CFI-BTC,PLBT-BTC,BNT-BTC,XDNCO-BTC,FYN-ETH,SNM-BTC,SNM-ETH,SNT-ETH,CVC-USD,PAY-ETH,OAX-ETH,OMG-ETH,BQX-ETH,XTZ-BTC,DICE-BTC,CFI-ETH,PTOY-ETH,1ST-ETH,XAUR-ETH,TAAS-ETH,TIME-ETH,DICE-ETH,SWT-ETH,XMR-ETH,ETC-ETH,DASH-ETH,ZEC-ETH,PLU-ETH,GNO-ETH,XRP-BTC,NET-ETH,STRAT-USD,STRAT-BTC,SNC-ETH,ADX-ETH,BET-ETH,EOS-ETH,DENT-ETH,SAN-ETH,EOS-BTC,EOS-USD,MNE-BTC,MSP-ETH,DDF-ETH,XTZ-ETH,XTZ-USD,UET-ETH,MYB-ETH,SUR-ETH,IXT-ETH,PLR-ETH,TIX-ETH,NDC-ETH,PRO-ETH,AVT-ETH,COSS-ETH,EVX-USD,DLT-BTC,BNT-ETH,BNT-USD,QAU-BTC,QAU-ETH,MANA-USD,DNT-BTC,FYP-BTC,OPT-BTC,TNT-ETH,IFT-BTC,STX-BTC,STX-ETH,STX-USD,TNT-USD,TNT-BTC,CAT-BTC,CAT-ETH,CAT-USD,BCH-BTC,BCH-ETH,BCH-USD,ENG-ETH,XUC-USD,SNC-BTC,SNC-USD,OAX-USD,OAX-BTC,BAS-ETH,ZRX-BTC,ZRX-ETH,ZRX-USD,RVT-BTC,ICOS-BTC,ICOS-ETH,ICOS-USD,PPC-BTC,PPC-USD,QTUM-ETH,VERI-BTC,VERI-ETH,VERI-USD,IGNIS-ETH,PRG-BTC,PRG-ETH,PRG-USD,BMC-BTC,BMC-ETH,BMC-USD,CND-BTC,CND-ETH,CND-USD,SKIN-BTC,EMGO-BTC,EMGO-USD,CDT-ETH,CDT-USD,FUN-BTC,FUN-ETH,FUN-USD,HVN-BTC,HVN-ETH,FUEL-BTC,FUEL-ETH,FUEL-USD,POE-BTC,POE-ETH,MCAP-BTC,AIR-BTC,AIR-ETH,AIR-USD,AMB-USD,AMB-ETH,AMB-BTC,NTO-BTC,ICO-BTC,PING-BTC,GAME-BTC,TKR-ETH,HPC-BTC,PPT-ETH,MTH-BTC,MTH-ETH,WMGO-BTC,WMGO-USD,LRC-BTC,LRC-ETH,ICX-BTC,ICX-ETH,NEO-BTC,NEO-ETH,NEO-USD,CSNO-BTC,ORME-BTC,ICX-USD,PIX-BTC,PIX-ETH,IND-ETH,KICK-BTC,YOYOW-BTC,MIPS-BTC,CDT-BTC,XVG-BTC,XVG-ETH,XVG-USD,DGB-BTC,DGB-ETH,DGB-USD,DCN-BTC,DCN-ETH,DCN-USD,CCT-ETH,EBET-ETH,VIBE-BTC,VOISE-BTC,ENJ-BTC,ENJ-ETH,ENJ-USD,ZSC-BTC,ZSC-ETH,ZSC-USD,ETBS-BTC,VEN-BTC,VEN-ETH,VEN-USD,ART-BTC,EVX-BTC,EVX-ETH,QVT-ETH,EBTCOLD-BTC,EBTCOLD-ETH,EBTCOLD-USD,BKB-BTC,EXN-BTC,TGT-BTC,ATS-ETH,BMT-BTC,BMT-ETH,SUB-BTC,SUB-ETH,SUB-USD,WTC-BTC,CNX-BTC,ATB-BTC,ATB-ETH,ATB-USD,ODN-BTC,BTM-BTC,BTM-ETH,BTM-USD,B2X-BTC,B2X-ETH,B2X-USD,ATM-BTC,ATM-ETH,ATM-USD,LIFE-BTC,VIB-BTC,VIB-ETH,VIB-USD,DRT-ETH,STU-USD,OMG-BTC,PAY-BTC,COSS-BTC,PPT-BTC,SNT-BTC,BTG-BTC,BTG-ETH,BTG-USD,SMART-BTC,SMART-ETH,SMART-USD,XUC-ETH,XUC-BTC,CL-BTC,CL-ETH,CL-USD,LA-ETH,CLD-BTC,CLD-ETH,CLD-USD,EDO-BTC,EDO-ETH,EDO-USD,HGT-ETH,POLL-BTC,IXT-BTC,ATS-BTC,SCL-BTC,ATL-BTC,EBTC-BTC,EBTC-ETH,EBTC-USD,ETP-BTC,ETP-ETH,ETP-USD,OTX-BTC,CDX-ETH,DRPU-BTC,NEBL-BTC,NEBL-ETH,HAC-BTC,CTX-BTC,CTX-ETH,ELE-BTC,ARN-BTC,ARN-ETH,STU-BTC,STU-ETH,GVT-ETH,INDI-BTC,BTX-BTC,LTC-ETH,BCN-ETH,MAID-ETH,NXT-ETH,STRAT-ETH,XDN-ETH,XEM-ETH,PLR-BTC,SUR-BTC,BQX-BTC,DOGE-ETH,ITS-BTC,AMM-BTC,AMM-ETH,AMM-USD,DBIX-BTC,PRE-BTC,KBR-BTC,TBT-BTC,ERO-BTC,SMS-BTC,SMS-ETH,SMS-USD,ZAP-BTC,DOV-BTC,DOV-ETH,DRPU-ETH,OTN-BTC,XRP-ETH,XRP-USD,HSR-BTC,LEND-BTC,LEND-ETH,SPF-BTC,SPF-ETH,SBTC-BTC,SBTC-ETH,WRC-BTC,WRC-ETH,WRC-USD,LOC-BTC,LOC-ETH,LOC-USD,SWFTC-BTC,SWFTC-ETH,SWFTC-USD,STAR-ETH,SBTC-USD,STORM-BTC,DIM-ETH,DIM-USD,DIM-BTC,NGC-BTC,NGC-ETH,NGC-USD,EMC-ETH,EMC-USD,MCO-BTC,MCO-ETH,MCO-USD,MANA-ETH,MANA-BTC,ECH-BTC,CPAY-ETH,DATA-BTC,DATA-ETH,DATA-USD,UTT-BTC,UTT-ETH,UTT-USD,KMD-BTC,KMD-ETH,KMD-USD,QTUM-USD,QTUM-BTC,SNT-USD,OMG-USD,EKO-BTC,EKO-ETH,ADX-BTC,ADX-USD,LSK-ETH,LSK-USD,PLR-USD,SUR-USD,BQX-USD,DRT-USD,REP-ETH,REP-USD,TIO-BTC,TIO-ETH,TIO-USD,WAX-BTC,WAX-ETH,WAX-USD,EET-BTC,EET-ETH,EET-USD,C20-BTC,C20-ETH,IDH-BTC,IDH-ETH,IPL-BTC,COV-BTC,COV-ETH,SENT-BTC,SENT-ETH,SENT-USD,SMT-BTC,SMT-ETH,SMT-USD,CVH-ETH,CVH-USD,CAS-BTC,CAS-ETH,CAS-USD,CHAT-BTC,CHAT-ETH,CHAT-USD,GRMD-BTC,AVH-BTC,TRAC-ETH,JNT-ETH,PCL-BTC,PCL-ETH,CLOUT-BTC,UTK-BTC,UTK-ETH,UTK-USD,GNX-ETH,CHSB-BTC,CHSB-ETH,AVH-ETH,DAY-BTC,DAY-ETH,DAY-USD,NEU-BTC,NEU-ETH,NEU-USD,AVH-USD,CLOUT-ETH,CLOUT-USD,TAU-BTC,MEK-BTC,FLP-BTC,FLP-ETH,FLP-USD,R-BTC,R-ETH,EKO-USD,BCPT-ETH,BCPT-USD,PKT-BTC,PKT-ETH,WLK-BTC,WLK-ETH,WLK-USD,EVN-BTC,CPG-BTC,CPG-ETH,BPTN-BTC,BPTN-ETH,BPTN-USD,BETR-BTC,BETR-ETH,ARCT-BTC,ARCT-USD,DBET-BTC,DBET-ETH,DBET-USD,RNTB-ETH,HAND-ETH,HAND-USD,BEZ-BTC,BEZ-ETH,BEZ-USD,ACO-ETH,CTE-BTC,CTE-ETH,CTE-USD,UTNP-BTC,UTNP-ETH,UTNP-USD,CPY-BTC,CPY-ETH,CHP-ETH,BCPT-BTC,ACT-BTC,ACT-ETH,ACT-USD,HIRE-ETH,ADA-BTC,ADA-ETH,ADA-USD,SIG-BTC,RPM-BTC,RPM-ETH,MTX-BTC,MTX-ETH,MTX-USD,BGG-BTC,BGG-ETH,BGG-USD,SETH-ETH,WIZ-BTC,WIZ-ETH,WIZ-USD,DADI-BTC,DADI-ETH,BDG-ETH,DATX-BTC,DATX-ETH,TRUE-BTC,DRG-BTC,DRG-ETH,BANCA-BTC,BANCA-ETH,ZAP-ETH,ZAP-USD,AUTO-BTC,NOAH-BTC,SOC-BTC,WILD-BTC,INSUR-BTC,INSUR-ETH,OCN-BTC,OCN-ETH,STQ-BTC,STQ-ETH,XLM-BTC,XLM-ETH,XLM-USD,IOTA-BTC,IOTA-ETH,IOTA-USD,DRT-BTC,MLD-BTC,MLD-ETH,MLD-USD,BETR-USD,CGC-ETH,ERT-BTC,CRPT-BTC,CRPT-USD,MESH-BTC,MESH-ETH,MESH-USD,HLW-ETH,IHT-BTC,IHT-ETH,IHT-USD,SCC-BTC,YCC-BTC,DAN-BTC,TEL-BTC,TEL-ETH,BUBO-BTC,BUBO-ETH,BUBO-USD,VIT-BTC,VIT-ETH,VIT-USD,NCT-BTC,NCT-ETH,NCT-USD,AXP-BTC,AXP-ETH,BMH-BTC,BANCA-USD,NOAH-ETH,NOAH-USD,HQX-BTC,LDC-BTC,XMO-BTC,XMO-USD,XMO-ETH,BERRY-BTC,BERRY-ETH,BERRY-USD,BSTN-BTC,BSTN-ETH,BSTN-USD,GBX-BTC,GBX-ETH,GBX-USD,SHIP-BTC,SHIP-ETH,NANO-BTC,NANO-ETH,NANO-USD,LNC-BTC,UNC-BTC,UNC-ETH,RPX-BTC,RPX-ETH,RPX-USD,KIN-ETH,ARDR-USD,DAXT-BTC,DAXT-ETH,FOTA-ETH,FOTA-BTC,SETH-BTC,CVT-BTC,CVT-ETH,CVT-USD,STQ-USD,GNT-BTC,GNT-ETH,GNT-USD,ADH-BTC,ADH-ETH,BBC-BTC,BBC-ETH,GET-BTC,MITH-BTC,MITH-ETH,MITH-USD,SUNC-ETH,DADI-USD,TKY-BTC,ACAT-BTC,ACAT-ETH,ACAT-USD,BTX-USD,TCN-BTC,VIO-ETH,WIKI-BTC,WIKI-ETH,WIKI-USD,ONT-BTC,ONT-ETH,ONT-USD,FTX-BTC,FTX-ETH,FREC-BTC,NAVI-BTC,FREC-ETH,FREC-USD,VME-ETH,NAVI-ETH,BTCP-BTC,LND-ETH,CSM-BTC,NANJ-BTC,MTC-BTC,MTC-ETH,MTC-USD,NTK-BTC,NTK-ETH,NTK-USD,AUC-BTC,AUC-ETH,CMCT-BTC,CMCT-ETH,CMCT-USD,MAN-BTC,MAN-ETH,MAN-USD,HIRE-BTC,TKA-BTC,TKA-ETH,TKA-USD,PNT-BTC,PNT-ETH,FXT-BTC,NEXO-BTC,CHX-BTC,CHX-ETH,CHX-USD,PAT-BTC,PAT-ETH,XMC-BTC,EJOY-BTC,EJOY-ETH,EJOY-USD,FXT-ETH,HERO-BTC,HERO-ETH,XMC-ETH,XMC-USD,STAK-BTC,STAK-ETH,FDZ-BTC,FDZ-ETH,FDZ-USD,SPD-BTC,SPD-ETH,LUC-BTC,MITX-BTC,TIV-BTC,B2G-BTC,B2G-USD,ZPT-BTC,ZPT-ETH,HBZ-BTC,FACE-BTC,FACE-ETH,HBZ-ETH,HBZ-USD,ZPT-USD,MORPH-BTC,MORPH-ETH,MORPH-USD,EBKC-BTC,CPT-BTC,PAT-USD,HTML-BTC,HTML-ETH,MITX-ETH,JOT-BTC,JBC-BTC,JBC-ETH,BTS-BTC,BNK-BTC,KBC-BTC,KBC-ETH,BNK-ETH,BNK-USD,TIV-ETH,TIV-USD,LUC-ETH,LUC-USD,CSM-ETH,CSM-USD,INK-BTC,IOST-BTC,INK-ETH,INK-USD,CBC-BTC,IOST-USD,COIN-BTC,ZIL-BTC,COIN-USD,COIN-ETH,PMNT-BTC,ABYSS-BTC,ABYSS-ETH,ZIL-USD,BCI-BTC,CBC-ETH,CBC-USD,PITCH-BTC,PITCH-ETH,HTML-USD,TDS-BTC,TDS-ETH,TDS-USD,SBD-ETH,SBD-USD,DPN-BTC,UUU-BTC,UUU-ETH,XBP-BTC,KRM-USD,CLN-BTC,IVY-BTC,IVY-ETH,TTU-BTC,TTU-ETH,TTU-USD,CLN-ETH,DOR-BTC,DOR-ETH,DOR-USD,ELEC-BTC,ELEC-ETH,ELEC-USD,QNTU-BTC,QNTU-ETH,QNTU-USD,IPL-ETH,IPL-USD,CENNZ-BTC,BTCP-ETH,BTCP-USD,CENNZ-ETH,SWM-BTC,MXM-BTC,MXM-ETH,SPF-USD,LCC-BTC,HGT-BTC,BTC-TUSD,XMR-TUSD,USD-TUSD,BTC-DAI,ETH-DAI,MKR-DAI,USD-DAI,MKR-BTC,MKR-ETH,MKR-USD,ETH-TUSD,ZRX-TUSD,TUSD-DAI,LTC-TUSD,EOS-DAI,NEO-TUSD,BCH-TUSD,NEO-DAI,LTC-DAI,XMR-DAI,BCH-DAI,XRP-DAI,NEXO-ETH,NEXO-USD,DWS-BTC,DWS-ETH,DWS-USD,APPC-BTC,APPC-ETH,APPC-USD,BIT-ETH,TRX-BTC,TRX-ETH,TRX-USD", "EnabledPairs": "BTC-USD", "BaseCurrencies": "USD", "AssetTypes": "SPOT", @@ -475,7 +475,7 @@ "AuthenticatedAPISupport": false, "APIKey": "Key", "APISecret": "Secret", - "AvailablePairs": "BTC-USDT,BCH-USDT,ETH-USDT,ETC-USDT,LTC-USDT,EOS-USDT,XRP-USDT,OMG-USDT,DASH-USDT,ZEC-USDT,ADA-USDT,STEEM-USDT,IOTA-USDT,OCN-USDT,SOC-USDT,CTXC-USDT,ACT-USDT,BTM-USDT,BTS-USDT,ONT-USDT,IOST-USDT,HT-USDT,TRX-USDT,DTA-USDT,NEO-USDT,QTUM-USDT,SMT-USDT,ELA-USDT,VEN-USDT,THETA-USDT,SNT-USDT,ZIL-USDT,XEM-USDT,NAS-USDT,RUFF-USDT,HSR-USDT,LET-USDT,MDS-USDT,STORJ-USDT,ELF-USDT,ITC-USDT,CVC-USDT,GNT-USDT,XMR-BTC,BCH-BTC,ETH-BTC,LTC-BTC,ETC-BTC,EOS-BTC,OMG-BTC,XRP-BTC,DASH-BTC,ZEC-BTC,ADA-BTC,STEEM-BTC,IOTA-BTC,POLY-BTC,KAN-BTC,LBA-BTC,WAN-BTC,BFT-BTC,BTM-BTC,ONT-BTC,IOST-BTC,HT-BTC,TRX-BTC,SMT-BTC,ELA-BTC,WICC-BTC,OCN-BTC,ZLA-BTC,ABT-BTC,MTX-BTC,NAS-BTC,VEN-BTC,DTA-BTC,NEO-BTC,WAX-BTC,BTS-BTC,ZIL-BTC,THETA-BTC,CTXC-BTC,SRN-BTC,XEM-BTC,ICX-BTC,DGD-BTC,CHAT-BTC,WPR-BTC,LUN-BTC,SWFTC-BTC,SNT-BTC,MEET-BTC,YEE-BTC,ELF-BTC,LET-BTC,QTUM-BTC,LSK-BTC,ITC-BTC,SOC-BTC,QASH-BTC,MDS-BTC,EKO-BTC,TOPC-BTC,MTN-BTC,ACT-BTC,HSR-BTC,STK-BTC,STORJ-BTC,GNX-BTC,DBC-BTC,SNC-BTC,CMT-BTC,TNB-BTC,RUFF-BTC,QUN-BTC,ZRX-BTC,KNC-BTC,BLZ-BTC,PROPY-BTC,RPX-BTC,APPC-BTC,AIDOC-BTC,POWR-BTC,CVC-BTC,PAY-BTC,QSP-BTC,DAT-BTC,RDN-BTC,MCO-BTC,RCN-BTC,MANA-BTC,UTK-BTC,TNT-BTC,GAS-BTC,BAT-BTC,OST-BTC,LINK-BTC,GNT-BTC,MTL-BTC,EVX-BTC,REQ-BTC,ADX-BTC,AST-BTC,ENG-BTC,SALT-BTC,EDU-BTC,BIFI-BTC,BCX-BTC,BCD-BTC,SBTC-BTC,BTG-BTC,XMR-ETH,EOS-ETH,OMG-ETH,IOTA-ETH,ADA-ETH,STEEM-ETH,POLY-ETH,KAN-ETH,LBA-ETH,WAN-ETH,BFT-ETH,ZRX-ETH,AST-ETH,KNC-ETH,ONT-ETH,HT-ETH,BTM-ETH,IOST-ETH,SMT-ETH,ELA-ETH,TRX-ETH,ABT-ETH,NAS-ETH,OCN-ETH,WICC-ETH,ZIL-ETH,CTXC-ETH,ZLA-ETH,WPR-ETH,DTA-ETH,MTX-ETH,THETA-ETH,SRN-ETH,VEN-ETH,BTS-ETH,WAX-ETH,HSR-ETH,ICX-ETH,MTN-ETH,ACT-ETH,BLZ-ETH,QASH-ETH,RUFF-ETH,CMT-ETH,ELF-ETH,MEET-ETH,SOC-ETH,QTUM-ETH,ITC-ETH,SWFTC-ETH,YEE-ETH,LSK-ETH,LUN-ETH,LET-ETH,GNX-ETH,CHAT-ETH,EKO-ETH,TOPC-ETH,DGD-ETH,STK-ETH,MDS-ETH,DBC-ETH,SNC-ETH,PAY-ETH,QUN-ETH,AIDOC-ETH,TNB-ETH,APPC-ETH,RDN-ETH,UTK-ETH,POWR-ETH,BAT-ETH,PROPY-ETH,MANA-ETH,REQ-ETH,CVC-ETH,QSP-ETH,EVX-ETH,DAT-ETH,MCO-ETH,GNT-ETH,GAS-ETH,OST-ETH,LINK-ETH,RCN-ETH,TNT-ETH,ENG-ETH,SALT-ETH,ADX-ETH,EDU-ETH,XRP-HT,IOST-HT,DASH-HT,WICC-USDT,EOS-HT,BCH-HT,LTC-HT,ETC-HT,CMT-USDT,DCR-BTC,DCR-ETH", + "AvailablePairs": "BTC-USDT,BCH-USDT,ETH-USDT,ETC-USDT,LTC-USDT,EOS-USDT,XRP-USDT,OMG-USDT,DASH-USDT,ZEC-USDT,ADA-USDT,STEEM-USDT,IOTA-USDT,OCN-USDT,SOC-USDT,CTXC-USDT,ACT-USDT,BTM-USDT,BTS-USDT,ONT-USDT,IOST-USDT,HT-USDT,TRX-USDT,DTA-USDT,NEO-USDT,QTUM-USDT,SMT-USDT,ELA-USDT,VEN-USDT,THETA-USDT,SNT-USDT,ZIL-USDT,XEM-USDT,NAS-USDT,RUFF-USDT,HSR-USDT,LET-USDT,MDS-USDT,STORJ-USDT,ELF-USDT,ITC-USDT,CVC-USDT,GNT-USDT,XMR-BTC,BCH-BTC,ETH-BTC,LTC-BTC,ETC-BTC,EOS-BTC,OMG-BTC,XRP-BTC,DASH-BTC,ZEC-BTC,ADA-BTC,STEEM-BTC,IOTA-BTC,POLY-BTC,KAN-BTC,LBA-BTC,WAN-BTC,BFT-BTC,BTM-BTC,ONT-BTC,IOST-BTC,HT-BTC,TRX-BTC,SMT-BTC,ELA-BTC,WICC-BTC,OCN-BTC,ZLA-BTC,ABT-BTC,MTX-BTC,NAS-BTC,VEN-BTC,DTA-BTC,NEO-BTC,WAX-BTC,BTS-BTC,ZIL-BTC,THETA-BTC,CTXC-BTC,SRN-BTC,XEM-BTC,ICX-BTC,DGD-BTC,CHAT-BTC,WPR-BTC,LUN-BTC,SWFTC-BTC,SNT-BTC,MEET-BTC,YEE-BTC,ELF-BTC,LET-BTC,QTUM-BTC,LSK-BTC,ITC-BTC,SOC-BTC,QASH-BTC,MDS-BTC,EKO-BTC,TOPC-BTC,MTN-BTC,ACT-BTC,HSR-BTC,STK-BTC,STORJ-BTC,GNX-BTC,DBC-BTC,SNC-BTC,CMT-BTC,TNB-BTC,RUFF-BTC,QUN-BTC,ZRX-BTC,KNC-BTC,BLZ-BTC,PROPY-BTC,RPX-BTC,APPC-BTC,AIDOC-BTC,POWR-BTC,CVC-BTC,PAY-BTC,QSP-BTC,DAT-BTC,RDN-BTC,MCO-BTC,RCN-BTC,MANA-BTC,UTK-BTC,TNT-BTC,GAS-BTC,BAT-BTC,OST-BTC,LINK-BTC,GNT-BTC,MTL-BTC,EVX-BTC,REQ-BTC,ADX-BTC,AST-BTC,ENG-BTC,SALT-BTC,EDU-BTC,BIFI-BTC,BCX-BTC,BCD-BTC,SBTC-BTC,BTG-BTC,XMR-ETH,EOS-ETH,OMG-ETH,IOTA-ETH,ADA-ETH,STEEM-ETH,POLY-ETH,KAN-ETH,LBA-ETH,WAN-ETH,BFT-ETH,ZRX-ETH,AST-ETH,KNC-ETH,ONT-ETH,HT-ETH,BTM-ETH,IOST-ETH,SMT-ETH,ELA-ETH,TRX-ETH,ABT-ETH,NAS-ETH,OCN-ETH,WICC-ETH,ZIL-ETH,CTXC-ETH,ZLA-ETH,WPR-ETH,DTA-ETH,MTX-ETH,THETA-ETH,SRN-ETH,VEN-ETH,BTS-ETH,WAX-ETH,HSR-ETH,ICX-ETH,MTN-ETH,ACT-ETH,BLZ-ETH,QASH-ETH,RUFF-ETH,CMT-ETH,ELF-ETH,MEET-ETH,SOC-ETH,QTUM-ETH,ITC-ETH,SWFTC-ETH,YEE-ETH,LSK-ETH,LUN-ETH,LET-ETH,GNX-ETH,CHAT-ETH,EKO-ETH,TOPC-ETH,DGD-ETH,STK-ETH,MDS-ETH,DBC-ETH,SNC-ETH,PAY-ETH,QUN-ETH,AIDOC-ETH,TNB-ETH,APPC-ETH,RDN-ETH,UTK-ETH,POWR-ETH,BAT-ETH,PROPY-ETH,MANA-ETH,REQ-ETH,CVC-ETH,QSP-ETH,EVX-ETH,DAT-ETH,MCO-ETH,GNT-ETH,GAS-ETH,OST-ETH,LINK-ETH,RCN-ETH,TNT-ETH,ENG-ETH,SALT-ETH,ADX-ETH,EDU-ETH,XRP-HT,IOST-HT,DASH-HT,WICC-USDT,EOS-HT,BCH-HT,LTC-HT,ETC-HT,WAVES-BTC,WAVES-ETH,HB10-USDT,CMT-USDT,DCR-BTC,DCR-ETH,PAI-BTC,PAI-ETH", "EnabledPairs": "BTC-USDT", "BaseCurrencies": "USD", "AssetTypes": "SPOT", @@ -766,4 +766,4 @@ } } ] -} +} \ No newline at end of file diff --git a/exchange.go b/exchange.go index 2d2ad3a7..4449c9ec 100644 --- a/exchange.go +++ b/exchange.go @@ -16,9 +16,9 @@ import ( "github.com/thrasher-/gocryptotrader/exchanges/bittrex" "github.com/thrasher-/gocryptotrader/exchanges/btcc" "github.com/thrasher-/gocryptotrader/exchanges/btcmarkets" + "github.com/thrasher-/gocryptotrader/exchanges/coinbasepro" "github.com/thrasher-/gocryptotrader/exchanges/coinut" "github.com/thrasher-/gocryptotrader/exchanges/exmo" - "github.com/thrasher-/gocryptotrader/exchanges/gdax" "github.com/thrasher-/gocryptotrader/exchanges/gemini" "github.com/thrasher-/gocryptotrader/exchanges/hitbtc" "github.com/thrasher-/gocryptotrader/exchanges/huobi" @@ -154,8 +154,8 @@ func LoadExchange(name string, useWG bool, wg *sync.WaitGroup) error { exch = new(coinut.COINUT) case "exmo": exch = new(exmo.EXMO) - case "gdax": - exch = new(gdax.GDAX) + case "coinbasepro": + exch = new(coinbasepro.CoinbasePro) case "gemini": exch = new(gemini.Gemini) case "hitbtc": diff --git a/exchanges/gdax/README.md b/exchanges/coinbasepro/README.md similarity index 93% rename from exchanges/gdax/README.md rename to exchanges/coinbasepro/README.md index dbd95f40..798d8ea4 100644 --- a/exchanges/gdax/README.md +++ b/exchanges/coinbasepro/README.md @@ -1,16 +1,16 @@ -# GoCryptoTrader package Gdax +# GoCryptoTrader package CoinbasePro [![Build Status](https://travis-ci.org/thrasher-/gocryptotrader.svg?branch=master)](https://travis-ci.org/thrasher-/gocryptotrader) [![Software License](https://img.shields.io/badge/License-MIT-orange.svg?style=flat-square)](https://github.com/thrasher-/gocryptotrader/blob/master/LICENSE) -[![GoDoc](https://godoc.org/github.com/thrasher-/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-/gocryptotrader/exchanges/gdax) +[![GoDoc](https://godoc.org/github.com/thrasher-/gocryptotrader?status.svg)](https://godoc.org/github.com/thrasher-/gocryptotrader/exchanges/coinbasepro) [![Coverage Status](http://codecov.io/github/thrasher-/gocryptotrader/coverage.svg?branch=master)](http://codecov.io/github/thrasher-/gocryptotrader?branch=master) [![Go Report Card](https://goreportcard.com/badge/github.com/thrasher-/gocryptotrader)](https://goreportcard.com/report/github.com/thrasher-/gocryptotrader) -This gdax package is part of the GoCryptoTrader codebase. +This coinbasepro package is part of the GoCryptoTrader codebase. ## This is still in active development @@ -18,7 +18,7 @@ You can track ideas, planned features and what's in progresss on this Trello boa Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader Slack](https://gocryptotrader.herokuapp.com/) -## GDAX Exchange +## CoinbasePro Exchange ### Current Features diff --git a/exchanges/gdax/gdax.go b/exchanges/coinbasepro/coinbasepro.go similarity index 59% rename from exchanges/gdax/gdax.go rename to exchanges/coinbasepro/coinbasepro.go index 8ded7b30..9f55c41a 100644 --- a/exchanges/gdax/gdax.go +++ b/exchanges/coinbasepro/coinbasepro.go @@ -1,4 +1,4 @@ -package gdax +package coinbasepro import ( "bytes" @@ -17,94 +17,94 @@ import ( ) const ( - gdaxAPIURL = "https://api.gdax.com/" - gdaxSandboxAPIURL = "https://public.sandbox.gdax.com" - gdaxAPIVersion = "0" - gdaxProducts = "products" - gdaxOrderbook = "book" - gdaxTicker = "ticker" - gdaxTrades = "trades" - gdaxHistory = "candles" - gdaxStats = "stats" - gdaxCurrencies = "currencies" - gdaxAccounts = "accounts" - gdaxLedger = "ledger" - gdaxHolds = "holds" - gdaxOrders = "orders" - gdaxFills = "fills" - gdaxTransfers = "transfers" - gdaxReports = "reports" - gdaxTime = "time" - gdaxMarginTransfer = "profiles/margin-transfer" - gdaxFunding = "funding" - gdaxFundingRepay = "funding/repay" - gdaxPosition = "position" - gdaxPositionClose = "position/close" - gdaxPaymentMethod = "payment-methods" - gdaxPaymentMethodDeposit = "deposits/payment-method" - gdaxDepositCoinbase = "deposits/coinbase-account" - gdaxWithdrawalPaymentMethod = "withdrawals/payment-method" - gdaxWithdrawalCoinbase = "withdrawals/coinbase" - gdaxWithdrawalCrypto = "withdrawals/crypto" - gdaxCoinbaseAccounts = "coinbase-accounts" - gdaxTrailingVolume = "users/self/trailing-volume" + coinbaseproAPIURL = "https://api.pro.coinbase.com/" + coinbaseproSandboxAPIURL = "https://public.sandbox.pro.coinbase.com" + coinbaseproAPIVersion = "0" + coinbaseproProducts = "products" + coinbaseproOrderbook = "book" + coinbaseproTicker = "ticker" + coinbaseproTrades = "trades" + coinbaseproHistory = "candles" + coinbaseproStats = "stats" + coinbaseproCurrencies = "currencies" + coinbaseproAccounts = "accounts" + coinbaseproLedger = "ledger" + coinbaseproHolds = "holds" + coinbaseproOrders = "orders" + coinbaseproFills = "fills" + coinbaseproTransfers = "transfers" + coinbaseproReports = "reports" + coinbaseproTime = "time" + coinbaseproMarginTransfer = "profiles/margin-transfer" + coinbaseproFunding = "funding" + coinbaseproFundingRepay = "funding/repay" + coinbaseproPosition = "position" + coinbaseproPositionClose = "position/close" + coinbaseproPaymentMethod = "payment-methods" + coinbaseproPaymentMethodDeposit = "deposits/payment-method" + coinbaseproDepositCoinbase = "deposits/coinbase-account" + coinbaseproWithdrawalPaymentMethod = "withdrawals/payment-method" + coinbaseproWithdrawalCoinbase = "withdrawals/coinbase" + coinbaseproWithdrawalCrypto = "withdrawals/crypto" + coinbaseproCoinbaseAccounts = "coinbase-accounts" + coinbaseproTrailingVolume = "users/self/trailing-volume" - gdaxAuthRate = 5 - gdaxUnauthRate = 3 + coinbaseproAuthRate = 5 + coinbaseproUnauthRate = 3 ) -// GDAX is the overarching type across the GDAX package -type GDAX struct { +// CoinbasePro is the overarching type across the coinbasepro package +type CoinbasePro struct { exchange.Base } // SetDefaults sets default values for the exchange -func (g *GDAX) SetDefaults() { - g.Name = "GDAX" - g.Enabled = false - g.Verbose = false - g.TakerFee = 0.25 - g.MakerFee = 0 - g.Websocket = false - g.RESTPollingDelay = 10 - g.RequestCurrencyPairFormat.Delimiter = "-" - g.RequestCurrencyPairFormat.Uppercase = true - g.ConfigCurrencyPairFormat.Delimiter = "" - g.ConfigCurrencyPairFormat.Uppercase = true - g.AssetTypes = []string{ticker.Spot} - g.APIUrl = gdaxAPIURL - g.SupportsAutoPairUpdating = true - g.SupportsRESTTickerBatching = false - g.Requester = request.New(g.Name, request.NewRateLimit(time.Second, gdaxAuthRate), request.NewRateLimit(time.Second, gdaxUnauthRate), common.NewHTTPClientWithTimeout(exchange.DefaultHTTPTimeout)) +func (c *CoinbasePro) SetDefaults() { + c.Name = "CoinbasePro" + c.Enabled = false + c.Verbose = false + c.TakerFee = 0.25 + c.MakerFee = 0 + c.Websocket = false + c.RESTPollingDelay = 10 + c.RequestCurrencyPairFormat.Delimiter = "-" + c.RequestCurrencyPairFormat.Uppercase = true + c.ConfigCurrencyPairFormat.Delimiter = "" + c.ConfigCurrencyPairFormat.Uppercase = true + c.AssetTypes = []string{ticker.Spot} + c.APIUrl = coinbaseproAPIURL + c.SupportsAutoPairUpdating = true + c.SupportsRESTTickerBatching = false + c.Requester = request.New(c.Name, request.NewRateLimit(time.Second, coinbaseproAuthRate), request.NewRateLimit(time.Second, coinbaseproUnauthRate), common.NewHTTPClientWithTimeout(exchange.DefaultHTTPTimeout)) } // Setup initialises the exchange parameters with the current configuration -func (g *GDAX) Setup(exch config.ExchangeConfig) { +func (c *CoinbasePro) Setup(exch config.ExchangeConfig) { if !exch.Enabled { - g.SetEnabled(false) + c.SetEnabled(false) } else { - g.Enabled = true - g.AuthenticatedAPISupport = exch.AuthenticatedAPISupport - g.SetAPIKeys(exch.APIKey, exch.APISecret, exch.ClientID, true) - g.SetHTTPClientTimeout(exch.HTTPTimeout) - g.RESTPollingDelay = exch.RESTPollingDelay - g.Verbose = exch.Verbose - g.Websocket = exch.Websocket - g.BaseCurrencies = common.SplitStrings(exch.BaseCurrencies, ",") - g.AvailablePairs = common.SplitStrings(exch.AvailablePairs, ",") - g.EnabledPairs = common.SplitStrings(exch.EnabledPairs, ",") + c.Enabled = true + c.AuthenticatedAPISupport = exch.AuthenticatedAPISupport + c.SetAPIKeys(exch.APIKey, exch.APISecret, exch.ClientID, true) + c.SetHTTPClientTimeout(exch.HTTPTimeout) + c.RESTPollingDelay = exch.RESTPollingDelay + c.Verbose = exch.Verbose + c.Websocket = exch.Websocket + c.BaseCurrencies = common.SplitStrings(exch.BaseCurrencies, ",") + c.AvailablePairs = common.SplitStrings(exch.AvailablePairs, ",") + c.EnabledPairs = common.SplitStrings(exch.EnabledPairs, ",") if exch.UseSandbox { - g.APIUrl = gdaxSandboxAPIURL + c.APIUrl = coinbaseproSandboxAPIURL } - err := g.SetCurrencyPairFormat() + err := c.SetCurrencyPairFormat() if err != nil { log.Fatal(err) } - err = g.SetAssetTypes() + err = c.SetAssetTypes() if err != nil { log.Fatal(err) } - err = g.SetAutoPairDefaults() + err = c.SetAutoPairDefaults() if err != nil { log.Fatal(err) } @@ -112,32 +112,32 @@ func (g *GDAX) Setup(exch config.ExchangeConfig) { } // GetFee returns the current fee for the exchange -func (g *GDAX) GetFee(maker bool) float64 { +func (c *CoinbasePro) GetFee(maker bool) float64 { if maker { - return g.MakerFee + return c.MakerFee } - return g.TakerFee + return c.TakerFee } // GetProducts returns supported currency pairs on the exchange with specific // information about the pair -func (g *GDAX) GetProducts() ([]Product, error) { +func (c *CoinbasePro) GetProducts() ([]Product, error) { products := []Product{} - return products, g.SendHTTPRequest(g.APIUrl+gdaxProducts, &products) + return products, c.SendHTTPRequest(c.APIUrl+coinbaseproProducts, &products) } // GetOrderbook returns orderbook by currency pair and level -func (g *GDAX) GetOrderbook(symbol string, level int) (interface{}, error) { +func (c *CoinbasePro) GetOrderbook(symbol string, level int) (interface{}, error) { orderbook := OrderbookResponse{} - path := fmt.Sprintf("%s/%s/%s", g.APIUrl+gdaxProducts, symbol, gdaxOrderbook) + path := fmt.Sprintf("%s/%s/%s", c.APIUrl+coinbaseproProducts, symbol, coinbaseproOrderbook) if level > 0 { levelStr := strconv.Itoa(level) - path = fmt.Sprintf("%s/%s/%s?level=%s", g.APIUrl+gdaxProducts, symbol, gdaxOrderbook, levelStr) + path = fmt.Sprintf("%s/%s/%s?level=%s", c.APIUrl+coinbaseproProducts, symbol, coinbaseproOrderbook, levelStr) } - if err := g.SendHTTPRequest(path, &orderbook); err != nil { + if err := c.SendHTTPRequest(path, &orderbook); err != nil { return nil, err } @@ -201,27 +201,27 @@ func (g *GDAX) GetOrderbook(symbol string, level int) (interface{}, error) { // GetTicker returns ticker by currency pair // currencyPair - example "BTC-USD" -func (g *GDAX) GetTicker(currencyPair string) (Ticker, error) { +func (c *CoinbasePro) GetTicker(currencyPair string) (Ticker, error) { ticker := Ticker{} path := fmt.Sprintf( - "%s/%s/%s", g.APIUrl+gdaxProducts, currencyPair, gdaxTicker) + "%s/%s/%s", c.APIUrl+coinbaseproProducts, currencyPair, coinbaseproTicker) - return ticker, g.SendHTTPRequest(path, &ticker) + return ticker, c.SendHTTPRequest(path, &ticker) } // GetTrades listd the latest trades for a product // currencyPair - example "BTC-USD" -func (g *GDAX) GetTrades(currencyPair string) ([]Trade, error) { +func (c *CoinbasePro) GetTrades(currencyPair string) ([]Trade, error) { trades := []Trade{} path := fmt.Sprintf( - "%s/%s/%s", g.APIUrl+gdaxProducts, currencyPair, gdaxTrades) + "%s/%s/%s", c.APIUrl+coinbaseproProducts, currencyPair, coinbaseproTrades) - return trades, g.SendHTTPRequest(path, &trades) + return trades, c.SendHTTPRequest(path, &trades) } // GetHistoricRates returns historic rates for a product. Rates are returned in // grouped buckets based on requested granularity. -func (g *GDAX) GetHistoricRates(currencyPair string, start, end, granularity int64) ([]History, error) { +func (c *CoinbasePro) GetHistoricRates(currencyPair string, start, end, granularity int64) ([]History, error) { var resp [][]interface{} history := []History{} values := url.Values{} @@ -239,10 +239,10 @@ func (g *GDAX) GetHistoricRates(currencyPair string, start, end, granularity int } path := common.EncodeURLValues( - fmt.Sprintf("%s/%s/%s", g.APIUrl+gdaxProducts, currencyPair, gdaxHistory), + fmt.Sprintf("%s/%s/%s", c.APIUrl+coinbaseproProducts, currencyPair, coinbaseproHistory), values) - if err := g.SendHTTPRequest(path, &resp); err != nil { + if err := c.SendHTTPRequest(path, &resp); err != nil { return history, err } @@ -268,65 +268,65 @@ func (g *GDAX) GetHistoricRates(currencyPair string, start, end, granularity int // GetStats returns a 24 hr stat for the product. Volume is in base currency // units. open, high, low are in quote currency units. -func (g *GDAX) GetStats(currencyPair string) (Stats, error) { +func (c *CoinbasePro) GetStats(currencyPair string) (Stats, error) { stats := Stats{} path := fmt.Sprintf( - "%s/%s/%s", g.APIUrl+gdaxProducts, currencyPair, gdaxStats) + "%s/%s/%s", c.APIUrl+coinbaseproProducts, currencyPair, coinbaseproStats) - return stats, g.SendHTTPRequest(path, &stats) + return stats, c.SendHTTPRequest(path, &stats) } // GetCurrencies returns a list of supported currency on the exchange -// Warning: Not all currencies may be currently in use for trading. -func (g *GDAX) GetCurrencies() ([]Currency, error) { +// Warning: Not all currencies may be currently in use for tradinc. +func (c *CoinbasePro) GetCurrencies() ([]Currency, error) { currencies := []Currency{} - return currencies, g.SendHTTPRequest(g.APIUrl+gdaxCurrencies, ¤cies) + return currencies, c.SendHTTPRequest(c.APIUrl+coinbaseproCurrencies, ¤cies) } // GetServerTime returns the API server time -func (g *GDAX) GetServerTime() (ServerTime, error) { +func (c *CoinbasePro) GetServerTime() (ServerTime, error) { serverTime := ServerTime{} - return serverTime, g.SendHTTPRequest(g.APIUrl+gdaxTime, &serverTime) + return serverTime, c.SendHTTPRequest(c.APIUrl+coinbaseproTime, &serverTime) } // GetAccounts returns a list of trading accounts associated with the APIKEYS -func (g *GDAX) GetAccounts() ([]AccountResponse, error) { +func (c *CoinbasePro) GetAccounts() ([]AccountResponse, error) { resp := []AccountResponse{} return resp, - g.SendAuthenticatedHTTPRequest("GET", gdaxAccounts, nil, &resp) + c.SendAuthenticatedHTTPRequest("GET", coinbaseproAccounts, nil, &resp) } // GetAccount returns information for a single account. Use this endpoint when // account_id is known -func (g *GDAX) GetAccount(accountID string) (AccountResponse, error) { +func (c *CoinbasePro) GetAccount(accountID string) (AccountResponse, error) { resp := AccountResponse{} - path := fmt.Sprintf("%s/%s", gdaxAccounts, accountID) + path := fmt.Sprintf("%s/%s", coinbaseproAccounts, accountID) - return resp, g.SendAuthenticatedHTTPRequest("GET", path, nil, &resp) + return resp, c.SendAuthenticatedHTTPRequest("GET", path, nil, &resp) } // GetAccountHistory returns a list of account activity. Account activity either // increases or decreases your account balance. Items are paginated and sorted // latest first. -func (g *GDAX) GetAccountHistory(accountID string) ([]AccountLedgerResponse, error) { +func (c *CoinbasePro) GetAccountHistory(accountID string) ([]AccountLedgerResponse, error) { resp := []AccountLedgerResponse{} - path := fmt.Sprintf("%s/%s/%s", gdaxAccounts, accountID, gdaxLedger) + path := fmt.Sprintf("%s/%s/%s", coinbaseproAccounts, accountID, coinbaseproLedger) - return resp, g.SendAuthenticatedHTTPRequest("GET", path, nil, &resp) + return resp, c.SendAuthenticatedHTTPRequest("GET", path, nil, &resp) } // GetHolds returns the holds that are placed on an account for any active // orders or pending withdraw requests. As an order is filled, the hold amount // is updated. If an order is canceled, any remaining hold is removed. For a // withdraw, once it is completed, the hold is removed. -func (g *GDAX) GetHolds(accountID string) ([]AccountHolds, error) { +func (c *CoinbasePro) GetHolds(accountID string) ([]AccountHolds, error) { resp := []AccountHolds{} - path := fmt.Sprintf("%s/%s/%s", gdaxAccounts, accountID, gdaxHolds) + path := fmt.Sprintf("%s/%s/%s", coinbaseproAccounts, accountID, coinbaseproHolds) - return resp, g.SendAuthenticatedHTTPRequest("GET", path, nil, &resp) + return resp, c.SendAuthenticatedHTTPRequest("GET", path, nil, &resp) } // PlaceLimitOrder places a new limit order. Orders can only be placed if the @@ -346,7 +346,7 @@ func (g *GDAX) GetHolds(accountID string) ([]AccountHolds, error) { // timeInforce - [optional] GTC, GTT, IOC, or FOK (default is GTC) // cancelAfter - [optional] min, hour, day * Requires time_in_force to be GTT // postOnly - [optional] Post only flag Invalid when time_in_force is IOC or FOK -func (g *GDAX) PlaceLimitOrder(clientRef string, price, amount float64, side, timeInforce, cancelAfter, productID, stp string, postOnly bool) (string, error) { +func (c *CoinbasePro) PlaceLimitOrder(clientRef string, price, amount float64, side, timeInforce, cancelAfter, productID, stp string, postOnly bool) (string, error) { resp := GeneralizedOrderResponse{} request := make(map[string]interface{}) request["type"] = "limit" @@ -371,7 +371,7 @@ func (g *GDAX) PlaceLimitOrder(clientRef string, price, amount float64, side, ti request["post_only"] = postOnly } - err := g.SendAuthenticatedHTTPRequest("POST", gdaxOrders, request, &resp) + err := c.SendAuthenticatedHTTPRequest("POST", coinbaseproOrders, request, &resp) if err != nil { return "", err } @@ -395,7 +395,7 @@ func (g *GDAX) PlaceLimitOrder(clientRef string, price, amount float64, side, ti // size - [optional]* Desired amount in BTC // funds [optional]* Desired amount of quote currency to use // * One of size or funds is required. -func (g *GDAX) PlaceMarketOrder(clientRef string, size, funds float64, side string, productID, stp string) (string, error) { +func (c *CoinbasePro) PlaceMarketOrder(clientRef string, size, funds float64, side string, productID, stp string) (string, error) { resp := GeneralizedOrderResponse{} request := make(map[string]interface{}) request["side"] = side @@ -415,7 +415,7 @@ func (g *GDAX) PlaceMarketOrder(clientRef string, size, funds float64, side stri request["stp"] = stp } - err := g.SendAuthenticatedHTTPRequest("POST", gdaxOrders, request, &resp) + err := c.SendAuthenticatedHTTPRequest("POST", coinbaseproOrders, request, &resp) if err != nil { return "", err } @@ -438,7 +438,7 @@ func (g *GDAX) PlaceMarketOrder(clientRef string, size, funds float64, side stri // MARGIN ORDER PARAMS // size - [optional]* Desired amount in BTC // funds - [optional]* Desired amount of quote currency to use -func (g *GDAX) PlaceMarginOrder(clientRef string, size, funds float64, side string, productID, stp string) (string, error) { +func (c *CoinbasePro) PlaceMarginOrder(clientRef string, size, funds float64, side string, productID, stp string) (string, error) { resp := GeneralizedOrderResponse{} request := make(map[string]interface{}) request["side"] = side @@ -458,7 +458,7 @@ func (g *GDAX) PlaceMarginOrder(clientRef string, size, funds float64, side stri request["stp"] = stp } - err := g.SendAuthenticatedHTTPRequest("POST", gdaxOrders, request, &resp) + err := c.SendAuthenticatedHTTPRequest("POST", coinbaseproOrders, request, &resp) if err != nil { return "", err } @@ -467,24 +467,24 @@ func (g *GDAX) PlaceMarginOrder(clientRef string, size, funds float64, side stri } // CancelOrder cancels order by orderID -func (g *GDAX) CancelOrder(orderID string) error { - path := fmt.Sprintf("%s/%s", gdaxOrders, orderID) +func (c *CoinbasePro) CancelOrder(orderID string) error { + path := fmt.Sprintf("%s/%s", coinbaseproOrders, orderID) - return g.SendAuthenticatedHTTPRequest("DELETE", path, nil, nil) + return c.SendAuthenticatedHTTPRequest("DELETE", path, nil, nil) } // CancelAllOrders cancels all open orders on the exchange and returns and array // of order IDs // currencyPair - [optional] all orders for a currencyPair string will be // canceled -func (g *GDAX) CancelAllOrders(currencyPair string) ([]string, error) { +func (c *CoinbasePro) CancelAllOrders(currencyPair string) ([]string, error) { var resp []string request := make(map[string]interface{}) if len(currencyPair) != 0 { request["product_id"] = currencyPair } - return resp, g.SendAuthenticatedHTTPRequest("DELETE", gdaxOrders, request, &resp) + return resp, c.SendAuthenticatedHTTPRequest("DELETE", coinbaseproOrders, request, &resp) } // GetOrders lists current open orders. Only open or un-settled orders are @@ -492,7 +492,7 @@ func (g *GDAX) CancelAllOrders(currencyPair string) ([]string, error) { // longer appear in the default request. // status - can be a range of "open", "pending", "done" or "active" // currencyPair - [optional] for example "BTC-USD" -func (g *GDAX) GetOrders(status []string, currencyPair string) ([]GeneralizedOrderResponse, error) { +func (c *CoinbasePro) GetOrders(status []string, currencyPair string) ([]GeneralizedOrderResponse, error) { resp := []GeneralizedOrderResponse{} params := url.Values{} @@ -503,23 +503,23 @@ func (g *GDAX) GetOrders(status []string, currencyPair string) ([]GeneralizedOrd params.Set("product_id", currencyPair) } - path := common.EncodeURLValues(g.APIUrl+gdaxOrders, params) + path := common.EncodeURLValues(c.APIUrl+coinbaseproOrders, params) path = common.GetURIPath(path) return resp, - g.SendAuthenticatedHTTPRequest("GET", path[1:], nil, &resp) + c.SendAuthenticatedHTTPRequest("GET", path[1:], nil, &resp) } // GetOrder returns a single order by order id. -func (g *GDAX) GetOrder(orderID string) (GeneralizedOrderResponse, error) { +func (c *CoinbasePro) GetOrder(orderID string) (GeneralizedOrderResponse, error) { resp := GeneralizedOrderResponse{} - path := fmt.Sprintf("%s/%s", gdaxOrders, orderID) + path := fmt.Sprintf("%s/%s", coinbaseproOrders, orderID) - return resp, g.SendAuthenticatedHTTPRequest("GET", path, nil, &resp) + return resp, c.SendAuthenticatedHTTPRequest("GET", path, nil, &resp) } // GetFills returns a list of recent fills -func (g *GDAX) GetFills(orderID, currencyPair string) ([]FillResponse, error) { +func (c *CoinbasePro) GetFills(orderID, currencyPair string) ([]FillResponse, error) { resp := []FillResponse{} params := url.Values{} @@ -533,27 +533,27 @@ func (g *GDAX) GetFills(orderID, currencyPair string) ([]FillResponse, error) { return resp, errors.New("no parameters set") } - path := common.EncodeURLValues(g.APIUrl+gdaxFills, params) + path := common.EncodeURLValues(c.APIUrl+coinbaseproFills, params) uri := common.GetURIPath(path) return resp, - g.SendAuthenticatedHTTPRequest("GET", uri[1:], nil, &resp) + c.SendAuthenticatedHTTPRequest("GET", uri[1:], nil, &resp) } // GetFundingRecords every order placed with a margin profile that draws funding // will create a funding record. // // status - "outstanding", "settled", or "rejected" -func (g *GDAX) GetFundingRecords(status string) ([]Funding, error) { +func (c *CoinbasePro) GetFundingRecords(status string) ([]Funding, error) { resp := []Funding{} params := url.Values{} params.Set("status", status) - path := common.EncodeURLValues(g.APIUrl+gdaxFunding, params) + path := common.EncodeURLValues(c.APIUrl+coinbaseproFunding, params) uri := common.GetURIPath(path) return resp, - g.SendAuthenticatedHTTPRequest("GET", uri[1:], nil, &resp) + c.SendAuthenticatedHTTPRequest("GET", uri[1:], nil, &resp) } ////////////////////////// Not receiving reply from server ///////////////// @@ -561,14 +561,14 @@ func (g *GDAX) GetFundingRecords(status string) ([]Funding, error) { // // amount - amount of currency to repay // currency - currency, example USD -// func (g *GDAX) RepayFunding(amount, currency string) (Funding, error) { +// func (c *CoinbasePro) RepayFunding(amount, currency string) (Funding, error) { // resp := Funding{} // params := make(map[string]interface{}) // params["amount"] = amount // params["currency"] = currency // // return resp, -// g.SendAuthenticatedHTTPRequest("POST", gdaxFundingRepay, params, &resp) +// c.SendAuthenticatedHTTPRequest("POST", coinbaseproFundingRepay, params, &resp) // } // MarginTransfer sends funds between a standard/default profile and a margin @@ -582,7 +582,7 @@ func (g *GDAX) GetFundingRecords(status string) ([]Funding, error) { // transferType - either "deposit" or "withdraw" // profileID - The id of the margin profile to deposit or withdraw from // currency - currency to transfer, currently on "BTC" or "USD" -func (g *GDAX) MarginTransfer(amount float64, transferType, profileID, currency string) (MarginTransfer, error) { +func (c *CoinbasePro) MarginTransfer(amount float64, transferType, profileID, currency string) (MarginTransfer, error) { resp := MarginTransfer{} request := make(map[string]interface{}) request["type"] = transferType @@ -591,34 +591,34 @@ func (g *GDAX) MarginTransfer(amount float64, transferType, profileID, currency request["margin_profile_id"] = profileID return resp, - g.SendAuthenticatedHTTPRequest("POST", gdaxMarginTransfer, request, &resp) + c.SendAuthenticatedHTTPRequest("POST", coinbaseproMarginTransfer, request, &resp) } // GetPosition returns an overview of account profile. -func (g *GDAX) GetPosition() (AccountOverview, error) { +func (c *CoinbasePro) GetPosition() (AccountOverview, error) { resp := AccountOverview{} return resp, - g.SendAuthenticatedHTTPRequest("GET", gdaxPosition, nil, &resp) + c.SendAuthenticatedHTTPRequest("GET", coinbaseproPosition, nil, &resp) } // ClosePosition closes a position and allowing you to repay position as well // repayOnly - allows the position to be repaid -func (g *GDAX) ClosePosition(repayOnly bool) (AccountOverview, error) { +func (c *CoinbasePro) ClosePosition(repayOnly bool) (AccountOverview, error) { resp := AccountOverview{} request := make(map[string]interface{}) request["repay_only"] = repayOnly return resp, - g.SendAuthenticatedHTTPRequest("POST", gdaxPositionClose, request, &resp) + c.SendAuthenticatedHTTPRequest("POST", coinbaseproPositionClose, request, &resp) } // GetPayMethods returns a full list of payment methods -func (g *GDAX) GetPayMethods() ([]PaymentMethod, error) { +func (c *CoinbasePro) GetPayMethods() ([]PaymentMethod, error) { resp := []PaymentMethod{} return resp, - g.SendAuthenticatedHTTPRequest("GET", gdaxPaymentMethod, nil, &resp) + c.SendAuthenticatedHTTPRequest("GET", coinbaseproPaymentMethod, nil, &resp) } // DepositViaPaymentMethod deposits funds from a payment method. See the Payment @@ -627,7 +627,7 @@ func (g *GDAX) GetPayMethods() ([]PaymentMethod, error) { // amount - The amount to deposit // currency - The type of currency // paymentID - ID of the payment method -func (g *GDAX) DepositViaPaymentMethod(amount float64, currency, paymentID string) (DepositWithdrawalInfo, error) { +func (c *CoinbasePro) DepositViaPaymentMethod(amount float64, currency, paymentID string) (DepositWithdrawalInfo, error) { resp := DepositWithdrawalInfo{} req := make(map[string]interface{}) req["amount"] = amount @@ -635,18 +635,18 @@ func (g *GDAX) DepositViaPaymentMethod(amount float64, currency, paymentID strin req["payment_method_id"] = paymentID return resp, - g.SendAuthenticatedHTTPRequest("POST", gdaxPaymentMethodDeposit, req, &resp) + c.SendAuthenticatedHTTPRequest("POST", coinbaseproPaymentMethodDeposit, req, &resp) } // DepositViaCoinbase deposits funds from a coinbase account. Move funds between -// a Coinbase account and GDAX trading account within daily limits. Moving -// funds between Coinbase and GDAX is instant and free. See the Coinbase +// a Coinbase account and coinbasepro trading account within daily limits. Moving +// funds between Coinbase and coinbasepro is instant and free. See the Coinbase // Accounts section for retrieving your Coinbase accounts. // // amount - The amount to deposit // currency - The type of currency // accountID - ID of the coinbase account -func (g *GDAX) DepositViaCoinbase(amount float64, currency, accountID string) (DepositWithdrawalInfo, error) { +func (c *CoinbasePro) DepositViaCoinbase(amount float64, currency, accountID string) (DepositWithdrawalInfo, error) { resp := DepositWithdrawalInfo{} req := make(map[string]interface{}) req["amount"] = amount @@ -654,7 +654,7 @@ func (g *GDAX) DepositViaCoinbase(amount float64, currency, accountID string) (D req["coinbase_account_id"] = accountID return resp, - g.SendAuthenticatedHTTPRequest("POST", gdaxDepositCoinbase, req, &resp) + c.SendAuthenticatedHTTPRequest("POST", coinbaseproDepositCoinbase, req, &resp) } // WithdrawViaPaymentMethod withdraws funds to a payment method @@ -662,7 +662,7 @@ func (g *GDAX) DepositViaCoinbase(amount float64, currency, accountID string) (D // amount - The amount to withdraw // currency - The type of currency // paymentID - ID of the payment method -func (g *GDAX) WithdrawViaPaymentMethod(amount float64, currency, paymentID string) (DepositWithdrawalInfo, error) { +func (c *CoinbasePro) WithdrawViaPaymentMethod(amount float64, currency, paymentID string) (DepositWithdrawalInfo, error) { resp := DepositWithdrawalInfo{} req := make(map[string]interface{}) req["amount"] = amount @@ -670,7 +670,7 @@ func (g *GDAX) WithdrawViaPaymentMethod(amount float64, currency, paymentID stri req["payment_method_id"] = paymentID return resp, - g.SendAuthenticatedHTTPRequest("POST", gdaxWithdrawalPaymentMethod, req, &resp) + c.SendAuthenticatedHTTPRequest("POST", coinbaseproWithdrawalPaymentMethod, req, &resp) } ///////////////////////// NO ROUTE FOUND ERROR //////////////////////////////// @@ -679,7 +679,7 @@ func (g *GDAX) WithdrawViaPaymentMethod(amount float64, currency, paymentID stri // amount - The amount to withdraw // currency - The type of currency // accountID - ID of the coinbase account -// func (g *GDAX) WithdrawViaCoinbase(amount float64, currency, accountID string) (DepositWithdrawalInfo, error) { +// func (c *CoinbasePro) WithdrawViaCoinbase(amount float64, currency, accountID string) (DepositWithdrawalInfo, error) { // resp := DepositWithdrawalInfo{} // req := make(map[string]interface{}) // req["amount"] = amount @@ -687,7 +687,7 @@ func (g *GDAX) WithdrawViaPaymentMethod(amount float64, currency, paymentID stri // req["coinbase_account_id"] = accountID // // return resp, -// g.SendAuthenticatedHTTPRequest("POST", gdaxWithdrawalCoinbase, req, &resp) +// c.SendAuthenticatedHTTPRequest("POST", coinbaseproWithdrawalCoinbase, req, &resp) // } // WithdrawCrypto withdraws funds to a crypto address @@ -695,7 +695,7 @@ func (g *GDAX) WithdrawViaPaymentMethod(amount float64, currency, paymentID stri // amount - The amount to withdraw // currency - The type of currency // cryptoAddress - A crypto address of the recipient -func (g *GDAX) WithdrawCrypto(amount float64, currency, cryptoAddress string) (DepositWithdrawalInfo, error) { +func (c *CoinbasePro) WithdrawCrypto(amount float64, currency, cryptoAddress string) (DepositWithdrawalInfo, error) { resp := DepositWithdrawalInfo{} req := make(map[string]interface{}) req["amount"] = amount @@ -703,15 +703,15 @@ func (g *GDAX) WithdrawCrypto(amount float64, currency, cryptoAddress string) (D req["crypto_address"] = cryptoAddress return resp, - g.SendAuthenticatedHTTPRequest("POST", gdaxWithdrawalCrypto, req, &resp) + c.SendAuthenticatedHTTPRequest("POST", coinbaseproWithdrawalCrypto, req, &resp) } // GetCoinbaseAccounts returns a list of coinbase accounts -func (g *GDAX) GetCoinbaseAccounts() ([]CoinbaseAccounts, error) { +func (c *CoinbasePro) GetCoinbaseAccounts() ([]CoinbaseAccounts, error) { resp := []CoinbaseAccounts{} return resp, - g.SendAuthenticatedHTTPRequest("GET", gdaxCoinbaseAccounts, nil, &resp) + c.SendAuthenticatedHTTPRequest("GET", coinbaseproCoinbaseAccounts, nil, &resp) } // GetReport returns batches of historic information about your account in @@ -721,12 +721,12 @@ func (g *GDAX) GetCoinbaseAccounts() ([]CoinbaseAccounts, error) { // startDate - Starting date for the report (inclusive) // endDate - Ending date for the report (inclusive) // currencyPair - ID of the product to generate a fills report for. -// E.g. BTC-USD. *Required* if type is fills +// E.c. BTC-USD. *Required* if type is fills // accountID - ID of the account to generate an account report for. *Required* // if type is account // format - pdf or csv (default is pdf) // email - [optional] Email address to send the report to -func (g *GDAX) GetReport(reportType, startDate, endDate, currencyPair, accountID, format, email string) (Report, error) { +func (c *CoinbasePro) GetReport(reportType, startDate, endDate, currencyPair, accountID, format, email string) (Report, error) { resp := Report{} request := make(map[string]interface{}) request["type"] = reportType @@ -748,36 +748,36 @@ func (g *GDAX) GetReport(reportType, startDate, endDate, currencyPair, accountID } return resp, - g.SendAuthenticatedHTTPRequest("POST", gdaxReports, request, &resp) + c.SendAuthenticatedHTTPRequest("POST", coinbaseproReports, request, &resp) } // GetReportStatus once a report request has been accepted for processing, the // status is available by polling the report resource endpoint. -func (g *GDAX) GetReportStatus(reportID string) (Report, error) { +func (c *CoinbasePro) GetReportStatus(reportID string) (Report, error) { resp := Report{} - path := fmt.Sprintf("%s/%s", gdaxReports, reportID) + path := fmt.Sprintf("%s/%s", coinbaseproReports, reportID) - return resp, g.SendAuthenticatedHTTPRequest("GET", path, nil, &resp) + return resp, c.SendAuthenticatedHTTPRequest("GET", path, nil, &resp) } // GetTrailingVolume this request will return your 30-day trailing volume for // all products. -func (g *GDAX) GetTrailingVolume() ([]Volume, error) { +func (c *CoinbasePro) GetTrailingVolume() ([]Volume, error) { resp := []Volume{} return resp, - g.SendAuthenticatedHTTPRequest("GET", gdaxTrailingVolume, nil, &resp) + c.SendAuthenticatedHTTPRequest("GET", coinbaseproTrailingVolume, nil, &resp) } // SendHTTPRequest sends an unauthenticated HTTP request -func (g *GDAX) SendHTTPRequest(path string, result interface{}) error { - return g.SendPayload("GET", path, nil, nil, result, false, g.Verbose) +func (c *CoinbasePro) SendHTTPRequest(path string, result interface{}) error { + return c.SendPayload("GET", path, nil, nil, result, false, c.Verbose) } // SendAuthenticatedHTTPRequest sends an authenticated HTTP reque -func (g *GDAX) SendAuthenticatedHTTPRequest(method, path string, params map[string]interface{}, result interface{}) (err error) { - if !g.AuthenticatedAPISupport { - return fmt.Errorf(exchange.WarningAuthenticatedRequestWithoutCredentialsSet, g.Name) +func (c *CoinbasePro) SendAuthenticatedHTTPRequest(method, path string, params map[string]interface{}, result interface{}) (err error) { + if !c.AuthenticatedAPISupport { + return fmt.Errorf(exchange.WarningAuthenticatedRequestWithoutCredentialsSet, c.Name) } payload := []byte("") @@ -788,20 +788,20 @@ func (g *GDAX) SendAuthenticatedHTTPRequest(method, path string, params map[stri return errors.New("SendAuthenticatedHTTPRequest: Unable to JSON request") } - if g.Verbose { + if c.Verbose { log.Printf("Request JSON: %s\n", payload) } } - nonce := g.Nonce.GetValue(g.Name, false).String() + nonce := c.Nonce.GetValue(c.Name, false).String() message := nonce + method + "/" + path + string(payload) - hmac := common.GetHMAC(common.HashSHA256, []byte(message), []byte(g.APISecret)) + hmac := common.GetHMAC(common.HashSHA256, []byte(message), []byte(c.APISecret)) headers := make(map[string]string) headers["CB-ACCESS-SIGN"] = common.Base64Encode([]byte(hmac)) headers["CB-ACCESS-TIMESTAMP"] = nonce - headers["CB-ACCESS-KEY"] = g.APIKey - headers["CB-ACCESS-PASSPHRASE"] = g.ClientID + headers["CB-ACCESS-KEY"] = c.APIKey + headers["CB-ACCESS-PASSPHRASE"] = c.ClientID headers["Content-Type"] = "application/json" - return g.SendPayload(method, g.APIUrl+path, headers, bytes.NewBuffer(payload), result, true, g.Verbose) + return c.SendPayload(method, c.APIUrl+path, headers, bytes.NewBuffer(payload), result, true, c.Verbose) } diff --git a/exchanges/gdax/gdax_test.go b/exchanges/coinbasepro/coinbasepro_test.go similarity index 66% rename from exchanges/gdax/gdax_test.go rename to exchanges/coinbasepro/coinbasepro_test.go index 68a525e6..e4a9f10f 100644 --- a/exchanges/gdax/gdax_test.go +++ b/exchanges/coinbasepro/coinbasepro_test.go @@ -1,4 +1,4 @@ -package gdax +package coinbasepro import ( "testing" @@ -7,7 +7,7 @@ import ( "github.com/thrasher-/gocryptotrader/config" ) -var g GDAX +var c CoinbasePro // Please supply your APIKeys here for better testing const ( @@ -17,74 +17,74 @@ const ( ) func TestSetDefaults(t *testing.T) { - g.SetDefaults() - g.Requester.SetRateLimit(false, time.Second, 1) + c.SetDefaults() + c.Requester.SetRateLimit(false, time.Second, 1) } func TestSetup(t *testing.T) { cfg := config.GetConfig() cfg.LoadConfig("../../testdata/configtest.json") - gdxConfig, err := cfg.GetExchangeConfig("GDAX") + gdxConfig, err := cfg.GetExchangeConfig("CoinbasePro") if err != nil { - t.Error("Test Failed - GDAX Setup() init error") + t.Error("Test Failed - coinbasepro Setup() init error") } - g.Setup(gdxConfig) + c.Setup(gdxConfig) } func TestGetFee(t *testing.T) { - if g.GetFee(false) == 0 { + if c.GetFee(false) == 0 { t.Error("Test failed - GetFee() error") } - if g.GetFee(true) != 0 { + if c.GetFee(true) != 0 { t.Error("Test failed - GetFee() error") } } func TestGetProducts(t *testing.T) { - _, err := g.GetProducts() + _, err := c.GetProducts() if err != nil { t.Error("Test failed - GetProducts() error") } } func TestGetTicker(t *testing.T) { - _, err := g.GetTicker("BTC-USD") + _, err := c.GetTicker("BTC-USD") if err != nil { t.Error("Test failed - GetTicker() error", err) } } func TestGetTrades(t *testing.T) { - _, err := g.GetTrades("BTC-USD") + _, err := c.GetTrades("BTC-USD") if err != nil { t.Error("Test failed - GetTrades() error", err) } } func TestGetHistoricRates(t *testing.T) { - _, err := g.GetHistoricRates("BTC-USD", 0, 0, 0) + _, err := c.GetHistoricRates("BTC-USD", 0, 0, 0) if err != nil { t.Error("Test failed - GetHistoricRates() error", err) } } func TestGetStats(t *testing.T) { - _, err := g.GetStats("BTC-USD") + _, err := c.GetStats("BTC-USD") if err != nil { t.Error("Test failed - GetStats() error", err) } } func TestGetCurrencies(t *testing.T) { - _, err := g.GetCurrencies() + _, err := c.GetCurrencies() if err != nil { t.Error("Test failed - GetCurrencies() error", err) } } func TestGetServerTime(t *testing.T) { - _, err := g.GetServerTime() + _, err := c.GetServerTime() if err != nil { t.Error("Test failed - GetServerTime() error", err) } @@ -92,133 +92,133 @@ func TestGetServerTime(t *testing.T) { func TestAuthRequests(t *testing.T) { - if g.APIKey != "" && g.APISecret != "" && g.ClientID != "" { + if c.APIKey != "" && c.APISecret != "" && c.ClientID != "" { - _, err := g.GetAccounts() + _, err := c.GetAccounts() if err == nil { t.Error("Test failed - GetAccounts() error", err) } - _, err = g.GetAccount("234cb213-ac6f-4ed8-b7b6-e62512930945") + _, err = c.GetAccount("234cb213-ac6f-4ed8-b7b6-e62512930945") if err == nil { t.Error("Test failed - GetAccount() error", err) } - _, err = g.GetAccountHistory("234cb213-ac6f-4ed8-b7b6-e62512930945") + _, err = c.GetAccountHistory("234cb213-ac6f-4ed8-b7b6-e62512930945") if err == nil { t.Error("Test failed - GetAccountHistory() error", err) } - _, err = g.GetHolds("234cb213-ac6f-4ed8-b7b6-e62512930945") + _, err = c.GetHolds("234cb213-ac6f-4ed8-b7b6-e62512930945") if err == nil { t.Error("Test failed - GetHolds() error", err) } - _, err = g.PlaceLimitOrder("", 0, 0, "buy", "", "", "BTC-USD", "", false) + _, err = c.PlaceLimitOrder("", 0, 0, "buy", "", "", "BTC-USD", "", false) if err == nil { t.Error("Test failed - PlaceLimitOrder() error", err) } - _, err = g.PlaceMarketOrder("", 1, 0, "buy", "BTC-USD", "") + _, err = c.PlaceMarketOrder("", 1, 0, "buy", "BTC-USD", "") if err == nil { t.Error("Test failed - PlaceMarketOrder() error", err) } - err = g.CancelOrder("1337") + err = c.CancelOrder("1337") if err == nil { t.Error("Test failed - CancelOrder() error", err) } - _, err = g.CancelAllOrders("BTC-USD") + _, err = c.CancelAllOrders("BTC-USD") if err == nil { t.Error("Test failed - CancelAllOrders() error", err) } - _, err = g.GetOrders([]string{"open", "done"}, "BTC-USD") + _, err = c.GetOrders([]string{"open", "done"}, "BTC-USD") if err == nil { t.Error("Test failed - GetOrders() error", err) } - _, err = g.GetOrder("1337") + _, err = c.GetOrder("1337") if err == nil { t.Error("Test failed - GetOrders() error", err) } - _, err = g.GetFills("1337", "BTC-USD") + _, err = c.GetFills("1337", "BTC-USD") if err == nil { t.Error("Test failed - GetFills() error", err) } - _, err = g.GetFills("", "") + _, err = c.GetFills("", "") if err == nil { t.Error("Test failed - GetFills() error", err) } - _, err = g.GetFundingRecords("rejected") + _, err = c.GetFundingRecords("rejected") if err == nil { t.Error("Test failed - GetFundingRecords() error", err) } - // _, err := g.RepayFunding("1", "BTC") + // _, err := c.RepayFunding("1", "BTC") // if err != nil { // t.Error("Test failed - RepayFunding() error", err) // } - _, err = g.MarginTransfer(1, "withdraw", "45fa9e3b-00ba-4631-b907-8a98cbdf21be", "BTC") + _, err = c.MarginTransfer(1, "withdraw", "45fa9e3b-00ba-4631-b907-8a98cbdf21be", "BTC") if err == nil { t.Error("Test failed - MarginTransfer() error", err) } - _, err = g.GetPosition() + _, err = c.GetPosition() if err == nil { t.Error("Test failed - GetPosition() error", err) } - _, err = g.ClosePosition(false) + _, err = c.ClosePosition(false) if err == nil { t.Error("Test failed - ClosePosition() error", err) } - _, err = g.GetPayMethods() + _, err = c.GetPayMethods() if err == nil { t.Error("Test failed - GetPayMethods() error", err) } - _, err = g.DepositViaPaymentMethod(1, "BTC", "1337") + _, err = c.DepositViaPaymentMethod(1, "BTC", "1337") if err == nil { t.Error("Test failed - DepositViaPaymentMethod() error", err) } - _, err = g.DepositViaCoinbase(1, "BTC", "1337") + _, err = c.DepositViaCoinbase(1, "BTC", "1337") if err == nil { t.Error("Test failed - DepositViaCoinbase() error", err) } - _, err = g.WithdrawViaPaymentMethod(1, "BTC", "1337") + _, err = c.WithdrawViaPaymentMethod(1, "BTC", "1337") if err == nil { t.Error("Test failed - WithdrawViaPaymentMethod() error", err) } - // _, err := g.WithdrawViaCoinbase(1, "BTC", "c13cd0fc-72ca-55e9-843b-b84ef628c198") + // _, err := c.WithdrawViaCoinbase(1, "BTC", "c13cd0fc-72ca-55e9-843b-b84ef628c198") // if err != nil { // t.Error("Test failed - WithdrawViaCoinbase() error", err) // } - _, err = g.WithdrawCrypto(1, "BTC", "1337") + _, err = c.WithdrawCrypto(1, "BTC", "1337") if err == nil { t.Error("Test failed - WithdrawViaCoinbase() error", err) } - _, err = g.GetCoinbaseAccounts() + _, err = c.GetCoinbaseAccounts() if err == nil { t.Error("Test failed - GetCoinbaseAccounts() error", err) } - _, err = g.GetReportStatus("1337") + _, err = c.GetReportStatus("1337") if err == nil { t.Error("Test failed - GetReportStatus() error", err) } - _, err = g.GetTrailingVolume() + _, err = c.GetTrailingVolume() if err == nil { t.Error("Test failed - GetTrailingVolume() error", err) } diff --git a/exchanges/gdax/gdax_types.go b/exchanges/coinbasepro/coinbasepro_types.go similarity index 99% rename from exchanges/gdax/gdax_types.go rename to exchanges/coinbasepro/coinbasepro_types.go index 76d0143d..9d87405f 100644 --- a/exchanges/gdax/gdax_types.go +++ b/exchanges/coinbasepro/coinbasepro_types.go @@ -1,4 +1,4 @@ -package gdax +package coinbasepro // Product holds product information type Product struct { @@ -38,7 +38,7 @@ type History struct { Volume float64 `json:"volume"` } -// Stats holds last 24 hr data for gdax +// Stats holds last 24 hr data for coinbasepro type Stats struct { Open float64 `json:"open,string"` High float64 `json:"high,string"` diff --git a/exchanges/gdax/gdax_websocket.go b/exchanges/coinbasepro/coinbasepro_websocket.go similarity index 74% rename from exchanges/gdax/gdax_websocket.go rename to exchanges/coinbasepro/coinbasepro_websocket.go index 12507895..46f5bdc8 100644 --- a/exchanges/gdax/gdax_websocket.go +++ b/exchanges/coinbasepro/coinbasepro_websocket.go @@ -1,4 +1,4 @@ -package gdax +package coinbasepro import ( "log" @@ -9,11 +9,11 @@ import ( ) const ( - gdaxWebsocketURL = "wss://ws-feed.gdax.com" + coinbaseproWebsocketURL = "wss://ws-feed.pro.coinbase.com" ) // WebsocketSubscribe subscribes to a websocket connection -func (g *GDAX) WebsocketSubscribe(product string, conn *websocket.Conn) error { +func (c *CoinbasePro) WebsocketSubscribe(product string, conn *websocket.Conn) error { subscribe := WebsocketSubscribe{"subscribe", product} json, err := common.JSONEncode(subscribe) if err != nil { @@ -29,37 +29,37 @@ func (g *GDAX) WebsocketSubscribe(product string, conn *websocket.Conn) error { } // WebsocketClient initiates a websocket client -func (g *GDAX) WebsocketClient() { - for g.Enabled && g.Websocket { +func (c *CoinbasePro) WebsocketClient() { + for c.Enabled && c.Websocket { var Dialer websocket.Dialer - conn, _, err := Dialer.Dial(gdaxWebsocketURL, http.Header{}) + conn, _, err := Dialer.Dial(coinbaseproWebsocketURL, http.Header{}) if err != nil { - log.Printf("%s Unable to connect to Websocket. Error: %s\n", g.GetName(), err) + log.Printf("%s Unable to connect to Websocket. Error: %s\n", c.GetName(), err) continue } - log.Printf("%s Connected to Websocket.\n", g.GetName()) + log.Printf("%s Connected to Websocket.\n", c.GetName()) currencies := []string{} - for _, x := range g.EnabledPairs { + for _, x := range c.EnabledPairs { currency := x[0:3] + "-" + x[3:] currencies = append(currencies, currency) } for _, x := range currencies { - err = g.WebsocketSubscribe(x, conn) + err = c.WebsocketSubscribe(x, conn) if err != nil { - log.Printf("%s Websocket subscription error: %s\n", g.GetName(), err) + log.Printf("%s Websocket subscription error: %s\n", c.GetName(), err) continue } } - if g.Verbose { - log.Printf("%s Subscribed to product messages.", g.GetName()) + if c.Verbose { + log.Printf("%s Subscribed to product messages.", c.GetName()) } - for g.Enabled && g.Websocket { + for c.Enabled && c.Websocket { msgType, resp, err := conn.ReadMessage() if err != nil { log.Println(err) @@ -122,6 +122,6 @@ func (g *GDAX) WebsocketClient() { } } conn.Close() - log.Printf("%s Websocket client disconnected.", g.GetName()) + log.Printf("%s Websocket client disconnected.", c.GetName()) } } diff --git a/exchanges/gdax/gdax_wrapper.go b/exchanges/coinbasepro/coinbasepro_wrapper.go similarity index 53% rename from exchanges/gdax/gdax_wrapper.go rename to exchanges/coinbasepro/coinbasepro_wrapper.go index 582307d7..801e4ddf 100644 --- a/exchanges/gdax/gdax_wrapper.go +++ b/exchanges/coinbasepro/coinbasepro_wrapper.go @@ -1,4 +1,4 @@ -package gdax +package coinbasepro import ( "errors" @@ -12,30 +12,30 @@ import ( "github.com/thrasher-/gocryptotrader/exchanges/ticker" ) -// Start starts the GDAX go routine -func (g *GDAX) Start(wg *sync.WaitGroup) { +// Start starts the coinbasepro go routine +func (c *CoinbasePro) Start(wg *sync.WaitGroup) { wg.Add(1) go func() { - g.Run() + c.Run() wg.Done() }() } -// Run implements the GDAX wrapper -func (g *GDAX) Run() { - if g.Verbose { - log.Printf("%s Websocket: %s. (url: %s).\n", g.GetName(), common.IsEnabled(g.Websocket), gdaxWebsocketURL) - log.Printf("%s polling delay: %ds.\n", g.GetName(), g.RESTPollingDelay) - log.Printf("%s %d currencies enabled: %s.\n", g.GetName(), len(g.EnabledPairs), g.EnabledPairs) +// Run implements the coinbasepro wrapper +func (c *CoinbasePro) Run() { + if c.Verbose { + log.Printf("%s Websocket: %s. (url: %s).\n", c.GetName(), common.IsEnabled(c.Websocket), coinbaseproWebsocketURL) + log.Printf("%s polling delay: %ds.\n", c.GetName(), c.RESTPollingDelay) + log.Printf("%s %d currencies enabled: %s.\n", c.GetName(), len(c.EnabledPairs), c.EnabledPairs) } - if g.Websocket { - go g.WebsocketClient() + if c.Websocket { + go c.WebsocketClient() } - exchangeProducts, err := g.GetProducts() + exchangeProducts, err := c.GetProducts() if err != nil { - log.Printf("%s Failed to get available products.\n", g.GetName()) + log.Printf("%s Failed to get available products.\n", c.GetName()) } else { currencies := []string{} for _, x := range exchangeProducts { @@ -43,19 +43,19 @@ func (g *GDAX) Run() { currencies = append(currencies, x.ID[0:3]+x.ID[4:]) } } - err = g.UpdateCurrencies(currencies, false, false) + err = c.UpdateCurrencies(currencies, false, false) if err != nil { - log.Printf("%s Failed to update available currencies.\n", g.GetName()) + log.Printf("%s Failed to update available currencies.\n", c.GetName()) } } } // GetExchangeAccountInfo retrieves balances for all enabled currencies for the -// GDAX exchange -func (g *GDAX) GetExchangeAccountInfo() (exchange.AccountInfo, error) { +// coinbasepro exchange +func (c *CoinbasePro) GetExchangeAccountInfo() (exchange.AccountInfo, error) { var response exchange.AccountInfo - response.ExchangeName = g.GetName() - accountBalance, err := g.GetAccounts() + response.ExchangeName = c.GetName() + accountBalance, err := c.GetAccounts() if err != nil { return response, err } @@ -71,14 +71,14 @@ func (g *GDAX) GetExchangeAccountInfo() (exchange.AccountInfo, error) { } // UpdateTicker updates and returns the ticker for a currency pair -func (g *GDAX) UpdateTicker(p pair.CurrencyPair, assetType string) (ticker.Price, error) { +func (c *CoinbasePro) UpdateTicker(p pair.CurrencyPair, assetType string) (ticker.Price, error) { var tickerPrice ticker.Price - tick, err := g.GetTicker(exchange.FormatExchangeCurrency(g.Name, p).String()) + tick, err := c.GetTicker(exchange.FormatExchangeCurrency(c.Name, p).String()) if err != nil { return ticker.Price{}, err } - stats, err := g.GetStats(exchange.FormatExchangeCurrency(g.Name, p).String()) + stats, err := c.GetStats(exchange.FormatExchangeCurrency(c.Name, p).String()) if err != nil { return ticker.Price{}, err @@ -89,32 +89,32 @@ func (g *GDAX) UpdateTicker(p pair.CurrencyPair, assetType string) (ticker.Price tickerPrice.Last = tick.Price tickerPrice.High = stats.High tickerPrice.Low = stats.Low - ticker.ProcessTicker(g.GetName(), p, tickerPrice, assetType) - return ticker.GetTicker(g.Name, p, assetType) + ticker.ProcessTicker(c.GetName(), p, tickerPrice, assetType) + return ticker.GetTicker(c.Name, p, assetType) } // GetTickerPrice returns the ticker for a currency pair -func (g *GDAX) GetTickerPrice(p pair.CurrencyPair, assetType string) (ticker.Price, error) { - tickerNew, err := ticker.GetTicker(g.GetName(), p, assetType) +func (c *CoinbasePro) GetTickerPrice(p pair.CurrencyPair, assetType string) (ticker.Price, error) { + tickerNew, err := ticker.GetTicker(c.GetName(), p, assetType) if err != nil { - return g.UpdateTicker(p, assetType) + return c.UpdateTicker(p, assetType) } return tickerNew, nil } // GetOrderbookEx returns orderbook base on the currency pair -func (g *GDAX) GetOrderbookEx(p pair.CurrencyPair, assetType string) (orderbook.Base, error) { - ob, err := orderbook.GetOrderbook(g.GetName(), p, assetType) +func (c *CoinbasePro) GetOrderbookEx(p pair.CurrencyPair, assetType string) (orderbook.Base, error) { + ob, err := orderbook.GetOrderbook(c.GetName(), p, assetType) if err != nil { - return g.UpdateOrderbook(p, assetType) + return c.UpdateOrderbook(p, assetType) } return ob, nil } // UpdateOrderbook updates and returns the orderbook for a currency pair -func (g *GDAX) UpdateOrderbook(p pair.CurrencyPair, assetType string) (orderbook.Base, error) { +func (c *CoinbasePro) UpdateOrderbook(p pair.CurrencyPair, assetType string) (orderbook.Base, error) { var orderBook orderbook.Base - orderbookNew, err := g.GetOrderbook(exchange.FormatExchangeCurrency(g.Name, p).String(), 2) + orderbookNew, err := c.GetOrderbook(exchange.FormatExchangeCurrency(c.Name, p).String(), 2) if err != nil { return orderBook, err } @@ -129,49 +129,49 @@ func (g *GDAX) UpdateOrderbook(p pair.CurrencyPair, assetType string) (orderbook orderBook.Asks = append(orderBook.Asks, orderbook.Item{Amount: obNew.Bids[x].Amount, Price: obNew.Bids[x].Price}) } - orderbook.ProcessOrderbook(g.GetName(), p, orderBook, assetType) - return orderbook.GetOrderbook(g.Name, p, assetType) + orderbook.ProcessOrderbook(c.GetName(), p, orderBook, assetType) + return orderbook.GetOrderbook(c.Name, p, assetType) } -// GetExchangeHistory returns historic trade data since exchange opening. -func (g *GDAX) GetExchangeHistory(p pair.CurrencyPair, assetType string) ([]exchange.TradeHistory, error) { +// GetExchangeHistory returns historic trade data since exchange openinc. +func (c *CoinbasePro) GetExchangeHistory(p pair.CurrencyPair, assetType string) ([]exchange.TradeHistory, error) { var resp []exchange.TradeHistory return resp, errors.New("trade history not yet implemented") } // SubmitExchangeOrder submits a new order -func (g *GDAX) SubmitExchangeOrder(p pair.CurrencyPair, side string, orderType int, amount, price float64) (int64, error) { +func (c *CoinbasePro) SubmitExchangeOrder(p pair.CurrencyPair, side string, orderType int, amount, price float64) (int64, error) { return 0, errors.New("not yet implemented") } // ModifyExchangeOrder will allow of changing orderbook placement and limit to // market conversion -func (g *GDAX) ModifyExchangeOrder(p pair.CurrencyPair, orderID, action int64) (int64, error) { +func (c *CoinbasePro) ModifyExchangeOrder(p pair.CurrencyPair, orderID, action int64) (int64, error) { return 0, errors.New("not yet implemented") } // CancelExchangeOrder cancels an order by its corresponding ID number -func (g *GDAX) CancelExchangeOrder(p pair.CurrencyPair, orderID int64) (int64, error) { +func (c *CoinbasePro) CancelExchangeOrder(p pair.CurrencyPair, orderID int64) (int64, error) { return 0, errors.New("not yet implemented") } // CancelAllExchangeOrders cancels all orders associated with a currency pair -func (g *GDAX) CancelAllExchangeOrders(p pair.CurrencyPair) error { +func (c *CoinbasePro) CancelAllExchangeOrders(p pair.CurrencyPair) error { return errors.New("not yet implemented") } // GetExchangeOrderInfo returns information on a current open order -func (g *GDAX) GetExchangeOrderInfo(orderID int64) (float64, error) { +func (c *CoinbasePro) GetExchangeOrderInfo(orderID int64) (float64, error) { return 0, errors.New("not yet implemented") } // GetExchangeDepositAddress returns a deposit address for a specified currency -func (g *GDAX) GetExchangeDepositAddress(p pair.CurrencyPair) (string, error) { +func (c *CoinbasePro) GetExchangeDepositAddress(p pair.CurrencyPair) (string, error) { return "", errors.New("not yet implemented") } // WithdrawExchangeFunds returns a withdrawal ID when a withdrawal is submitted -func (g *GDAX) WithdrawExchangeFunds(address string, p pair.CurrencyPair, amount float64) (string, error) { +func (c *CoinbasePro) WithdrawExchangeFunds(address string, p pair.CurrencyPair, amount float64) (string, error) { return "", errors.New("not yet implemented") } diff --git a/exchanges/exchange_test.go b/exchanges/exchange_test.go index e6d0ba0c..d6a41462 100644 --- a/exchanges/exchange_test.go +++ b/exchanges/exchange_test.go @@ -568,7 +568,7 @@ func TestFormatExchangeCurrency(t *testing.T) { pair := pair.NewCurrencyPair("BTC", "USD") expected := "BTC-USD" - actual := FormatExchangeCurrency("GDAX", pair) + actual := FormatExchangeCurrency("CoinbasePro", pair) if actual.String() != expected { t.Errorf("Test failed - Exchange TestFormatExchangeCurrency %s != %s", diff --git a/main.go b/main.go index 7a5d3b26..2f394912 100644 --- a/main.go +++ b/main.go @@ -11,12 +11,11 @@ import ( "strconv" "syscall" - "github.com/thrasher-/gocryptotrader/currency" - "github.com/thrasher-/gocryptotrader/currency/forexprovider" - "github.com/thrasher-/gocryptotrader/common" "github.com/thrasher-/gocryptotrader/communications" "github.com/thrasher-/gocryptotrader/config" + "github.com/thrasher-/gocryptotrader/currency" + "github.com/thrasher-/gocryptotrader/currency/forexprovider" "github.com/thrasher-/gocryptotrader/exchanges" "github.com/thrasher-/gocryptotrader/portfolio" ) diff --git a/testdata/configtest.json b/testdata/configtest.json index b71d5445..6634d8e3 100644 --- a/testdata/configtest.json +++ b/testdata/configtest.json @@ -419,7 +419,7 @@ } }, { - "Name": "GDAX", + "Name": "CoinbasePro", "Enabled": true, "Verbose": false, "Websocket": false, diff --git a/tools/documentation/documentation.go b/tools/documentation/documentation.go index d757ac3c..21017705 100644 --- a/tools/documentation/documentation.go +++ b/tools/documentation/documentation.go @@ -45,7 +45,7 @@ const ( btcmarkets = "..%s..%sexchanges%sbtcmarkets%s" coinut = "..%s..%sexchanges%scoinut%s" exmo = "..%s..%sexchanges%sexmo%s" - gdax = "..%s..%sexchanges%sgdax%s" + coinbasepro = "..%s..%sexchanges%scoinbasepro%s" gemini = "..%s..%sexchanges%sgemini%s" hitbtc = "..%s..%sexchanges%shitbtc%s" huobi = "..%s..%sexchanges%shuobi%s" @@ -197,7 +197,7 @@ func addPaths() { codebasePaths["exchanges btcmarkets"] = fmt.Sprintf(btcmarkets, path, path, path, path) codebasePaths["exchanges coinut"] = fmt.Sprintf(coinut, path, path, path, path) codebasePaths["exchanges exmo"] = fmt.Sprintf(exmo, path, path, path, path) - codebasePaths["exchanges gdax"] = fmt.Sprintf(gdax, path, path, path, path) + codebasePaths["exchanges coinbasepro"] = fmt.Sprintf(coinbasepro, path, path, path, path) codebasePaths["exchanges gemini"] = fmt.Sprintf(gemini, path, path, path, path) codebasePaths["exchanges hitbtc"] = fmt.Sprintf(hitbtc, path, path, path, path) codebasePaths["exchanges huobi"] = fmt.Sprintf(huobi, path, path, path, path) diff --git a/tools/documentation/exchange_readme_templates/gdax.tmpl b/tools/documentation/exchange_readme_templates/coinbasepro.tmpl similarity index 78% rename from tools/documentation/exchange_readme_templates/gdax.tmpl rename to tools/documentation/exchange_readme_templates/coinbasepro.tmpl index a25173e0..7ab96eaa 100644 --- a/tools/documentation/exchange_readme_templates/gdax.tmpl +++ b/tools/documentation/exchange_readme_templates/coinbasepro.tmpl @@ -1,6 +1,6 @@ -{{define "exchanges gdax" -}} +{{define "exchanges coinbasepro" -}} {{template "header" .}} -## GDAX Exchange +## CoinbasePro Exchange ### Current Features diff --git a/tools/documentation/readme_templates/root_readme.tmpl b/tools/documentation/readme_templates/root_readme.tmpl index e8536bac..b5bdac60 100644 --- a/tools/documentation/readme_templates/root_readme.tmpl +++ b/tools/documentation/readme_templates/root_readme.tmpl @@ -31,7 +31,7 @@ Join our slack to discuss all things related to GoCryptoTrader! [GoCryptoTrader | BTCMarkets | Yes | No | NA | | COINUT | Yes | No | NA | | Exmo | Yes | NA | NA | -| GDAX(Coinbase) | Yes | Yes | No| +| CoinbasePro | Yes | Yes | No| | Gemini | Yes | No | No | | HitBTC | Yes | Yes | No | | Huobi.Pro | Yes | No |No |