or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

docs

account.mdcore.mdhelpers.mdindex.mdmarket-data.mdtrading.md
tile.json

tessl/pypi-oandapyv20

Python wrapper for the OANDA REST-V20 API enabling programmatic access to forex and CFD trading

Workspace
tessl
Visibility
Public
Created
Last updated
Describes
pypipkg:pypi/oandapyv20@0.7.x

To install, run

npx @tessl/cli install tessl/pypi-oandapyv20@0.7.0

index.mddocs/

oandapyV20

Python wrapper for OANDA REST-V20 API providing programmatic forex and CFD trading access.

Package: oandapyV20 | Install: pip install oandapyV20

Quick Start

from oandapyV20 import API
from oandapyV20.endpoints.accounts import AccountDetails
from oandapyV20.endpoints.orders import OrderCreate
from oandapyV20.endpoints.pricing import PricingInfo
from oandapyV20.contrib.requests import MarketOrderRequest

# Initialize client
api = API(access_token="token", environment="practice")

# Get account
account_id = api.request(AccountList())['accounts'][0]['id']
account = api.request(AccountDetails(accountID=account_id))['account']

# Get pricing
prices = api.request(PricingInfo(accountID=account_id,
                                 params={"instruments": "EUR_USD"}))['prices']

# Create order
order_data = MarketOrderRequest(instrument="EUR_USD", units=1000).data
response = api.request(OrderCreate(accountID=account_id, data=order_data))

Core Imports

# Client
from oandapyV20 import API
from oandapyV20.exceptions import V20Error, StreamTerminated

# Endpoints
from oandapyV20.endpoints.accounts import AccountList, AccountDetails, AccountSummary, AccountInstruments, AccountConfiguration, AccountChanges
from oandapyV20.endpoints.orders import OrderCreate, OrderList, OrdersPending, OrderDetails, OrderReplace, OrderCancel, OrderClientExtensions
from oandapyV20.endpoints.trades import TradesList, OpenTrades, TradeDetails, TradeClose, TradeClientExtensions, TradeCRCDO
from oandapyV20.endpoints.positions import PositionList, OpenPositions, PositionDetails, PositionClose
from oandapyV20.endpoints.pricing import PricingInfo, PricingStream
from oandapyV20.endpoints.transactions import TransactionList, TransactionDetails, TransactionIDRange, TransactionsSinceID, TransactionsStream
from oandapyV20.endpoints.instruments import InstrumentsCandles, InstrumentsOrderBook, InstrumentsPositionBook
from oandapyV20.endpoints.forexlabs import Calendar, HistoricalPositionRatios, Spreads, CommitmentsOfTraders, OrderbookData, Autochartist

# Request builders
from oandapyV20.contrib.requests import (
    MarketOrderRequest, LimitOrderRequest, StopOrderRequest, MITOrderRequest,
    TakeProfitOrderRequest, StopLossOrderRequest, TrailingStopLossOrderRequest,
    TakeProfitDetails, StopLossDetails, TrailingStopLossDetails,
    PositionCloseRequest, TradeCloseRequest, ClientExtensions
)

# Definitions
from oandapyV20.definitions.orders import OrderType, TimeInForce, OrderPositionFill, OrderState, OrderTriggerCondition
from oandapyV20.definitions.instruments import CandlestickGranularity, PriceComponents
from oandapyV20.definitions.trades import TradeState, TradePL
from oandapyV20.definitions.primitives import InstrumentType, Direction

# Types
from oandapyV20.types import AccountID, DateTime, Units, PriceValue

# Utilities
from oandapyV20.contrib.factories import InstrumentsCandlesFactory
from oandapyV20.contrib.generic import secs2time, granularity_to_time

Architecture

Request Pattern: api.request(Endpoint(params)) -> dict

Components:

  • API Client: Manages authentication and HTTP communication
  • Endpoints: Classes representing API operations (GET/POST/PUT)
  • Request Builders: Helper classes for order/trade request bodies
  • Definitions: Constants for API parameters
  • Types: Validation classes for data formatting

Key Patterns

Order with Exit Levels

from oandapyV20.contrib.requests import MarketOrderRequest, TakeProfitDetails, StopLossDetails

order = MarketOrderRequest(
    instrument="EUR_USD",
    units=1000,
    takeProfitOnFill=TakeProfitDetails(price=1.1200).data,
    stopLossOnFill=StopLossDetails(price=1.0900).data
).data
api.request(OrderCreate(accountID=account_id, data=order))

Stream Real-Time Prices

stream = PricingStream(accountID=account_id, params={"instruments": "EUR_USD"})
for update in api.request(stream):
    if update['type'] == 'PRICE':
        print(f"Bid: {update['bids'][0]['price']}, Ask: {update['asks'][0]['price']}")

Large Historical Data

from oandapyV20.contrib.factories import InstrumentsCandlesFactory

params = {"from": "2023-01-01T00:00:00Z", "to": "2023-12-31T23:59:59Z", "granularity": "H1"}
all_candles = []
for endpoint in InstrumentsCandlesFactory("EUR_USD", params):
    all_candles.extend(api.request(endpoint)['candles'])

Documentation Structure

  • Core - API client, authentication, error handling
  • Trading - Orders, trades, positions
  • Market Data - Pricing, instruments, candles
  • Account - Account operations, transactions
  • Helpers - Request builders, types, utilities, definitions