* Bump CI versions
* Specifically set go version as 1.17.x bumps it to 1.18
* Another
* Adjust AppVeyor
* Part 1 of linter issues
* Part 2
* Fix various linters and improvements
* Part 3
* Finishing touches
* Tests and EqualFold
* Fix nitterinos plus bonus requester jobs bump for exchanges with large number of tests
* Fix nitterinos and bump golangci-lint timeout for AppVeyor
* Address nits, ensure all books are returned on err due to syncer regression
* Fix the wiggins
* Fix duplication
* Fix nitterinos
* implements futures functions and GRPC functions on new branch
* lint and test fixes
* Fix uneven split pnl. Adds collateral weight test. docs. New clear func
* Test protection if someone has zero collateral
* Uses string instead of double for accuracy
* Fixes old code panic
* context, match, docs
* Addresses Shazniterinos, var names, expanded tests
* Returns subaccount name, provides USD values when offlinecalc
* Fixes oopsie
* Fixes cool bug which allowed made up subaccount results
* Subaccount override on FTX, subaccount results for collateral
* Strenghten collateral account info checks. Improve FTX test
* English is my first language
* Fixes oopsies
* Fixes for unrealised PNL & collateral rendering
* Fixes lint and tests
* Shaznit fixes
* Secret Shaznit
* Updates account information across wrappers to include more fields
* Updates online collateral calculations. Updates RPC data
* Accurately calculates collateral offline and online minus testing
* Tests and lint chocolate
* Simplifies accountinfo results
* Fixes shaznits
* Adds new func
* Increases collateral accuracy again again again x 200
* Increases accuracy of collateral rendering
* Fixes minor merge/test issues
* Linterino
* Fixes ws test. Improves collateral calculations and rendering
* Make it prettier
* Removes the lock I put on 👀
* Adds `additional_collateral_used` field, renders orig currency
* Fixes unrelated test
* Fix test
* Correctly calculate spot margin borrow collateral
* Address fun lint surprise
See https://github.com/golangci/golangci-lint/issues/741#issuecomment-1017014331
* Strange lint fixing x2
* Continued lint journey
* Nolint the nolint to not lint the lint
* Adds two new fields to response
* More linting issues arising
* fIX3s_c4s|NG
* Fixes command flags' incorrect numbering
* FairMarket = Won
* golangci-lint/CI: Bump versions
Fix remaining linter issues
* Specifically set AppVeyor version
* Fix the infamous typos 👀
* Add go env cmd to AppVeyor
* Add go version cmd to AppVeyor
* Specify AppVeyor image, adjust linters
* Update go get to go install due to deprecation
* Bump golangci-lint timeout time for AppVeyor
* Change NW contract to NQ
* Address nitters
* GetRandomPair -> Pair{}
* Address nits
* Address time nitterinos plus additional tweaks
* More time inception upgrades!
* Bending time and space
* gct: phase one context awareness pass
* exchanges: context propagation pass
* common/requester: force context requirement
* gctcli/exchanges: linter fix
* rpcserver: fix test using dummy rpc server
* backtester: fix comments
* grpc: add correct cancel and timeout for commands
* rpcserver_test: add comment on dummy server
* common: deprecated SendHTTPGetRequest
* linter: fix
* linter: turn on no context check
* apichecker: fix context linter issue
* binance: use param context
* common: remove checks as this gets executed before main
* common: change mutex to RW as clients can be used by multiple go routines.
* common: remove init and JIT default client. Unexport global variables and add protection.
* common: Add comments
* bithumb: after dinner mints fix
* golangci: Enable err checking linter to expose unchecked errors.
* gct: handle errors across the board
* gct: handle errors NOTE: Found bug in FTX (WIP)
* linter: fix issues
* ftx/exchanges: fix bug where error was being returned when setting pair management variables to an already enabled state
* bitmex: fix bug where a dangly supported asset in config danglied up the place.
* linter: fix more linter issues
* linter: fix my terrible spelling.
* currency: fix test
* exchanges: fix tests
* logger: fix test
* exchanges: fix tests
* glorious: nits
* vm: revert rm variable and instigate test
* requester: defer execution of request.Item generation in closure.
* bithumb: fix issue
* coinut/itbit: fix linter issues
* binance: fix bug on recvWindow setting
* requester: standardize sendpayload + add readme update
* nonce: remove inc() function
* request: defer unlockiflocked
* binance: revert changes for open orders
* btcmarkets: defer auth generation functionality, rm context deadline as this will be created just before sending HTTP request.
* binance: move const to top
* exmo: remove debug output as its generated in the requester function
* ftx: defer auth functionality
* requester: move error to top
* bittrex: defer auth functionality
* bitmex: defer auth functionality and remove deadline as generation occurs after rate limiting.
* btse: defer auth functionality
* coinbasepro: defer auth functionality and removed context deadline as this is generated after rate limiting
* coinbene: defer auth functionality and remove context deadline as this is generated after rate limiting
* huobi: defer auth functionality and remove context deadline as this is generated after rate limiting
* huobi-futures: defer auth functionality and remove context deadline as this is generated after rate limiting
* kraken: defer auth functionality and remove context deadline as this is generated after rate limiting
* kraken: remove deadline protection for timestamp generation
* okgroup: defer auth functionality and remove context deadline as this is generated after rate limiting
* poloniex: defer auth functionality
* zb: defer auth functionality and remove context deadline as this is generated after rate limiting
* exchanges: clean up log output which are done and inspected in the requester package
* binance: fix path bug on every retry, rm timeout context as this is not needed
* coinbene: fix path bug on retry
* binance: consolidate functionality
* coinbene: fix linter issues
* poloniex: linter fix
* kraken: change add -> set
* bitstamp: fix path bug for retry
* BTSE: fix retry path bug
* coinbene: fix path bug whoopsie by me
* gateio: fix bug where on retry it does not reset reader
* localbitcoins: fix path bug on retry
* zb: change domain to land
* exchanges: make sure io.Reader is generated every request
* exchanges: move reader generation into function scope
* wrapper_issues: setup exchange manager
* engine: expand withdraw manager test
* engine: dont look for environment
* bitstamp: fix pathing bug (@thrasher-)
* engine/withdraw_manager: purge tests as this is covered in repository withdraw
* Initial codes for a trade tracker
* Moving everything in a broken fashion
* Removes tradetracker. Removes some errors for subsystems
* Cleans up some subsystems, renames stuttering types. Removes some global Bot usage
* More basic subsystem renaming and file moving
* Removes engine dependency from events,ntpserver,ordermanager,comms manager
* Exports eventManager, fixes rpcserver. puts rpcserver back for now
* Removes redundant error message, further removes engine dependencies
* experimental end of day interface usage
* adds ability to build the application
* Withdraw and event manager handling
* cleans up apiserver and communications manager
* Cleans up some start/setup processes. Though should separate
* More consistency with Setup Start Stop IsRunning funcs
* Final consistency pass before testing phase
* Fixes engine tests. Fixes stop nil issue
* api server tests
* Communications manager testing
* Connection manager tests and nilsubsystem error
* End of day currencypairsyncer tests
* Adds databaseconnection/databaseconnection_test.go
* Adds withdrawal manager tests
* Deposit address testing. Moved orderbook sync first as its more important
* Adds test for event manager
* More full eventmanager testing
* Adds testfile. Enables skipped test.
* ntp manager tests
* Adds ordermanager tests, Extracts a whole new subsystem from engine and fanangles import cycles
* Adds websocket routine manager tests
* Basic portfolio manager testing
* Fixes issue with currency pair sync startup
* Fixes issue with event manager startup
* Starts the order manager before backtester starts
* Fixes fee tests. Expands testing. Doesnt fix races
* Fixes most test races
* Resolves data races
* Fixes subsystem test issues
* currency pair syncer coverage tests
* Refactors portfolio. Fixes tests. Withdraw validation
Portfolio didn't need to exist with a portfolio manager. Now the porfolio manager
is in charge how the portfolio is handled and all portfolio functions are attached
to the base instead of just exported at the package level
Withdrawal validation occurred at the exchange level when it can just be run at the
withdrawal manager level. All withdrawal requests go through that endpoint
* lint -fix
* golang lint fixes
* lints and comments everything
* Updates GCT logo, adds documentation for some subsystems
* More documentation and more logo updates
* Fixes backtesting and apiserver errors encountered
* Fixes errors and typos from reviewing
* More minor fixes
* Changes %h verb to %w
* reverbs to %s
* Humbly begins reverting to more flat engine package
The main reasoning for this is that the subsystem split doesn't make sense
in a golang environment. The subsystems are only meant to be used with engine
and so by placing them in a non-engine area, it does not work and is
inconsistent with the rest of the application's package layout.
This will begin salvaging the changes made by reverting to a flat
engine package, but maintaining the consistent designs introduced.
Further, I will look to remove any TestMains and decrease the scope
of testing to be more local and decrease the issues that have been
caused from our style of testing.
* Manages to re-flatten things. Everything is within its own file
* mini fixes
* Fixes tests and data races and lints
* Updates docs tool for engine to create filename readmes
* os -> ioutil
* remove err
* Appveyor version increase test
* Removes tCleanup as its unsupported on appveyor
* Adds stuff that I thought was in previous merge master commit
* Removes cancel from test
* Fixes really fun test-exclusive data race
* minor nit fixes
* niterinos
* docs gen
* rm;rf test
* Remove typoline. expands startstop helper. Splits apiserver
* Removes accidental folder
* Uses update instead of replace for order upsert
* addresses nits. Renames files. Regenerates documentation.
* lint and removal of comments
* Add new test for default scenario
* Fixes typo
* regen docs
* End of day commit moving packages and setting foundation into how trade processing will go
* Conformity
* tdd candle generation based on received trade data, renames orderbookbuffer back to buffer for now...
* Formalises test functions and designs the trade processor
* Theoretical amending old candles to allow any trades that were part of an old processed candle to be more accurate. Saving of candles will only occur on previous cycles, extending memory usage a bit longer
* Figures out sqlboiler for sqlite. Updates websocket entries to process trade data
* One more trade data
* Adds more exchange support
* Adds PSQL stuff
* Begins creating sql implementation
* End of day commit. Helper functions and understanding sql usage in GCT
* Adds delete and cleans up table design
* Finishes trades conceptually. Awaits candle data update in order to translate trades to candles
* Initial handling of trades in coinbene
* Proto
* Fixing of some bugs, attempting to address coinbene asset type ws issues
* Fixes up coinbene websocket implementation for the most part
* finalises coinbene websocket implementation. Adds new ability to parse currencies without a delimiter
* Implements rpc commands and adds testing
* updates the following to be compatible with trade data update: Theoretical amending old candles to allow any trades that were part of an old processed candle to be more accurate. Saving of candles will only occur on previous cycles, extending memory usage a bit longer
* Changes trade to be its own entity rather than attached to a websocket.
* Adds coverage to trades. Changes signature of `AddTradesToBuffer` to return error. Now automatically shuts down without need for channel listening. Will automatically start up again if it gets data
* Implements trade fetching at the wrapper level for a bunch of exchanges. Adds trade id to script updoot. Probably breaking change
* Implements trade fetching for all wrappers hurray hurrah. Updates all the tests
* Adds new interface func to get recent trades. Ensures GetExchangeHistory continues until conditions are met
* Adds new readme, tests all new wrapper endpoints, updates exchange_wrapper_issues to test new endpoints. Updates exchange_wrapper_coverage with new coverage... Fixes lame bug causing wrapper tests to fail from being poorly setup. Adds loopy loop to ensure that all data is captured when requesting exchange history
* Bugfix on psql migrations. Rebases latest changes, updates table design to use base and quote, updates trades to use exchange_name_id
* Adds new config field for saving trades to the database per exchange. Now exits trade processing when trade saving is not enabled. Similarly for wrapper, does not save if not enabled
* Minor bitfinex trade fixes. continues on buffer processing errors, now saves transactionid to the db
* Adds support for generating candles from candlesextended. May extend it further, idk
* Updates trade candles to be able to fill missing data with trades. Adds more tests. Also does a thing where you can forcefully override a candle based on internal trade data instead of API data
* Fixes bug where force deletions did not follow up with insertions. Adds force to candle commands
* Fixes specific exchange based issues. Extends recent trades to 24 hours where possible
* Fixes issue with saved tests. Fixes tests for trades. Adds parallel to tests. Pre-fixes people's nits
* Adds new GRPC functions to find out what data is missing from trades and candles. Fixes some assumptions from missing period code.
* Adds unique constraint. Fixes up niggling issues for wrappers and websockets
* Fixes issues with using unix times in the database trying to retrieve data via the CLI. Reduces save time to 15 seconds
* Updates trades to use timestamps instead of int64 unix
* Adds missing FTX wrapper implementation. Regens docs
* Linting the linters. Updating readme
* Adds new command to set whether an exchange can process trades
* Doc update
* Adds recent trades and historic trade endpoints to grpc
* formats pair_test.go to appease linter gods
* Addresses data race. Removes logging of missing intervals on unrelated function (now that it has its own rpc command). The buffer time isnt customisable, but I don't feel it needs to be at a config level at all really.
* Fixes a few niterinos regarding spacing, type conversion, a weird Bitmex 0 trade value error, unsubscriptions and cli command references
* Reduces map lookups. Adds base func and moves wrappers to use it
* Uses better currency formatter. Adds time based validation to trade history. Reverts configtest.json
* Reverts config and updates test names. Also WAYYYYY LESS SPAMMY
* oopsie doopsie missed a whoopsie
* mint flavoured lint
* Fixes issues caused by rebase
* Fixes issue with timestamps not converting properly from command to RPCServer. Adds new error type. Adds shorthand entries to some commands. Removes os.Exit from tests. Makes Gemini test rolling. Adds enabled exchange check to RPC function. Escapes timestamp on bitstamp. Renames var
* fixes whoopsie oopsie doopsie I forgot to remove code shoopsie
* missed a line
* 🎉🎉 :tada:Breaks everything in an end of day commit 🎉🎉🎉
* Modifies function 'createlocaloffset' to return a string instead. Uses strings for all time based start and end commands. Uses UTC times in RPC server and updates SQLITE to use formatted time based queries
* Adds concurrency-safe way of changing SaveTradeData and checking it. Fixes embarrassing typo
* End of day fix, adds bitfinex update to loop until either the return trades shows no new dates, or meets specifications. Fixes egregious typo
* Improves testing and handling of historical trades function
* Fixes tests after latest changes
* Fix potential fatal err now that db is enabled in test config now
* Fixes up some database settings to use a local engine instead of global var
* DELICIOUS LINT CHOCOLATE FIXES
* Fixes data race by slashing competitor's tyres
* Adds mock test fixes to allow for live and stored data test
* Removes verbosity in engine level tests. Adds new timezone format to highlight the timezone for RPC functions. Removes reference to Preix index fund
* Oopsie doopsie, fixed a whoopsie
* Loggers can no longer do data drag races on my lawn 👴
* Removes bad lock
* Addresses command nits. End of day conceptual commit, trying to calculate spans of time in the context of missing periods. Tests will fail
* Adds new stream response for retrieving trade history as it can take time to do. Unsuccessfully attempts to simplify time range calculation for missing trades response
* Adds new timeperiods package to calculate time periods, time ranges and whether data is in those ranges. Removes kline basic implementation of same concept
* Fixes lint issues. Fixes test. Moves trade cli commands to their own trade subcommands
* Updates lakebtc to no longer have gethistorictrades as it is unsupported. Adds more validation to rpc functions
* Removes requirement to have trades when testing trade wrapper functions. Doesn't really prove it works if there are no trades for a given currency in a time period.
* Addresses nits, runs linting fix and ensures a test is consistent
* Fix merge issues
* Moves sort to timeperiods. Adds test coverage. Fixes typo
* Removes log package in CLI
* Fixes `GetTrades` url
* Reorders all instances of validation occuring after settingup RPC connection
* Fixes test to ensure that it is setup before testing that it is setup
* Fixed issue with bool retrieval. Removes double append
* Fixes Binance times, fixes bitfinex sell sides, fixes huobi times, sorts all responses
* Fixes poloniex trade id consistency. Makes recent trade for poloniex consistent with others (15 minutes). Fixes coinbene. Fixes localbitcoins to use quote currency. Fixes coinut times. Updates huobi trade id, saves okgroup trades. Fixes bid and ask to buy and sell
* Removes websocket trades for lakebtc as it did not meet our requirements for processing. Adds new constraints to the database to ensure we have uniqueness on trades where ID doesn't exist and doesn't trigger errors for trades where the tid does
* Fixes migration for postgres to downscale properly
* Really really fixes the psql index changes
* Fixes broken tests
* Now with working tests and no pocket lint
* Makes the side column nullable with no more constraint for it. adds migrations and runs generation. comments lakebtc
* Lint & Sprüngli
* Updates zb to use more appropriate side
* Fixes oopsie
* Attempts to address a data race from globals
* Fixes build
* Fixes missed regen rpc files
* Updates readme to point to trade readme. Fixes exchange_wrapper_coverage wrapper count and untested panics, tests bitfinex funding pair test for `fUSD`, adds shiny new param `tradeprocessinginterval`
* mint flavoured lint
* Uses the real default to set the default value by default
* Fixes some extra tests surrounding email sending and number incompatibility
* Reverts test config
* re-adds gom2/usdt currency
* Fixes typo, don't look!
* Fixes minor codelingo pickups
* Adds more precision to handling of trade data from Kraken. Expands test
* interface christmas tree
* lint
* implemented binance and bitfinex GetHistoricCandles wrapper methods)
* coinbene supported added
* after and before clean up
* gateio wrapper completed
* merged upstream/master
* Added bsaic KlineIntervalSupported() method
* Converted binance fixed test
* WIP
* new KlineConvertToExchangeStandardString method added
* end of day WIP
* WIP
* end of day WIP started migration of trade history
* added kline support to hitbtc huobi lbank
* added exchangehistory to all supported exchanges started work on coinbase 300 candles/request method
* end of day WIP
* removed unused ta and misc changes to flag ready for review
* yobit cleanup
* revert coinbase changES
* general code clean up and added zb support
* poloniex support added
* renamed method to FormatExchangeKlineInterval other misc fixes
* linter fixes
* linter fixes
* removed verbose
* fixed poloniex test coverage
* revert poloniex mock data
* regenerated poloniex mock data
* a very verbose clean up
* binance mock clean up
* removed unneeded t.Log()
* setting verbose to true to debug CI issue
* first pass changes addressed
* common.ErrNotYetImplemented implemented :D
* comments added
* WIP-addressed exchange requests and reverted previous GetExchangeHistory changes
* WIP-addressed exchange requests and reverted previous GetExchangeHistory changes
* increased test coverage added kraken support
* OKGroup support completed started work on address GetExchangeHistory feedback and migrating to own PR under https://github.com/xtda/gocryptotrader/tree/exchange_history
* convert zb ratelimits
* gofmt run on okcoin
* increased delay on rate limit
* gofmt package
* fixed panic with coinbene and bithumb if conversion fails
* very broken end of day WIP
* added support for GetHistoricCandlesEx to coinbase and binance
* gofmt package
* coinbase, btcmarkets, zb ex wrapper function added
* added all exchange support for ex regenerated mock data
* update bithumb to return wrapper method
* gofmt package
* end of day started work on changes
* reworked test coverage added okgroup support general fixes/change requests addressed
* Added OneMonth
* limit checks on supportedexchanges
* reverted getexchangehistory
* reworked binance tesT
* added workaround for kraken panic
* renamed command to extended removed interval check on non-implemented commands
* added wrapperconfig back
* increased test coverage for FormatExchangeKlineInterval
* WIP
* increased test coverage for FormatExchangeKlineInterval bitfinex/gateio/huobi
* linter fixes
* zb kraken lbank coinbene btcmarkets support added
* removed verbose
* OK group support for other asset types added
* swapped margin to use spot endpoint
* index support added test coverage added for asset types
* added asset type to okcoin test
* gofmt
* add asset to extended method
* removed verbose
* add support for coinbene swap increase test coverage
* removed verbose
* small clean up of okgroup wrapper functions
* verbose to troubleshoot CI issues
* removed verbose
* added error check reverted coinbasechanges
* readme updated
* removed unused start/finish started work on decoupling api requests from kline package
* restructured coinbene, bithumb methods, added bitstamp support
* kraken time fix
* BTCMarkets restructure
* typo fix
* removed test for futures due to contact changing
* added start/end date to extended method over range
* converted to assettranslator
* removed verbose
* removed invalid char
* reverted incorrectly removed return
* added import
* further template updates
* macos hates my keyboard :D
* misc canges
* x -> i
* removed verbose
* updated fixCasing to allocate var before checks
* removed time conversion
* sort all outgoing kline candles
* fixCasing fix
* after/before checks added
* added parallel to test
* logic check on BTCmarkets
* removed unused param, used correct iterator
* converted HitBTC to use time.Time
* add iszero false check to candle times
* updated resultlimit to 5000
* new line added
* added comment to exported const
* use configured ratelimit
* fixed pair for test
* panic fixed WIP on fixCasing
* fixCasing rework, started work on readme docs
* enable rate limiter for wrapper issues tool
* docs updated
* removed err from return and formatted currency
* updated Yobit supported status
* Updated HitBTC to use onehour candles due to test exeuction times
* added further details to gctcli output
* added link to docs
* added link to tempalte
* disable FTX websocket in config_example
* fix poloneix
* regenerated poloniex mock data
* removed recording flag
Refactoring the timeout retries into a more general 'retry policy' with
support for retrying on HTTP 429 (Too Many Requests) and other responses
with a `Retry-After` header
The delay between requests is controlled by a combination of a 'backoff'
(currently only a simple linear backoff), and honouring the
`Retry-After` value (longest delay wins)
This makes the 'rate limiter' an optional argument as well, removing the
use of `nil` when one isn't supplied
Signed-off-by: David Ackroyd <daveo.ackroyd@gmail.com>
* renamed package to log to stop side import requirement
* reverted comment changes
* reverted comment changes
* one more reverting wording back to logger
* wording changes on comments
* Initial rework of rework of requester - WIP
* Implementing and checking rate limits - WIP
* implemented coinbene rate limiting shenanigans
* add in remaining WIP
* fixy
* use authenticated rate limit
* drop ceiling as this can be done with a counter later
* add functionality to struct
* purge config options for rate limiting so as to keep things minimal
* prepare futures and swap rate limiting for implementation
* Address linter issues
* Addressed nits, fixed race
* fix linter issue
* remove global var as this was only setting when newrequester was called
* moved rate limit functionality into its own file
* Update Bitfinex with correct rate limit and test endpoints (WIP)
* finish off bitfinex adjustments
* fixes
* fix linter issues
* slowed rate for coinbasepro
* drop rate limit for huobi as the doc times have intermittent 429 issues.
* Set MACOSX_DEPLOYMENT_TARGET to remove linking warning
* Addr Thrasher nits
* Addr glorious nits
* unexport do request function
* fixed nitorinos
* Fixed something I missed
* move disabled rate limiter into loadexchange and use interface functionality
* Add temp quick fix
* GCTCLI param and linter fixes
* Linter fixes
* Add more basic validation and address codelingo nits
* Add arg number support to cancelOrder and more validity checks
* initial wiring to providegethistoricalcandles
* initial wiring to providegethistoricalcandles
* initial wiring to providegethistoricalcandles
* gethistriccandles work from cli using hard coded inputs
* gethistoriccandles RPC service and CLI working fine for coinbasepro
* fixed unit test
* input check on grpc for gethistoriccandles
* updated deps
* fixed the return value when a method is not yet implemented
* code review: fixed CLI input check and int32->int64
* code review: handling wrong exchange name
* added check on granularity and allowing start and end being empty
* code review: removed currency2
* code review: dependency reverted
* improved func comment
* typo in func comment
* get historic values tests
* unit tests for get historical rates on coinbasepro
* using time format time.RFC3339
* names to camel case and improved comments
* test cleanup
* changed to camel case
* added InArray tests
* dropped not needed string time
* enforced use of int64
* fixed make check
* cleaned up code organisation to be consistent
* fixed Travis remarks
* more Travis remarks
* added comments
* regenerated proto files after merge
* linter fix
* drop common uuid v4 func and imported package as needed
* removed common functions regarding json marshal and unmarshal and used the json package directly. WRT unmarshal it was calling reflect and converted to string which is also checked in the JSON package so it was doing a double up, this will be a tiny gain as it was directly used in the requester package for all our outbound requests.
* add in string
* explicitly throw away return error value
* atleast return the error that websocket initialise returns
* return error when not connected
* fix comment
* Adds comments
* move package declarations
* drop append whenever we call supported
* remove unused import
* Change incorrect spelling
* fix tests
* fix go import issue
* Establishes new websocket functionality. Begins the creation of the websocket request
* Adding a wrapper over gorilla websocket connect,send,receive to handle ID messages. Doesn't work
* Successfully moved exchange_websocket into its own wshandler namespace. oof
* Sets up ZB to use a round trip WS request system
* Adds Kraken ID support to subscriptions. Renames duplicate func name UnsubscribeToChannels to RemoveSubscribedChannels. Adds some helper methods in the WebsocketConn to reduce duplicate code. Cleans up ZB implementation
* Fixes double locking which caused no websocket data to be read. Fixes requestid for kraken subscriptions
* Completes Huobi and Hadax implementation. Extends ZB error handling. Adds GZip support for reading messages
* Adds HitBTC support. Adds GetCurrencies, GetSymbols, GetTrades WS funcs. Adds super fun new parameter to GenerateMessageID for Unix and UnixNano
* Adds GateIO id support
* Adds Coinut support. Prevents nil reference error in constatus when there isnt one
* Standardises all Exchange websockets to use the wshandler websocket. Removes the wsRequestMtx as wshandler handles that now. Makes the Dialer a dialer, its not externally referenced that I can see.
* Fixes issue with coinut implementation. Updates bitmex currencies. Removes redundant log messages which are used to log messages
* Starts testing. Renames files
* Adds tests for websocket connection
* Reverts request.go change
* Linting everything
* Fixes rebase issue
* Final changes. Fixes variable names, removes log.Debug, removes lines, rearranges test types, removes order correlation websocket type
* Final final commit, fixing ZB issues.
* Adds traffic alerts where missed. Changes empty struct pointer addresses to nil instead. Removes empty lines
* Fixed string conversion
* Fixes issue with ZB not sending success codes
* Fixes issue with coinut processing due to nonce handling with subscriptions
* Fixes issue where ZB test failure was not caught. Removes unnecessary error handling from other ZB tests
* Removes unused interface
* Renames wshandler.Init() to wshandler.Run()
* Updates template file
* Capitalises cryptocurrencies in struct. Moves websocketResponseCheckTimeout and websocketResponseMaxLimit into config options. Moves connection configuration to main exchange Setup (where appropriate). Reverts currencylastupdated ticks. Improves reader close error checking
* Fixes two inconsistent websocket delay times
* Creates a default variable for websocket ResponseMaxLimit and ResponseCheckTimeout, then applies it to setdefaults and all tests
* Updates exchange template to set and use default websocket response limits
* First pass at adding new logging system
* NewLogger
* NewLogger
* WIP
* silly bug fix
* :D removed files
* removed old logging interface
* added tests
* added tests
* Started to add new lines to all f calls
* Added subsystem log types
* Logger improvements
* Further performance improvements
* changes to logger and sublogger creation
* Renamed Logging types
* removed old print statement
* changes based on feedback
* moved sublogger types to own file
* :)
* added console as output type
* added get level command
* added get/set log level via grpc command
* added check for output being empty for migration support
* first pass at log rotation
* added log rotation
* :D derp fixed
* added tests
* changes based on feedback
* changed log type
* comments
* renamed file -> fileSettings
* typo fix
* changes based on feedback
* gofmt ran on additional files
* gofmt ran on additional files
* First pass adding DumpResponse
* WIP
* Added httpDebug flag to SendPayload
* anx -> coinbase converted
* HTTPDebug flag added to all exchanges
* Updated Alphapoint:
* reworded error message
* Corrected itbit and huobihadax sendpayload
* Removed setting of default value
* don't return body for response as we already get this in verbose mode
* body is now included based on verbose setting
* WIP
* Due to issues with DumpResponse and gzip decoding use raw response from exchange for body output Also adds gzip decoding back as bug fix for OK group exchange
* removed additional new line
* Added URL path to dumpbody display as well
* Updates nonce generation to adhere to fifo channel buffer before request executes by routine
* removed unused variables, lns etc
* Fix requested changes and added in timer that disengages lock if out of scope error occurs
* Fixed woopsy daisy issue
* Add benchmark, reduce time in force to unlock before stack insertion, add nil check for edge case
* Remove unusued waitgroup field
* use return nonce.Value and method, rm redundant nonce code, fix tests.
* Fix linter issue: unnecessary conversion
* Really basic getSimulated fee function everywhere
* Worst case fees for all exchanges
* Adds tests, fixes comment spacing. Adds wrapper logic. Makes test api key var name consistent. Removes some okcoin ETT tests
* Removes redundant functions
* linting issues. Fixes introduces huobi issues
* More linting
* Stops trying to hide ETT problems, uses iota
* Skips ETT tests for now
* Updated SetAPIURL() & UpdateConfig() to use pointers
* Withdraw functions now take a pointer to withdrawrequest struct
* Fund Withdraw is now a pointer
* Moved GetFee functions to use a pointer due to large size of feebuilder struct
* OrderCancellation usage converted to pointer due to size of struct
* merged up upstream/master and changes made to OKgroup code
* GetOrdersRequest usage converted to a pointer
* okgroup pointer migration
* reverted golangci config back to master
* removed old anx benchmark typo
* Initial currency overhaul before service system implementation
* Remove redundant currency string in orderbook.Base
Unexport lastupdated field in orderbook.Base as it was being instantiated multiple times
Add error handling for process orderbook
* Remove redundant currency string in ticker.Price
Unexport lastupdated field in ticker.Price
Add error handling for process ticker function and fix tests
* Phase Two Update
* Update translations to use map type - thankyou to kempeng for spotting this
* Change pair method name from Display -> Format for better readability
* Fixes misspelling and tests
* Implement requested changes from GloriousCode
* Remove reduntant function and streamlined return in currency_translation.go
* Revert pair method naming conventions
* Change currency naming conventions
* Changed code type to exported Item type with underlying string to reduce complexity
* Added interim orderbook process method to orderbook.Base type
* Changed feebuilder struct field to currency.Pair
* Adds fall over system for backup fx providers
* deprecate function and children and fix linter issue with btcmarkets
* Fixed requested changes
* Fix bug and move mtx for rates
* Fixed after rebase oopsies
* Fix linter issues
* Fixes race conditions in testing functions
* Final phase coinmarketcap update
* fix linter issues
* Implement requested changes
* Adds configuration variables to increase/decrease time durations between updating currency file and fetching new currency rates
* Add a collection of tests to improve codecov
* After rebase oopsy fixes for btse
* Fix requested changes
* fix after rebase oopsies and add more efficient comparison checks within currency pair
* Fix linter issues
* Added new base logger
* updated example and test configs
* updated exchange helpers restful router & server
* logPath is now passed to the logger to remove dependency on common package
* updated everything besides exchanges to use new logger
* alphapoint to bitmex done
* updated bitmex bitstamp bittrex btcc and also performance changes to logger
* btcmarkets coinbase coinut exmo gateio wrappers updated
* gateio and gemini logger updated
* hitbtc huobi itbit & kraken updated
* All exchanges updatd
* return correct error for disabled websocket
* don't disconnect client on invalid json
* updated router internal logging
* log.Fatal to t.Error for tests
* Changed from fatal to error failure to set maxprocs
* output ANSI codes for everything but windows for now due to lack of windows support
* added error handling to logger and unit tests
* clear wording on print -> log.print
* added benchmark test
* cleaned up import sections
* Updated logger based on PR requests (added default config options on failure/setting errors)
* ah this should fix travici enc config issue
* Load entire config and clear out logging to hopefully fix travisci issue
* wording & test error handling
* fixed formatting issues based on feedback
* fixed formatting issues based on feedback
* changed CheckDir to use mkdirall instead of mkdir and other changes based on feedback
* Changes method signature for cancelling all orders (experitmental). Implements cancelAllOrders wrapper for alphapoint, anx, binance
* Implements cancel all wrapper for bitfinex, bitmex, bitstamp, bittrex, btcmarkets, coinbasepro and hilariously coinut
* Changes method signature to only use one OrderCancellation type. Adds support for Exmo, gateio, gemini, itbit, lakebtc
* Adds/updates support for hitbtc, huobi, hadax, itbit and kraken
* Adds support for liqui, localbitcoins, okcoin, poloniex, wex and yobit. Splits up open order methods for poloniex
* Adds bithumb, okex and zb support. BTCC for another PR
* Updates bitflyer, bithumb, bitmex, coinut, okex and zb cancelAllOrders method to cancel via enabled currency pairs rather than a singular currency
* Adds tests to all exchanges to test wrapper function CancelAllOrders
* Fixes OKEX and huobi, btcmarkets, kraken, okCoin cancel order implementations
* Fixes coinut, hitbtc and okex api for authenticated requests
* Fixes comment and spacing
* Changes the CancelAllOrders signature to return orderids and errors along with a generic error.
* Fixes OKEX delimiter
* Removes spacing and test verbosity
* Removes more spacing
* Removes space
* Fixes okex rebasing issue. Also makes the maps instead of assuming they just work
* Added untested [cloudflare issue] changes to accountinfo for ANX
* Add alphapoint comment for future implementation
* Adds GetAccountInfo for Binance
* Adds GetAccountInfo update for Bithumb
* Updates GetAccountInfo for GateIO.
Adds error handling feature for authenticated requests.
* Updates GetAccountInfo function for Huobi.
Adds function for getting account ID.
* Updates GetAccountInfo function
Adds GetAccountID function
* Updates GetAccountInfo [un-tested, no access to keys at this time]
* Updates GetAccountInfo for Kraken
* Updates GetAccountInfo func for OKEX
* Updates GetAccountInfo for exchange ZB
* Updates GetAccountInfo func for Bitmex
* Updates GetAccountInfo func for Coinut
* Updates GetAccountInfo for ANX exchange
* Fixes incorrect hold currency issue
* Fixes type name
* Fixes issue with unneeded code in wrapper for Bithumb
* Change strings to type symbol string
* Fixes nit for Gateio
* Fixes GetAccountInfo issue
Fixes SpotCancelOrder issue
* Initial broken commit for updating exchanges to store data on whether withdrawals can be handled completely by the API
* Changes to use base exchange method to determine withdrawal permissions using bitshifting
* Adds withdrawal capabilities for alphapoint, anx, binance, bitfinex, bitflyer, bithumb, bitmex, bitstamp, bittrex exchanges
* Adds withdraw capabilities for btcmarkets, coinbasepro, coinut, exmo, gateio, gemini, hitbtc, huobi, hadax
* Adds withdraw capabilities for itbit, kraken, lakebtc, liqui, localbitcoins, okcoin, okex, poloniex, wex, yobit, zb
* Titillating tests & Wonderful wrappers
* Fixes typo, double checks all apis and corrects permissions
* Fixes gemini test
* Fixes incorrect log placement. Removes breaks
* Addresses PR comments. Changes readable function to: FormatWithdrawPermissions, adds new function 'GetWithdrawPermissions' and 'SupportsWithdrawPermissions'. Adds three functions to interface
* Removes unnecessary config_example.json additions
* Fixes bitwise comparisons. Adds more tests to highlight expected outcomes
* Adds some constants for fee types
Adds some fee calculation in an attempt to be generic
Adds fee stuff to Bittrex
Adds fee stuff to bitstamp
* Fixes bitstamp fee calculation
* Tests
Tests all scenarios for GetFeeByType
* Adds method to wrapper
Adds err to response
Checks for err
* Adds support for Bittrex fees
* Adds maker/taker dynamic to fees
Updates tests
Adds bitmex fee support
Removes unused switch case scenarios to not waste space
* Adds bithumb support for fee calculation
* Adds Bitfinex fee support
Adds list of currencies as const strings
Sets up bitflyer
* Fixes arguments
* Greatly expands symbols
Adds Binance fee calculation support
Cleans up previous exchanges
* Fixes errors for fee calculations
* Adds ANX fee support
* Adds btcc fee support
Adds alphapoint fee wrapper support
Renames method to match "enum"
Uses symbols in tests, not inline strings
* Adds support for BTCMarkets fee calculation
Adds new method to retrieve fee amount from BTCMarkets
Adds new fee type struct: FeeBuilder
Updates ANX and BTCMarkets to use new FeeBuilder type struct
Standardises the tests to run when it comes to fee calculation
* Migrates all existing exchange fee to use new feebuilder type struct
Uses standard testing model
* Fixes unit tests
* Updates maker taker fees in test config
* Removes parallel from fee testing
* Removes more parallel from tests
* Adds coinbasepro fee support
* Adds Coinut fee support
* Adds Exmo fee support
Adds maker fee support to coinut
Introduces a type for fees and bank transfers to prevent random strings being used
* Adds partial bitflyer support
Moves bitflyer to feeBuilder struct
* Adds gateio fee support
* Adds Gemini fee support
* Adds hitbtc fee support
* Adds huobi fee support
* Adds HuobiHadax fee support
* Adds itbit fee support
* Adds partial kraken fee support with trading fees
* Finishes basic Kraken fee support
* Adds basic LakeBTC fee support
* Adds basic liqui fee support
* Adds localbitcoins fee support.......
* Adds basic okcoin fee support
* Adds simple OKEX fee support
Adds many new currency symbols
Fixes liqui's fees
* Adds poloniex fee support
* Adds fee support for Yobit
* Adds WEX fee support
* Adds ZB fee support
* Removes bad reference
* Improves accuracy of variable name
* trading fee method names are now consistent
(cherry picked from commit 21c82e8b90cae590cfd73d365d7be39e1a00e973)
* Fixes rebasing issues
* Fixes issues from rebase
Removes "IsTaker" as IsMaker bool can imply taker
Updates tests to actually work.
* Adds a zero to the test
* Fixes bitfinex api endpoints and fixes fee calculations
* Updates btcmarkets trading fee calculation
* Verifies tests with apis for all exchanges except coinbasepro, itbit and bitflyer
Removes taker fee test as taker is default
* Removes redundant all exchange wrapper error checks due to the error checks being redundant
* Addresses review comments:
- Renames variables
- Changes how functions return data
- Fixes typo
* Initial overhaul of websocket connection and feeds
* Added proxy support
* Piped to routines.go
* Added new websocket file in exchanges
Refactored orderbook handling into exchange_websocket.go
Added better error responses for binance_websocket.go
General clean for binance_websocket.go
* General fixes - bitfinex_websocket.go
Refactored orderbook cache code - bitfinex_websocket.go
Removed fatal error with unhandled type - routines.go
* Added general improvements to bitmex_websocket.go
Refactored orderbook handling to exchange_websocket.go
Added variable in Item struct in orderbook.go for looking up orders by ID
* Fix issue when routines are blocked due to Data Handler not started
Updated traffic handler
General fixes for bitstamp_websocket.go
* General fixes for coinbasepro_websocket.go
* General fixes for coinut_websocket.go
Fixed error return in exchange_websocket.go
* Removed comments in coinut_wrapper.go
Refactor orderbook logic from hitbtc_websocket.go to exchange_websocket.go
* General fixes
* Removed comments
General fixes
* Updated routines.go
* After rebase fix
* Fixed update config pairs in okcoin.go
* fixed config currency issue in okcoin.go for okcoin China
* exchange_websocket.go
*Removed unused const dec
*Removed state change routine
*Improved trafficMonitor routine
*Increased verbosity for error returns
*Removed uneeded mutex locks
exchange_websocket_test.go
*Added new tests for websocket and orderbook updating
routines.go
*Removed string cased
* Fixed race conditions on sync.waitgroup in exchanges_websocket.go
* Changes variable name in config.go
* Removes unnecessary comment
* Removes indefinite lock on error return
* Removes unnecessary comment
* Adds support for BTCC websocket
Drops support for BTCC REST
* Rewords comment in exchange_websocket.go
Moves types to poloniex_types.go
* Moves types to coinut_types.go
* Removes uneeded range for accessing array variables for coinbase_websocket.go
Removes comments in coinut_types.go
* Adds verbosity flag to GCT
Suppresses verbose output from routines.go
* Fixes setting proxy for REST and Websocket per exchange
Upgrades error handling
Drops unused *url.Url variable in exchange type
* Adds test for setting proxy
* Fixes bug that closes connection due to incorrect timeout time through a proxy connection
* Clarify verbose flag message
- Modifications made to the request package. Planned improvements will be
sending requests on intervals, rate limiter back off support, dynamic tuning
and requests packaged into a request job group.
- Can modify each exchanges individual HTTP client (e.g timeout and
transport settings).
- Bot now uses an exchange config HTTP timeout value.
- Bot now uses a global HTTP timeout (configurable).
- Batched ticker request support for exchanges.
- Ticker and Orderbook fetching now are spanned accross multiple
go routines and regulated by a sync wait group.
- Fixes hack used to load exchanges, now uses a sync wait group.
- Ticker and Orderbook storage and fetching now uses mutex locks.
- New pair function for finding different pairs between two supplied
pair arrays. This is used for currency pair updates for exchange which
support dynamic updating.
- Shows removal/additions of dynamic updates currencies.