This repository was archived by the owner on Feb 19, 2022. It is now read-only.

Repository files navigation

BitEx

BitEx is a collection of API Clients for Crypto Currency Exchanges.

It comes with two parts - bitex.api represents the base level API interfaces, on top of which the second part - bitex.interfaces - builds upon. bitex.api classes can be used without making use of the interface classes.

Donations welcome! BTC @ 3D4yuyf84eQUauyZLoQKyouPuThoxMMRZa

State


RESTAPI : Completed

WSSAPI : BETA

Interfaces : WIP


Supported Exchanges

ExchangeAPIAuthenticationPublic Endpoints*1Private Endpoints1FormattersTests
BitfinexDoneDoneDoneDoneWIPWIP
BitstampDoneDoneDoneDoneWIPWIP
BittrexDoneDoneDoneDoneWIPWIP
BterDoneBETADoneDoneWIPWIP
C-CexDoneBETADoneDoneWIPWIP
CoinCheckDoneDoneDoneDoneWIPWIP
CryptopiaDoneBETADoneDoneWIPWIP
GDAXDoneBETADoneDoneWIPWIP
GeminiDoneBETADoneDoneWIPWIP
HitBtcDoneBETADoneDoneWIPWIP
itBitDoneBETADoneDoneWIPWIP
KrakenDoneDoneDoneDoneWIPWIP
OkCoinDoneBETADoneDoneWIPWIP
PoloniexDoneDoneDoneDoneWIPWIP
QuoineDoneBETADoneDoneWIPWIP
QuadrigaCXDoneBETADoneDoneWIPWIP
TheRockTradingDoneBETADoneDoneWIPWIP
YunbiDoneBETADoneDoneWIPWIP
VaultoroDoneBETADoneDoneWIPWIP

Additional clients will be added to (or removed from) this list, according to their liquidity and market volume.

bitex.api.REST

Classes found in bitex.api.REST provide wrapper classes and methods for Python's requests module, including handling of each exchange's specific authentication procedure.

An example:

frombitex.api.RESTimportKrakenRESTk=KrakenREST()
k.load_key('kraken.key') # loads key and secret from given file;# Query a public endpointk.query('GET','public/Depth', params={'pair': 'XXBTZUSD'})
# Query a private (authenticated) endpointq= {'pair': 'XXBTZUSD', 'type': 'sell', 'ordertype': 'limit', 'price': 1000.0,
'volume': 0.01, 'validate': True}
k.query('POST','private/AddOrder', authenticate=True, params=q)

Example .key file:

>>>dummy.key
my_api_key
my_fancy_api_secret

If the api requires further details, for example a userid or account number (for example for bitstamp), you should check the class method's doc string, although usually this information needs to go after the api key and secret, on a separate line each.

>>>dummy2.key
my_api_key
my_fancy_api_secret
Userid
accountname

bitex.api.WSS

bitex.api.WSS offers Queue()-based Websocket interface for a select few exchanges. The classes found within are very basic, and subject to further development. Private endpoints and trading are only sporadically implemented.

Their prime objective is to provide a raw, realtime interface to all of an exchange's Websocket endpoint.

Usage

from.bitex.api.WSSimportGeminiWSSimporttimewss=GeminiWSS()
wss.start()
time.sleep(5)
wss.stop()
whilenotwss.data_q.empty():
print(wss.data_q.get())

You can of course also access data_q while the WebSocket is still running (i.e. before calling stop()).

bitex.interfaces

Built on top of bitex.api's api classes are the slightly more sophisticated exchange interfaces in bitex.interfaces. These have been written to unify the diverse REST APIs of the implemented exchanges, by providing the same methods and method parameters across all of them (see next section, Standardized Methods, for more information).

For example, querying tickers looks the same on all exchanges, as well as placing an order, using bitex.interface:

frombiteximportKraken, Bitstamp, Geminik=Kraken(key_file='krkn.key')
b=Bitstamp(key_file='btst.key')
g=Gemini(key_file='gmni.key')
k.ticker('XBTUSD')
b.ticker('btceur')
g.ticker('BTC-USD')
k.ask(pair, price, size)
b.ask(pair, price, size)
g.ask(pair, price, size)

Standardized Methods

As explained in the previous section, standardized methods refer to the methods of each interface which have been deemed as part of the set of minimal methods and functions required to trade at an exchange via its API. They feature the following characteristics:

  • Each method has an identical method header across all interfaces
  • Its output is identical across all interfaces
  • Each method returns a bitex.api.response.APIResponse object; these behave like requests.Request objects, with the addition of a new attribute, formatted, which stores a standardized representation of the data queried.

bitex.formatters

This module provide formatters for the standardized methods, formatting their json output into a uniform layout. They are a work in progress feature.

Be mindful that, in order to provide a unified output format, some fields have been dropped in the formatted output! If you rely on one of these dropped fields, be sure to use the APIResponse's json attribute instead, and parse the json yourself:

frombiteximportKrakenk=Kraken()
response=k.ticker()
print(response.formatted) # show formatted dataprint(response.json()) # Returns all json data

The following is a table of all formatters currently implemented - any method not marked as Done will not do any formatting.

Exchangeticker()order_book()trades()bid()/ask()order()cancel_order()balance()withdraw()deposit()
BitfinexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BitstampDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BittrexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BterWIPWIPWIPWIPWIPWIPWIPWIPWIP
C-CexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
CoincheckDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
CryptopiaDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
GDAXDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
GeminiDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
HitBtcWIPWIPWIPWIPWIPWIPWIPWIPWIP
itBitDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
KrakenDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
OKCoinDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
PoloniexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
QuadrigaCXDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
QuoineDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
TheRockTradingLTDDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
VaultoroWIPWIPWIPWIPWIPWIPWIPWIPWIP
YunbiDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned

Installation

Manually, using the supplied setup.py file:

python3 setup.py install

or via pip

pip install BitEx

Footnotes

  1. This table considers standardized methods only, when describing the state. See section Standardized Methods for more 2

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Feb 19, 2022. It is now read-only.

Repository files navigation

BitEx

BitEx is a collection of API Clients for Crypto Currency Exchanges.

It comes with two parts - bitex.api represents the base level API interfaces, on top of which the second part - bitex.interfaces - builds upon. bitex.api classes can be used without making use of the interface classes.

Donations welcome! BTC @ 3D4yuyf84eQUauyZLoQKyouPuThoxMMRZa

State


RESTAPI : Completed

WSSAPI : BETA

Interfaces : WIP


Supported Exchanges

ExchangeAPIAuthenticationPublic Endpoints*1Private Endpoints1FormattersTests
BitfinexDoneDoneDoneDoneWIPWIP
BitstampDoneDoneDoneDoneWIPWIP
BittrexDoneDoneDoneDoneWIPWIP
BterDoneBETADoneDoneWIPWIP
C-CexDoneBETADoneDoneWIPWIP
CoinCheckDoneDoneDoneDoneWIPWIP
CryptopiaDoneBETADoneDoneWIPWIP
GDAXDoneBETADoneDoneWIPWIP
GeminiDoneBETADoneDoneWIPWIP
HitBtcDoneBETADoneDoneWIPWIP
itBitDoneBETADoneDoneWIPWIP
KrakenDoneDoneDoneDoneWIPWIP
OkCoinDoneBETADoneDoneWIPWIP
PoloniexDoneDoneDoneDoneWIPWIP
QuoineDoneBETADoneDoneWIPWIP
QuadrigaCXDoneBETADoneDoneWIPWIP
TheRockTradingDoneBETADoneDoneWIPWIP
YunbiDoneBETADoneDoneWIPWIP
VaultoroDoneBETADoneDoneWIPWIP

Additional clients will be added to (or removed from) this list, according to their liquidity and market volume.

bitex.api.REST

Classes found in bitex.api.REST provide wrapper classes and methods for Python's requests module, including handling of each exchange's specific authentication procedure.

An example:

frombitex.api.RESTimportKrakenRESTk=KrakenREST()
k.load_key('kraken.key') # loads key and secret from given file;# Query a public endpointk.query('GET','public/Depth', params={'pair': 'XXBTZUSD'})
# Query a private (authenticated) endpointq= {'pair': 'XXBTZUSD', 'type': 'sell', 'ordertype': 'limit', 'price': 1000.0,
'volume': 0.01, 'validate': True}
k.query('POST','private/AddOrder', authenticate=True, params=q)

Example .key file:

>>>dummy.key
my_api_key
my_fancy_api_secret

If the api requires further details, for example a userid or account number (for example for bitstamp), you should check the class method's doc string, although usually this information needs to go after the api key and secret, on a separate line each.

>>>dummy2.key
my_api_key
my_fancy_api_secret
Userid
accountname

bitex.api.WSS

bitex.api.WSS offers Queue()-based Websocket interface for a select few exchanges. The classes found within are very basic, and subject to further development. Private endpoints and trading are only sporadically implemented.

Their prime objective is to provide a raw, realtime interface to all of an exchange's Websocket endpoint.

Usage

from.bitex.api.WSSimportGeminiWSSimporttimewss=GeminiWSS()
wss.start()
time.sleep(5)
wss.stop()
whilenotwss.data_q.empty():
print(wss.data_q.get())

You can of course also access data_q while the WebSocket is still running (i.e. before calling stop()).

bitex.interfaces

Built on top of bitex.api's api classes are the slightly more sophisticated exchange interfaces in bitex.interfaces. These have been written to unify the diverse REST APIs of the implemented exchanges, by providing the same methods and method parameters across all of them (see next section, Standardized Methods, for more information).

For example, querying tickers looks the same on all exchanges, as well as placing an order, using bitex.interface:

frombiteximportKraken, Bitstamp, Geminik=Kraken(key_file='krkn.key')
b=Bitstamp(key_file='btst.key')
g=Gemini(key_file='gmni.key')
k.ticker('XBTUSD')
b.ticker('btceur')
g.ticker('BTC-USD')
k.ask(pair, price, size)
b.ask(pair, price, size)
g.ask(pair, price, size)

Standardized Methods

As explained in the previous section, standardized methods refer to the methods of each interface which have been deemed as part of the set of minimal methods and functions required to trade at an exchange via its API. They feature the following characteristics:

  • Each method has an identical method header across all interfaces
  • Its output is identical across all interfaces
  • Each method returns a bitex.api.response.APIResponse object; these behave like requests.Request objects, with the addition of a new attribute, formatted, which stores a standardized representation of the data queried.

bitex.formatters

This module provide formatters for the standardized methods, formatting their json output into a uniform layout. They are a work in progress feature.

Be mindful that, in order to provide a unified output format, some fields have been dropped in the formatted output! If you rely on one of these dropped fields, be sure to use the APIResponse's json attribute instead, and parse the json yourself:

frombiteximportKrakenk=Kraken()
response=k.ticker()
print(response.formatted) # show formatted dataprint(response.json()) # Returns all json data

The following is a table of all formatters currently implemented - any method not marked as Done will not do any formatting.

Exchangeticker()order_book()trades()bid()/ask()order()cancel_order()balance()withdraw()deposit()
BitfinexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BitstampDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BittrexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BterWIPWIPWIPWIPWIPWIPWIPWIPWIP
C-CexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
CoincheckDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
CryptopiaDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
GDAXDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
GeminiDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
HitBtcWIPWIPWIPWIPWIPWIPWIPWIPWIP
itBitDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
KrakenDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
OKCoinDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
PoloniexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
QuadrigaCXDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
QuoineDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
TheRockTradingLTDDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
VaultoroWIPWIPWIPWIPWIPWIPWIPWIPWIP
YunbiDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned

Installation

Manually, using the supplied setup.py file:

python3 setup.py install

or via pip

pip install BitEx

Footnotes

  1. This table considers standardized methods only, when describing the state. See section Standardized Methods for more 2

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Feb 19, 2022. It is now read-only.

Repository files navigation

BitEx

BitEx is a collection of API Clients for Crypto Currency Exchanges.

It comes with two parts - bitex.api represents the base level API interfaces, on top of which the second part - bitex.interfaces - builds upon. bitex.api classes can be used without making use of the interface classes.

Donations welcome! BTC @ 3D4yuyf84eQUauyZLoQKyouPuThoxMMRZa

State


RESTAPI : Completed

WSSAPI : BETA

Interfaces : WIP


Supported Exchanges

ExchangeAPIAuthenticationPublic Endpoints*1Private Endpoints1FormattersTests
BitfinexDoneDoneDoneDoneWIPWIP
BitstampDoneDoneDoneDoneWIPWIP
BittrexDoneDoneDoneDoneWIPWIP
BterDoneBETADoneDoneWIPWIP
C-CexDoneBETADoneDoneWIPWIP
CoinCheckDoneDoneDoneDoneWIPWIP
CryptopiaDoneBETADoneDoneWIPWIP
GDAXDoneBETADoneDoneWIPWIP
GeminiDoneBETADoneDoneWIPWIP
HitBtcDoneBETADoneDoneWIPWIP
itBitDoneBETADoneDoneWIPWIP
KrakenDoneDoneDoneDoneWIPWIP
OkCoinDoneBETADoneDoneWIPWIP
PoloniexDoneDoneDoneDoneWIPWIP
QuoineDoneBETADoneDoneWIPWIP
QuadrigaCXDoneBETADoneDoneWIPWIP
TheRockTradingDoneBETADoneDoneWIPWIP
YunbiDoneBETADoneDoneWIPWIP
VaultoroDoneBETADoneDoneWIPWIP

Additional clients will be added to (or removed from) this list, according to their liquidity and market volume.

bitex.api.REST

Classes found in bitex.api.REST provide wrapper classes and methods for Python's requests module, including handling of each exchange's specific authentication procedure.

An example:

frombitex.api.RESTimportKrakenRESTk=KrakenREST()
k.load_key('kraken.key') # loads key and secret from given file;# Query a public endpointk.query('GET','public/Depth', params={'pair': 'XXBTZUSD'})
# Query a private (authenticated) endpointq= {'pair': 'XXBTZUSD', 'type': 'sell', 'ordertype': 'limit', 'price': 1000.0,
'volume': 0.01, 'validate': True}
k.query('POST','private/AddOrder', authenticate=True, params=q)

Example .key file:

>>>dummy.key
my_api_key
my_fancy_api_secret

If the api requires further details, for example a userid or account number (for example for bitstamp), you should check the class method's doc string, although usually this information needs to go after the api key and secret, on a separate line each.

>>>dummy2.key
my_api_key
my_fancy_api_secret
Userid
accountname

bitex.api.WSS

bitex.api.WSS offers Queue()-based Websocket interface for a select few exchanges. The classes found within are very basic, and subject to further development. Private endpoints and trading are only sporadically implemented.

Their prime objective is to provide a raw, realtime interface to all of an exchange's Websocket endpoint.

Usage

from.bitex.api.WSSimportGeminiWSSimporttimewss=GeminiWSS()
wss.start()
time.sleep(5)
wss.stop()
whilenotwss.data_q.empty():
print(wss.data_q.get())

You can of course also access data_q while the WebSocket is still running (i.e. before calling stop()).

bitex.interfaces

Built on top of bitex.api's api classes are the slightly more sophisticated exchange interfaces in bitex.interfaces. These have been written to unify the diverse REST APIs of the implemented exchanges, by providing the same methods and method parameters across all of them (see next section, Standardized Methods, for more information).

For example, querying tickers looks the same on all exchanges, as well as placing an order, using bitex.interface:

frombiteximportKraken, Bitstamp, Geminik=Kraken(key_file='krkn.key')
b=Bitstamp(key_file='btst.key')
g=Gemini(key_file='gmni.key')
k.ticker('XBTUSD')
b.ticker('btceur')
g.ticker('BTC-USD')
k.ask(pair, price, size)
b.ask(pair, price, size)
g.ask(pair, price, size)

Standardized Methods

As explained in the previous section, standardized methods refer to the methods of each interface which have been deemed as part of the set of minimal methods and functions required to trade at an exchange via its API. They feature the following characteristics:

  • Each method has an identical method header across all interfaces
  • Its output is identical across all interfaces
  • Each method returns a bitex.api.response.APIResponse object; these behave like requests.Request objects, with the addition of a new attribute, formatted, which stores a standardized representation of the data queried.

bitex.formatters

This module provide formatters for the standardized methods, formatting their json output into a uniform layout. They are a work in progress feature.

Be mindful that, in order to provide a unified output format, some fields have been dropped in the formatted output! If you rely on one of these dropped fields, be sure to use the APIResponse's json attribute instead, and parse the json yourself:

frombiteximportKrakenk=Kraken()
response=k.ticker()
print(response.formatted) # show formatted dataprint(response.json()) # Returns all json data

The following is a table of all formatters currently implemented - any method not marked as Done will not do any formatting.

Exchangeticker()order_book()trades()bid()/ask()order()cancel_order()balance()withdraw()deposit()
BitfinexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BitstampDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BittrexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BterWIPWIPWIPWIPWIPWIPWIPWIPWIP
C-CexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
CoincheckDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
CryptopiaDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
GDAXDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
GeminiDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
HitBtcWIPWIPWIPWIPWIPWIPWIPWIPWIP
itBitDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
KrakenDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
OKCoinDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
PoloniexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
QuadrigaCXDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
QuoineDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
TheRockTradingLTDDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
VaultoroWIPWIPWIPWIPWIPWIPWIPWIPWIP
YunbiDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned

Installation

Manually, using the supplied setup.py file:

python3 setup.py install

or via pip

pip install BitEx

Footnotes

  1. This table considers standardized methods only, when describing the state. See section Standardized Methods for more 2

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Feb 19, 2022. It is now read-only.

Repository files navigation

BitEx

BitEx is a collection of API Clients for Crypto Currency Exchanges.

It comes with two parts - bitex.api represents the base level API interfaces, on top of which the second part - bitex.interfaces - builds upon. bitex.api classes can be used without making use of the interface classes.

Donations welcome! BTC @ 3D4yuyf84eQUauyZLoQKyouPuThoxMMRZa

State


RESTAPI : Completed

WSSAPI : BETA

Interfaces : WIP


Supported Exchanges

ExchangeAPIAuthenticationPublic Endpoints*1Private Endpoints1FormattersTests
BitfinexDoneDoneDoneDoneWIPWIP
BitstampDoneDoneDoneDoneWIPWIP
BittrexDoneDoneDoneDoneWIPWIP
BterDoneBETADoneDoneWIPWIP
C-CexDoneBETADoneDoneWIPWIP
CoinCheckDoneDoneDoneDoneWIPWIP
CryptopiaDoneBETADoneDoneWIPWIP
GDAXDoneBETADoneDoneWIPWIP
GeminiDoneBETADoneDoneWIPWIP
HitBtcDoneBETADoneDoneWIPWIP
itBitDoneBETADoneDoneWIPWIP
KrakenDoneDoneDoneDoneWIPWIP
OkCoinDoneBETADoneDoneWIPWIP
PoloniexDoneDoneDoneDoneWIPWIP
QuoineDoneBETADoneDoneWIPWIP
QuadrigaCXDoneBETADoneDoneWIPWIP
TheRockTradingDoneBETADoneDoneWIPWIP
YunbiDoneBETADoneDoneWIPWIP
VaultoroDoneBETADoneDoneWIPWIP

Additional clients will be added to (or removed from) this list, according to their liquidity and market volume.

bitex.api.REST

Classes found in bitex.api.REST provide wrapper classes and methods for Python's requests module, including handling of each exchange's specific authentication procedure.

An example:

frombitex.api.RESTimportKrakenRESTk=KrakenREST()
k.load_key('kraken.key') # loads key and secret from given file;# Query a public endpointk.query('GET','public/Depth', params={'pair': 'XXBTZUSD'})
# Query a private (authenticated) endpointq= {'pair': 'XXBTZUSD', 'type': 'sell', 'ordertype': 'limit', 'price': 1000.0,
'volume': 0.01, 'validate': True}
k.query('POST','private/AddOrder', authenticate=True, params=q)

Example .key file:

>>>dummy.key
my_api_key
my_fancy_api_secret

If the api requires further details, for example a userid or account number (for example for bitstamp), you should check the class method's doc string, although usually this information needs to go after the api key and secret, on a separate line each.

>>>dummy2.key
my_api_key
my_fancy_api_secret
Userid
accountname

bitex.api.WSS

bitex.api.WSS offers Queue()-based Websocket interface for a select few exchanges. The classes found within are very basic, and subject to further development. Private endpoints and trading are only sporadically implemented.

Their prime objective is to provide a raw, realtime interface to all of an exchange's Websocket endpoint.

Usage

from.bitex.api.WSSimportGeminiWSSimporttimewss=GeminiWSS()
wss.start()
time.sleep(5)
wss.stop()
whilenotwss.data_q.empty():
print(wss.data_q.get())

You can of course also access data_q while the WebSocket is still running (i.e. before calling stop()).

bitex.interfaces

Built on top of bitex.api's api classes are the slightly more sophisticated exchange interfaces in bitex.interfaces. These have been written to unify the diverse REST APIs of the implemented exchanges, by providing the same methods and method parameters across all of them (see next section, Standardized Methods, for more information).

For example, querying tickers looks the same on all exchanges, as well as placing an order, using bitex.interface:

frombiteximportKraken, Bitstamp, Geminik=Kraken(key_file='krkn.key')
b=Bitstamp(key_file='btst.key')
g=Gemini(key_file='gmni.key')
k.ticker('XBTUSD')
b.ticker('btceur')
g.ticker('BTC-USD')
k.ask(pair, price, size)
b.ask(pair, price, size)
g.ask(pair, price, size)

Standardized Methods

As explained in the previous section, standardized methods refer to the methods of each interface which have been deemed as part of the set of minimal methods and functions required to trade at an exchange via its API. They feature the following characteristics:

  • Each method has an identical method header across all interfaces
  • Its output is identical across all interfaces
  • Each method returns a bitex.api.response.APIResponse object; these behave like requests.Request objects, with the addition of a new attribute, formatted, which stores a standardized representation of the data queried.

bitex.formatters

This module provide formatters for the standardized methods, formatting their json output into a uniform layout. They are a work in progress feature.

Be mindful that, in order to provide a unified output format, some fields have been dropped in the formatted output! If you rely on one of these dropped fields, be sure to use the APIResponse's json attribute instead, and parse the json yourself:

frombiteximportKrakenk=Kraken()
response=k.ticker()
print(response.formatted) # show formatted dataprint(response.json()) # Returns all json data

The following is a table of all formatters currently implemented - any method not marked as Done will not do any formatting.

Exchangeticker()order_book()trades()bid()/ask()order()cancel_order()balance()withdraw()deposit()
BitfinexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BitstampDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BittrexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BterWIPWIPWIPWIPWIPWIPWIPWIPWIP
C-CexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
CoincheckDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
CryptopiaDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
GDAXDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
GeminiDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
HitBtcWIPWIPWIPWIPWIPWIPWIPWIPWIP
itBitDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
KrakenDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
OKCoinDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
PoloniexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
QuadrigaCXDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
QuoineDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
TheRockTradingLTDDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
VaultoroWIPWIPWIPWIPWIPWIPWIPWIPWIP
YunbiDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned

Installation

Manually, using the supplied setup.py file:

python3 setup.py install

or via pip

pip install BitEx

Footnotes

  1. This table considers standardized methods only, when describing the state. See section Standardized Methods for more 2

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Feb 19, 2022. It is now read-only.

Repository files navigation

BitEx

BitEx is a collection of API Clients for Crypto Currency Exchanges.

It comes with two parts - bitex.api represents the base level API interfaces, on top of which the second part - bitex.interfaces - builds upon. bitex.api classes can be used without making use of the interface classes.

Donations welcome! BTC @ 3D4yuyf84eQUauyZLoQKyouPuThoxMMRZa

State


RESTAPI : Completed

WSSAPI : BETA

Interfaces : WIP


Supported Exchanges

ExchangeAPIAuthenticationPublic Endpoints*1Private Endpoints1FormattersTests
BitfinexDoneDoneDoneDoneWIPWIP
BitstampDoneDoneDoneDoneWIPWIP
BittrexDoneDoneDoneDoneWIPWIP
BterDoneBETADoneDoneWIPWIP
C-CexDoneBETADoneDoneWIPWIP
CoinCheckDoneDoneDoneDoneWIPWIP
CryptopiaDoneBETADoneDoneWIPWIP
GDAXDoneBETADoneDoneWIPWIP
GeminiDoneBETADoneDoneWIPWIP
HitBtcDoneBETADoneDoneWIPWIP
itBitDoneBETADoneDoneWIPWIP
KrakenDoneDoneDoneDoneWIPWIP
OkCoinDoneBETADoneDoneWIPWIP
PoloniexDoneDoneDoneDoneWIPWIP
QuoineDoneBETADoneDoneWIPWIP
QuadrigaCXDoneBETADoneDoneWIPWIP
TheRockTradingDoneBETADoneDoneWIPWIP
YunbiDoneBETADoneDoneWIPWIP
VaultoroDoneBETADoneDoneWIPWIP

Additional clients will be added to (or removed from) this list, according to their liquidity and market volume.

bitex.api.REST

Classes found in bitex.api.REST provide wrapper classes and methods for Python's requests module, including handling of each exchange's specific authentication procedure.

An example:

frombitex.api.RESTimportKrakenRESTk=KrakenREST()
k.load_key('kraken.key') # loads key and secret from given file;# Query a public endpointk.query('GET','public/Depth', params={'pair': 'XXBTZUSD'})
# Query a private (authenticated) endpointq= {'pair': 'XXBTZUSD', 'type': 'sell', 'ordertype': 'limit', 'price': 1000.0,
'volume': 0.01, 'validate': True}
k.query('POST','private/AddOrder', authenticate=True, params=q)

Example .key file:

>>>dummy.key
my_api_key
my_fancy_api_secret

If the api requires further details, for example a userid or account number (for example for bitstamp), you should check the class method's doc string, although usually this information needs to go after the api key and secret, on a separate line each.

>>>dummy2.key
my_api_key
my_fancy_api_secret
Userid
accountname

bitex.api.WSS

bitex.api.WSS offers Queue()-based Websocket interface for a select few exchanges. The classes found within are very basic, and subject to further development. Private endpoints and trading are only sporadically implemented.

Their prime objective is to provide a raw, realtime interface to all of an exchange's Websocket endpoint.

Usage

from.bitex.api.WSSimportGeminiWSSimporttimewss=GeminiWSS()
wss.start()
time.sleep(5)
wss.stop()
whilenotwss.data_q.empty():
print(wss.data_q.get())

You can of course also access data_q while the WebSocket is still running (i.e. before calling stop()).

bitex.interfaces

Built on top of bitex.api's api classes are the slightly more sophisticated exchange interfaces in bitex.interfaces. These have been written to unify the diverse REST APIs of the implemented exchanges, by providing the same methods and method parameters across all of them (see next section, Standardized Methods, for more information).

For example, querying tickers looks the same on all exchanges, as well as placing an order, using bitex.interface:

frombiteximportKraken, Bitstamp, Geminik=Kraken(key_file='krkn.key')
b=Bitstamp(key_file='btst.key')
g=Gemini(key_file='gmni.key')
k.ticker('XBTUSD')
b.ticker('btceur')
g.ticker('BTC-USD')
k.ask(pair, price, size)
b.ask(pair, price, size)
g.ask(pair, price, size)

Standardized Methods

As explained in the previous section, standardized methods refer to the methods of each interface which have been deemed as part of the set of minimal methods and functions required to trade at an exchange via its API. They feature the following characteristics:

  • Each method has an identical method header across all interfaces
  • Its output is identical across all interfaces
  • Each method returns a bitex.api.response.APIResponse object; these behave like requests.Request objects, with the addition of a new attribute, formatted, which stores a standardized representation of the data queried.

bitex.formatters

This module provide formatters for the standardized methods, formatting their json output into a uniform layout. They are a work in progress feature.

Be mindful that, in order to provide a unified output format, some fields have been dropped in the formatted output! If you rely on one of these dropped fields, be sure to use the APIResponse's json attribute instead, and parse the json yourself:

frombiteximportKrakenk=Kraken()
response=k.ticker()
print(response.formatted) # show formatted dataprint(response.json()) # Returns all json data

The following is a table of all formatters currently implemented - any method not marked as Done will not do any formatting.

Exchangeticker()order_book()trades()bid()/ask()order()cancel_order()balance()withdraw()deposit()
BitfinexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BitstampDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BittrexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BterWIPWIPWIPWIPWIPWIPWIPWIPWIP
C-CexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
CoincheckDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
CryptopiaDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
GDAXDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
GeminiDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
HitBtcWIPWIPWIPWIPWIPWIPWIPWIPWIP
itBitDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
KrakenDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
OKCoinDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
PoloniexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
QuadrigaCXDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
QuoineDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
TheRockTradingLTDDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
VaultoroWIPWIPWIPWIPWIPWIPWIPWIPWIP
YunbiDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned

Installation

Manually, using the supplied setup.py file:

python3 setup.py install

or via pip

pip install BitEx

Footnotes

  1. This table considers standardized methods only, when describing the state. See section Standardized Methods for more 2

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Feb 19, 2022. It is now read-only.

Repository files navigation

BitEx

BitEx is a collection of API Clients for Crypto Currency Exchanges.

It comes with two parts - bitex.api represents the base level API interfaces, on top of which the second part - bitex.interfaces - builds upon. bitex.api classes can be used without making use of the interface classes.

Donations welcome! BTC @ 3D4yuyf84eQUauyZLoQKyouPuThoxMMRZa

State


RESTAPI : Completed

WSSAPI : BETA

Interfaces : WIP


Supported Exchanges

ExchangeAPIAuthenticationPublic Endpoints*1Private Endpoints1FormattersTests
BitfinexDoneDoneDoneDoneWIPWIP
BitstampDoneDoneDoneDoneWIPWIP
BittrexDoneDoneDoneDoneWIPWIP
BterDoneBETADoneDoneWIPWIP
C-CexDoneBETADoneDoneWIPWIP
CoinCheckDoneDoneDoneDoneWIPWIP
CryptopiaDoneBETADoneDoneWIPWIP
GDAXDoneBETADoneDoneWIPWIP
GeminiDoneBETADoneDoneWIPWIP
HitBtcDoneBETADoneDoneWIPWIP
itBitDoneBETADoneDoneWIPWIP
KrakenDoneDoneDoneDoneWIPWIP
OkCoinDoneBETADoneDoneWIPWIP
PoloniexDoneDoneDoneDoneWIPWIP
QuoineDoneBETADoneDoneWIPWIP
QuadrigaCXDoneBETADoneDoneWIPWIP
TheRockTradingDoneBETADoneDoneWIPWIP
YunbiDoneBETADoneDoneWIPWIP
VaultoroDoneBETADoneDoneWIPWIP

Additional clients will be added to (or removed from) this list, according to their liquidity and market volume.

bitex.api.REST

Classes found in bitex.api.REST provide wrapper classes and methods for Python's requests module, including handling of each exchange's specific authentication procedure.

An example:

frombitex.api.RESTimportKrakenRESTk=KrakenREST()
k.load_key('kraken.key') # loads key and secret from given file;# Query a public endpointk.query('GET','public/Depth', params={'pair': 'XXBTZUSD'})
# Query a private (authenticated) endpointq= {'pair': 'XXBTZUSD', 'type': 'sell', 'ordertype': 'limit', 'price': 1000.0,
'volume': 0.01, 'validate': True}
k.query('POST','private/AddOrder', authenticate=True, params=q)

Example .key file:

>>>dummy.key
my_api_key
my_fancy_api_secret

If the api requires further details, for example a userid or account number (for example for bitstamp), you should check the class method's doc string, although usually this information needs to go after the api key and secret, on a separate line each.

>>>dummy2.key
my_api_key
my_fancy_api_secret
Userid
accountname

bitex.api.WSS

bitex.api.WSS offers Queue()-based Websocket interface for a select few exchanges. The classes found within are very basic, and subject to further development. Private endpoints and trading are only sporadically implemented.

Their prime objective is to provide a raw, realtime interface to all of an exchange's Websocket endpoint.

Usage

from.bitex.api.WSSimportGeminiWSSimporttimewss=GeminiWSS()
wss.start()
time.sleep(5)
wss.stop()
whilenotwss.data_q.empty():
print(wss.data_q.get())

You can of course also access data_q while the WebSocket is still running (i.e. before calling stop()).

bitex.interfaces

Built on top of bitex.api's api classes are the slightly more sophisticated exchange interfaces in bitex.interfaces. These have been written to unify the diverse REST APIs of the implemented exchanges, by providing the same methods and method parameters across all of them (see next section, Standardized Methods, for more information).

For example, querying tickers looks the same on all exchanges, as well as placing an order, using bitex.interface:

frombiteximportKraken, Bitstamp, Geminik=Kraken(key_file='krkn.key')
b=Bitstamp(key_file='btst.key')
g=Gemini(key_file='gmni.key')
k.ticker('XBTUSD')
b.ticker('btceur')
g.ticker('BTC-USD')
k.ask(pair, price, size)
b.ask(pair, price, size)
g.ask(pair, price, size)

Standardized Methods

As explained in the previous section, standardized methods refer to the methods of each interface which have been deemed as part of the set of minimal methods and functions required to trade at an exchange via its API. They feature the following characteristics:

  • Each method has an identical method header across all interfaces
  • Its output is identical across all interfaces
  • Each method returns a bitex.api.response.APIResponse object; these behave like requests.Request objects, with the addition of a new attribute, formatted, which stores a standardized representation of the data queried.

bitex.formatters

This module provide formatters for the standardized methods, formatting their json output into a uniform layout. They are a work in progress feature.

Be mindful that, in order to provide a unified output format, some fields have been dropped in the formatted output! If you rely on one of these dropped fields, be sure to use the APIResponse's json attribute instead, and parse the json yourself:

frombiteximportKrakenk=Kraken()
response=k.ticker()
print(response.formatted) # show formatted dataprint(response.json()) # Returns all json data

The following is a table of all formatters currently implemented - any method not marked as Done will not do any formatting.

Exchangeticker()order_book()trades()bid()/ask()order()cancel_order()balance()withdraw()deposit()
BitfinexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BitstampDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BittrexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BterWIPWIPWIPWIPWIPWIPWIPWIPWIP
C-CexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
CoincheckDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
CryptopiaDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
GDAXDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
GeminiDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
HitBtcWIPWIPWIPWIPWIPWIPWIPWIPWIP
itBitDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
KrakenDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
OKCoinDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
PoloniexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
QuadrigaCXDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
QuoineDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
TheRockTradingLTDDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
VaultoroWIPWIPWIPWIPWIPWIPWIPWIPWIP
YunbiDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned

Installation

Manually, using the supplied setup.py file:

python3 setup.py install

or via pip

pip install BitEx

Footnotes

  1. This table considers standardized methods only, when describing the state. See section Standardized Methods for more 2

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Feb 19, 2022. It is now read-only.

Repository files navigation

BitEx

BitEx is a collection of API Clients for Crypto Currency Exchanges.

It comes with two parts - bitex.api represents the base level API interfaces, on top of which the second part - bitex.interfaces - builds upon. bitex.api classes can be used without making use of the interface classes.

Donations welcome! BTC @ 3D4yuyf84eQUauyZLoQKyouPuThoxMMRZa

State


RESTAPI : Completed

WSSAPI : BETA

Interfaces : WIP


Supported Exchanges

ExchangeAPIAuthenticationPublic Endpoints*1Private Endpoints1FormattersTests
BitfinexDoneDoneDoneDoneWIPWIP
BitstampDoneDoneDoneDoneWIPWIP
BittrexDoneDoneDoneDoneWIPWIP
BterDoneBETADoneDoneWIPWIP
C-CexDoneBETADoneDoneWIPWIP
CoinCheckDoneDoneDoneDoneWIPWIP
CryptopiaDoneBETADoneDoneWIPWIP
GDAXDoneBETADoneDoneWIPWIP
GeminiDoneBETADoneDoneWIPWIP
HitBtcDoneBETADoneDoneWIPWIP
itBitDoneBETADoneDoneWIPWIP
KrakenDoneDoneDoneDoneWIPWIP
OkCoinDoneBETADoneDoneWIPWIP
PoloniexDoneDoneDoneDoneWIPWIP
QuoineDoneBETADoneDoneWIPWIP
QuadrigaCXDoneBETADoneDoneWIPWIP
TheRockTradingDoneBETADoneDoneWIPWIP
YunbiDoneBETADoneDoneWIPWIP
VaultoroDoneBETADoneDoneWIPWIP

Additional clients will be added to (or removed from) this list, according to their liquidity and market volume.

bitex.api.REST

Classes found in bitex.api.REST provide wrapper classes and methods for Python's requests module, including handling of each exchange's specific authentication procedure.

An example:

frombitex.api.RESTimportKrakenRESTk=KrakenREST()
k.load_key('kraken.key') # loads key and secret from given file;# Query a public endpointk.query('GET','public/Depth', params={'pair': 'XXBTZUSD'})
# Query a private (authenticated) endpointq= {'pair': 'XXBTZUSD', 'type': 'sell', 'ordertype': 'limit', 'price': 1000.0,
'volume': 0.01, 'validate': True}
k.query('POST','private/AddOrder', authenticate=True, params=q)

Example .key file:

>>>dummy.key
my_api_key
my_fancy_api_secret

If the api requires further details, for example a userid or account number (for example for bitstamp), you should check the class method's doc string, although usually this information needs to go after the api key and secret, on a separate line each.

>>>dummy2.key
my_api_key
my_fancy_api_secret
Userid
accountname

bitex.api.WSS

bitex.api.WSS offers Queue()-based Websocket interface for a select few exchanges. The classes found within are very basic, and subject to further development. Private endpoints and trading are only sporadically implemented.

Their prime objective is to provide a raw, realtime interface to all of an exchange's Websocket endpoint.

Usage

from.bitex.api.WSSimportGeminiWSSimporttimewss=GeminiWSS()
wss.start()
time.sleep(5)
wss.stop()
whilenotwss.data_q.empty():
print(wss.data_q.get())

You can of course also access data_q while the WebSocket is still running (i.e. before calling stop()).

bitex.interfaces

Built on top of bitex.api's api classes are the slightly more sophisticated exchange interfaces in bitex.interfaces. These have been written to unify the diverse REST APIs of the implemented exchanges, by providing the same methods and method parameters across all of them (see next section, Standardized Methods, for more information).

For example, querying tickers looks the same on all exchanges, as well as placing an order, using bitex.interface:

frombiteximportKraken, Bitstamp, Geminik=Kraken(key_file='krkn.key')
b=Bitstamp(key_file='btst.key')
g=Gemini(key_file='gmni.key')
k.ticker('XBTUSD')
b.ticker('btceur')
g.ticker('BTC-USD')
k.ask(pair, price, size)
b.ask(pair, price, size)
g.ask(pair, price, size)

Standardized Methods

As explained in the previous section, standardized methods refer to the methods of each interface which have been deemed as part of the set of minimal methods and functions required to trade at an exchange via its API. They feature the following characteristics:

  • Each method has an identical method header across all interfaces
  • Its output is identical across all interfaces
  • Each method returns a bitex.api.response.APIResponse object; these behave like requests.Request objects, with the addition of a new attribute, formatted, which stores a standardized representation of the data queried.

bitex.formatters

This module provide formatters for the standardized methods, formatting their json output into a uniform layout. They are a work in progress feature.

Be mindful that, in order to provide a unified output format, some fields have been dropped in the formatted output! If you rely on one of these dropped fields, be sure to use the APIResponse's json attribute instead, and parse the json yourself:

frombiteximportKrakenk=Kraken()
response=k.ticker()
print(response.formatted) # show formatted dataprint(response.json()) # Returns all json data

The following is a table of all formatters currently implemented - any method not marked as Done will not do any formatting.

Exchangeticker()order_book()trades()bid()/ask()order()cancel_order()balance()withdraw()deposit()
BitfinexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BitstampDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BittrexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BterWIPWIPWIPWIPWIPWIPWIPWIPWIP
C-CexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
CoincheckDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
CryptopiaDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
GDAXDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
GeminiDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
HitBtcWIPWIPWIPWIPWIPWIPWIPWIPWIP
itBitDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
KrakenDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
OKCoinDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
PoloniexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
QuadrigaCXDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
QuoineDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
TheRockTradingLTDDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
VaultoroWIPWIPWIPWIPWIPWIPWIPWIPWIP
YunbiDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned

Installation

Manually, using the supplied setup.py file:

python3 setup.py install

or via pip

pip install BitEx

Footnotes

  1. This table considers standardized methods only, when describing the state. See section Standardized Methods for more 2

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Feb 19, 2022. It is now read-only.

Repository files navigation

BitEx

BitEx is a collection of API Clients for Crypto Currency Exchanges.

It comes with two parts - bitex.api represents the base level API interfaces, on top of which the second part - bitex.interfaces - builds upon. bitex.api classes can be used without making use of the interface classes.

Donations welcome! BTC @ 3D4yuyf84eQUauyZLoQKyouPuThoxMMRZa

State


RESTAPI : Completed

WSSAPI : BETA

Interfaces : WIP


Supported Exchanges

ExchangeAPIAuthenticationPublic Endpoints*1Private Endpoints1FormattersTests
BitfinexDoneDoneDoneDoneWIPWIP
BitstampDoneDoneDoneDoneWIPWIP
BittrexDoneDoneDoneDoneWIPWIP
BterDoneBETADoneDoneWIPWIP
C-CexDoneBETADoneDoneWIPWIP
CoinCheckDoneDoneDoneDoneWIPWIP
CryptopiaDoneBETADoneDoneWIPWIP
GDAXDoneBETADoneDoneWIPWIP
GeminiDoneBETADoneDoneWIPWIP
HitBtcDoneBETADoneDoneWIPWIP
itBitDoneBETADoneDoneWIPWIP
KrakenDoneDoneDoneDoneWIPWIP
OkCoinDoneBETADoneDoneWIPWIP
PoloniexDoneDoneDoneDoneWIPWIP
QuoineDoneBETADoneDoneWIPWIP
QuadrigaCXDoneBETADoneDoneWIPWIP
TheRockTradingDoneBETADoneDoneWIPWIP
YunbiDoneBETADoneDoneWIPWIP
VaultoroDoneBETADoneDoneWIPWIP

Additional clients will be added to (or removed from) this list, according to their liquidity and market volume.

bitex.api.REST

Classes found in bitex.api.REST provide wrapper classes and methods for Python's requests module, including handling of each exchange's specific authentication procedure.

An example:

frombitex.api.RESTimportKrakenRESTk=KrakenREST()
k.load_key('kraken.key') # loads key and secret from given file;# Query a public endpointk.query('GET','public/Depth', params={'pair': 'XXBTZUSD'})
# Query a private (authenticated) endpointq= {'pair': 'XXBTZUSD', 'type': 'sell', 'ordertype': 'limit', 'price': 1000.0,
'volume': 0.01, 'validate': True}
k.query('POST','private/AddOrder', authenticate=True, params=q)

Example .key file:

>>>dummy.key
my_api_key
my_fancy_api_secret

If the api requires further details, for example a userid or account number (for example for bitstamp), you should check the class method's doc string, although usually this information needs to go after the api key and secret, on a separate line each.

>>>dummy2.key
my_api_key
my_fancy_api_secret
Userid
accountname

bitex.api.WSS

bitex.api.WSS offers Queue()-based Websocket interface for a select few exchanges. The classes found within are very basic, and subject to further development. Private endpoints and trading are only sporadically implemented.

Their prime objective is to provide a raw, realtime interface to all of an exchange's Websocket endpoint.

Usage

from.bitex.api.WSSimportGeminiWSSimporttimewss=GeminiWSS()
wss.start()
time.sleep(5)
wss.stop()
whilenotwss.data_q.empty():
print(wss.data_q.get())

You can of course also access data_q while the WebSocket is still running (i.e. before calling stop()).

bitex.interfaces

Built on top of bitex.api's api classes are the slightly more sophisticated exchange interfaces in bitex.interfaces. These have been written to unify the diverse REST APIs of the implemented exchanges, by providing the same methods and method parameters across all of them (see next section, Standardized Methods, for more information).

For example, querying tickers looks the same on all exchanges, as well as placing an order, using bitex.interface:

frombiteximportKraken, Bitstamp, Geminik=Kraken(key_file='krkn.key')
b=Bitstamp(key_file='btst.key')
g=Gemini(key_file='gmni.key')
k.ticker('XBTUSD')
b.ticker('btceur')
g.ticker('BTC-USD')
k.ask(pair, price, size)
b.ask(pair, price, size)
g.ask(pair, price, size)

Standardized Methods

As explained in the previous section, standardized methods refer to the methods of each interface which have been deemed as part of the set of minimal methods and functions required to trade at an exchange via its API. They feature the following characteristics:

  • Each method has an identical method header across all interfaces
  • Its output is identical across all interfaces
  • Each method returns a bitex.api.response.APIResponse object; these behave like requests.Request objects, with the addition of a new attribute, formatted, which stores a standardized representation of the data queried.

bitex.formatters

This module provide formatters for the standardized methods, formatting their json output into a uniform layout. They are a work in progress feature.

Be mindful that, in order to provide a unified output format, some fields have been dropped in the formatted output! If you rely on one of these dropped fields, be sure to use the APIResponse's json attribute instead, and parse the json yourself:

frombiteximportKrakenk=Kraken()
response=k.ticker()
print(response.formatted) # show formatted dataprint(response.json()) # Returns all json data

The following is a table of all formatters currently implemented - any method not marked as Done will not do any formatting.

Exchangeticker()order_book()trades()bid()/ask()order()cancel_order()balance()withdraw()deposit()
BitfinexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BitstampDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BittrexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
BterWIPWIPWIPWIPWIPWIPWIPWIPWIP
C-CexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
CoincheckDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
CryptopiaDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
GDAXDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
GeminiDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
HitBtcWIPWIPWIPWIPWIPWIPWIPWIPWIP
itBitDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
KrakenDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
OKCoinDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
PoloniexDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
QuadrigaCXDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
QuoineDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
TheRockTradingLTDDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned
VaultoroWIPWIPWIPWIPWIPWIPWIPWIPWIP
YunbiDonePlannedPlannedPlannedPlannedPlannedPlannedPlannedPlanned

Installation

Manually, using the supplied setup.py file:

python3 setup.py install

or via pip

pip install BitEx

Footnotes

  1. This table considers standardized methods only, when describing the state. See section Standardized Methods for more 2

Releases

Packages

Used by

Contributors

Languages