Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expose rate limit state #292

Open
gcatlin opened this issue Jul 2, 2024 · 0 comments
Open

Expose rate limit state #292

gcatlin opened this issue Jul 2, 2024 · 0 comments
Labels
enhancement New feature or request

Comments

@gcatlin
Copy link
Contributor

gcatlin commented Jul 2, 2024

The SDK doesn't expose the http.Response object, so it's tricky to keep track of the rate limit state. Currently I’m logging that info using an http.RoundTripper, but it would be good to expose it in a simpler way; e.g., to display the rate limit state in a UI.

The simplest solution might be to add a callback field to alpaca.ClientOpts that is invoked on every request. It could take a http.Request and http.Response, or it could take a new object type that contains just the rate limit info from the response. Another option would be to use a resty.Client instead of a http.Client in the alpaca.Client.

My current work-around is to ensure I'm reserving some rate limit buffer when polling the broker API so that I never get a 429 when I need to place orders.

requestsPerTick := 4 // e.g. get account, positions, orders, fills every time we poll
pollingRate := (200.0 - 20.0) / 60.0 // 200 request per min rate limit - 20 requests per min buffer
pollingInterval := time.Duration(float64(time.Second) * float64(requestsPerTick) / pollingRate)
@gnvk gnvk added the enhancement New feature or request label Jul 9, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants