GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - Petersoj/alpaca-java: A Java library for the Alpaca brokerage platform providing access to stocks, options, crypto trading, and more.

BranchesTags
Open more actions menu

Latest commit

 

History

683 Commits
683 Commits

Folders and files

NameName
Last commit message
Last commit date
.codestyle
.codestyle
 
 
.github
.github
 
 
buildSrc
buildSrc
 
 
docs
docs
 
 
gradle/wrapper
gradle/wrapper
 
 
module
module
 
 
.gitignore
.gitignore
 
 
LICENSE.txt
LICENSE.txt
 
 
build.gradle.kts
build.gradle.kts
 
 
gradle.properties
gradle.properties
 
 
gradlew
gradlew
 
 
gradlew.bat
gradlew.bat
 
 
lombok.config
lombok.config
 
 
settings.gradle.kts
settings.gradle.kts
 
 

Repository files navigation



Logo



GitHub Repository GitHub Pages GitHub Discussions
Maven Central javadoc
Java Version License

Table of Contents

  • Introduction
  • Logging
  • Number Representation for Currency Values
  • ⚠️ WebSocket Support is Coming Soon ⚠️
  • Modules
    • Trading
      • Installation
      • Example
    • Market Data
      • Installation
      • Example
    • Broker
      • Installation
      • Example

Introduction

This project is a Java client library for the Alpaca API. Alpaca is a brokerage platform that lets you trade with algorithms, connect with apps, and build services all with a commission-free trading API for stocks, crypto, options, and more. This library uses the Alpaca OpenAPI Specifications to generate clients for the REST API and provides a custom implementation for WebSocket and SSE support. This library is community developed and if you have any questions, please ask them on GitHub Discussions, the Alpaca Slack #dev-alpaca-java channel, or on the Alpaca Forums.

Alpaca Java offers three modules: Trading, Market Data, and Broker.

Some awesome things about Alpaca Java:

  • Exhaustive Javadoc documentation
  • Uses Java's native HttpClient (which also enables you to provide a different HTTP client implementation)
  • Lightweight with minimal dependencies (only dependencies are: SLF4j, Guava, Jackson, MessagePack)
  • Releases are built directly from this source repository using GitHub Actions CI
  • Kotlin friendly
  • MIT licensed

Give this repository a star ⭐ and consider sponsoring ❤️

Logging

For logging, this library uses SLF4j which serves as an interface for various logging frameworks. This enables you to use whatever logging framework you would like. However, if you do not add a logging framework as a dependency in your project, the console will output a message stating that SLF4j is defaulting to a no-operation (NOP) logger implementation. To enable logging, add a logging framework of your choice as a runtime dependency to your project such as Logback, Log4j 2, SLF4j-simple, or Apache Commons Logging.

Number Representation for Currency Values

When working with currency values in computer memory, you may find yourself going back-and-forth between the Double and BigDecimal number representations. This is a common issue. Consider using the Num library to abstract this problem away as you develop your algorithmic trading application.

⚠️ WebSocket Support is Coming Soon ⚠️

Version 11 is a pre-release that provides the REST API and SSE support for the latest Alpaca OpenAPI specifications. WebSocket support for streaming market data and trade updates is coming soon. Previous versions had WebSocket support via OkHttp, but this library has switched to using Java's native HttpClient and WebSocket support is still a WIP.

Modules

Trading

This module is for the Alpaca brokerage platform Trading API.

Installation

For build.gradle.kts:

dependencies {
    implementation("net.jacobpeterson.alpaca-java:trading:11.0.0-pre.1")
}

For build.gradle:

dependencies {
    implementation 'net.jacobpeterson.alpaca-java:trading:11.0.0-pre.1'
}

For pom.xml:

<dependency>
    <groupId>net.jacobpeterson.alpaca-java</groupId>
    <artifactId>trading</artifactId>
    <version>11.0.0-pre.1</version>
</dependency>

Example

import net.jacobpeterson.alpacajava.common.ApiEnvironment;
import net.jacobpeterson.alpacajava.trading.TradingApi;
import net.jacobpeterson.alpacajava.trading.model.OrderSide;
import net.jacobpeterson.alpacajava.trading.model.OrderType;
import net.jacobpeterson.alpacajava.trading.model.PostOrderRequest;
import net.jacobpeterson.alpacajava.trading.model.TimeInForce;

import java.math.BigDecimal;

import static java.lang.Thread.sleep;
import static java.time.Duration.ofSeconds;
import static java.util.Objects.requireNonNull;

public class Launcher {

    static void main() throws Exception {
        final var keyID = "<your_key_id>";
        final var secretKey = "<your_secret_key>";
        final var apiEnvironment = ApiEnvironment.DEVELOPMENT; // or `PRODUCTION`
        final var tradingApi = new TradingApi(keyID, secretKey, apiEnvironment);

        // Print out account info
        System.out.println(tradingApi.accounts().getAccount());

        // Place a market order to buy one share of Apple
        final var openingOrder = tradingApi.orders()
                .postOrder(new PostOrderRequest()
                        .symbol("AAPL")
                        .qty("1")
                        .side(OrderSide.BUY)
                        .type(OrderType.MARKET)
                        .timeInForce(TimeInForce.GTC));
        System.out.println("Opening Apple order: " + openingOrder);

        // Wait for massive gains
        sleep(ofSeconds(10));

        // Close the Apple position
        final var closingOrder = tradingApi.positions()
                .deleteOpenPosition("AAPL", null, new BigDecimal("100"));
        System.out.println("Closing Apple order: " + closingOrder);

        // Wait for closing trade to fill. For this example, we're sleeping, but in production,
        // this should be done using polling or listening to the trade updates stream
        sleep(ofSeconds(10));

        // Print out the PnL of our Apple trade
        final var openFillPrice = tradingApi.orders()
                .getOrderByOrderID(requireNonNull(openingOrder.getId()), false)
                .getFilledAvgPrice();
        final var closeFillPrice = tradingApi.orders()
                .getOrderByOrderID(requireNonNull(closingOrder.getId()), false)
                .getFilledAvgPrice();
        System.out.println("PnL from Apple trade: " + new BigDecimal(requireNonNull(closeFillPrice))
                .subtract(new BigDecimal(requireNonNull(openFillPrice))));
    }
}

Market Data

This module is for the Alpaca brokerage platform Market Data API.

Installation

For build.gradle.kts:

dependencies {
    implementation("net.jacobpeterson.alpaca-java:market-data:11.0.0-pre.1")
}

For build.gradle:

dependencies {
    implementation 'net.jacobpeterson.alpaca-java:market-data:11.0.0-pre.1'
}

For pom.xml:

<dependency>
    <groupId>net.jacobpeterson.alpaca-java</groupId>
    <artifactId>market-data</artifactId>
    <version>11.0.0-pre.1</version>
</dependency>

Example

import net.jacobpeterson.alpacajava.common.ApiEnvironment;
import net.jacobpeterson.alpacajava.marketdata.MarketDataApi;
import net.jacobpeterson.alpacajava.marketdata.model.CryptoLatestLoc;
import net.jacobpeterson.alpacajava.marketdata.model.CryptoOrderbookEntry;
import net.jacobpeterson.alpacajava.marketdata.model.StockLatestFeed;

public class Launcher {

    static void main() throws Exception {
        final var keyID = "<your_key_id>";
        final var secretKey = "<your_secret_key>";
        final var apiEnvironment = ApiEnvironment.PRODUCTION; // or `DEVELOPMENT` for Broker Sandbox
        final var marketDataApi = new MarketDataApi(keyID, secretKey, apiEnvironment);

        // Print out the latest Tesla trade
        System.out.println(marketDataApi.stock()
                .stockLatestTradeSingle("TSLA", StockLatestFeed.IEX, null));

        // Print out the lowest Bitcoin ask price on the order book
        System.out.println("Bitcoin lowest ask price: " + marketDataApi.crypto()
                .cryptoLatestOrderbooks(CryptoLatestLoc.US, "BTC/USD").getOrderbooks().get("BTC/USD")
                .getA().stream()
                .map(CryptoOrderbookEntry::getP)
                .min(Double::compare)
                .orElseThrow());
    }
}

Broker

This module is for the Alpaca brokerage platform Broker API.

Installation

For build.gradle.kts:

dependencies {
    implementation("net.jacobpeterson.alpaca-java:broker:11.0.0-pre.1")
}

For build.gradle:

dependencies {
    implementation 'net.jacobpeterson.alpaca-java:broker:11.0.0-pre.1'
}

For pom.xml:

<dependency>
    <groupId>net.jacobpeterson.alpaca-java</groupId>
    <artifactId>broker</artifactId>
    <version>11.0.0-pre.1</version>
</dependency>

Example

import net.jacobpeterson.alpacajava.broker.BrokerApi;
import net.jacobpeterson.alpacajava.broker.BrokerApiUtil;
import net.jacobpeterson.alpacajava.broker.model.CreateOrderRequest;
import net.jacobpeterson.alpacajava.broker.model.OrderSide;
import net.jacobpeterson.alpacajava.broker.model.OrderType;
import net.jacobpeterson.alpacajava.broker.model.TimeInForce;
import net.jacobpeterson.alpacajava.common.ApiEnvironment;
import net.jacobpeterson.alpacajava.common.ApiHeader;
import net.jacobpeterson.alpacajava.common.sse.SseListenerAdapter;

import java.math.BigDecimal;
import java.util.UUID;

import static java.lang.Thread.sleep;
import static java.time.Duration.ofSeconds;

public class Launcher {

    static void main() throws Exception {
        final var authorizationToken = BrokerApiUtil.getAuthorizationToken("<your_api_key>", "<your_api_secret>");
        final var apiEnvironment = ApiEnvironment.DEVELOPMENT; // or `PRODUCTION`
        final var brokerApi = new BrokerApi(ApiHeader.AUTHORIZATION_BASIC_PREFIX + authorizationToken, apiEnvironment);

        // Listen to the trade events via SSE and print them out
        final var tradesStream = brokerApi.events()
                .subscribeToTradeV2SSE(null, null, null, null, new SseListenerAdapter<>());

        // Buy one share of GME for an account
        System.out.println(brokerApi.trading()
                .createOrderForAccount(UUID.fromString("<some_account_id>"), new CreateOrderRequest()
                        .symbol("GME")
                        .qty(BigDecimal.ONE)
                        .side(OrderSide.BUY)
                        .timeInForce(TimeInForce.GTC)
                        .type(OrderType.MARKET)));

        // Wait a little bit
        sleep(ofSeconds(10));

        // Close the SSE stream
        tradesStream.close();
    }
}

About

A Java library for the Alpaca brokerage platform providing access to stocks, options, crypto trading, and more.

petersoj.github.io/alpaca-java/

Topics

algorithmic-tradingalpacaalpaca-marketsalpaca-trading-apiapi-clientcryptojavamarket-dataoptionsquantitative-financestock-marketstocks

Resources

Readme
MIT license
Activity

Stars

255 stars

Watchers

18 watching

Forks

95 forks
Report repository

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.