From b31a76541c7712fd8b99e9d4f593798e425cad51 Mon Sep 17 00:00:00 2001 From: Alexander Leishman Date: Wed, 26 Feb 2014 23:48:23 -0800 Subject: [PATCH] updated readme --- README.md | 93 ++++++++++++++++++++++++++++++++++++++++-- kraken_ruby-0.2.1.gem | Bin 0 -> 22528 bytes 2 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 kraken_ruby-0.2.1.gem diff --git a/README.md b/README.md index edf94ff..ff48675 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,15 @@ PLEASE submit an issue or pull request if you notice any bugs, security holes, o ### Description -This gem is a wrapper for the [Kraken Digital Asset Trading Platform](https://www.kraken.com). +This gem is a wrapper for the [Kraken Digital Asset Trading Platform](https://www.kraken.com) API. Official documentation from Kraken can be found [here](https://www.kraken.com/help/api). -The current version (0.2.0) can only be used to query public and private market data. Private data requires use of your account API keys. +The current version (0.2.0) can be used to query public and private market data. Private data queries require use of your account API keys. -Below are the instructions for installing and using the gem. +### Pending Future Updates + +- Solid trade execution functionality +- More comprehensive test suite for methods requiring authentication (using VCR perhaps) +- More comprehensive documentation ## Installation @@ -98,10 +102,91 @@ Get spread data for a given asset pair ```ruby spread = kraken.spread('LTCXRP') ``` + +### Private Data Methods + +#### Balance + +Get account balance for each asset +Note: Rates used for the floating valuation is the midpoint of the best bid and ask prices + +```ruby +balance = kraken.balance +``` + +#### Trade Balance + +Get account trade balance + +```ruby +trade_balance = kraken.trade_balance +``` + +#### Open Orders + +```ruby +open_orders = kraken.open_orders +``` + +#### Query Orders + +See all orders + +```ruby +orders = kraken.query_orders +``` + +#### Trades History + +Get array of all trades + +```ruby +trades = kraken.trade_history +``` + +#### Query Trades + +**Input:** Comma delimited list of transaction (tx) ids + +```ruby +trades = kraken.query_trades(tx_ids) +``` + +#### Open Positions + +**Input:** Comma delimited list of transaction (tx) ids + +```ruby +positions = kraken.open_positions(tx_ids) +``` + +#### Ledgers Info + +```ruby +ledgers = kraken.ledgers_info +``` + +#### Ledgers Info + +**Input:** Comma delimited list of ledger ids + +```ruby +ledgers = kraken.query_ledgers(ledger_ids) +``` + +#### Trade Volume + +**Input:** Comma delimited list of asset pairs + +```ruby +asset_pairs = 'XLTCXXDG, ZEURXXDG' +volume = kraken.query_ledgers(asset_pairs) +``` + ## Contributing 1. Fork it 2. Create your feature branch (`git checkout -b my-new-feature`) 3. Commit your changes (`git commit -am 'Add some feature'`) 4. Push to the branch (`git push origin my-new-feature`) -5. Create new Pull Request +5. Create new Pull Request \ No newline at end of file diff --git a/kraken_ruby-0.2.1.gem b/kraken_ruby-0.2.1.gem new file mode 100644 index 0000000000000000000000000000000000000000..b263056513812ce51260dde75fbc5e85b3fa7e45 GIT binary patch literal 22528 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 literal 0 HcmV?d00001