Fetches detailed market information for the specified market epic(s) from the IG API using the `/markets` endpoint (version 2). Returns instrument details, dealing rules, and snapshot data.
Arguments
- epics
Character vector. One or more market epics (e.g., "CS.D.USDCHF.MINI.IP" or c("CS.D.USDCHF.MINI.IP", "CS.D.EURUSD.MINI.IP")).
- auth
List. Authentication details from
ig_auth.- detailed
Logical. Whether to return detailed info (instrument and dealing rules) or snapshot data only. Defaults to TRUE.
- mock_response
List or data frame. Optional mock response for testing, bypassing the API call.
- verbose
Logical. Whether to print the raw API response for debugging. Defaults to FALSE.
Value
A list with market details, including nested columns: `instrument` (e.g., epic, currencies, marginDepositBands), `dealingRules` (e.g., minStepDistance, minDealSize), and `snapshot` (e.g., marketStatus, bid, offer, high, low).
Examples
if (FALSE) { # \dontrun{
# Authenticate with IG API
auth <- ig_auth(
username = Sys.getenv("IG_SERVICE_USERNAME"),
password = Sys.getenv("IG_SERVICE_PASSWORD"),
api_key = Sys.getenv("IG_SERVICE_API_KEY"),
acc_type = Sys.getenv("IG_SERVICE_ACC_TYPE"),
acc_number = Sys.getenv("IG_SERVICE_ACC_NUMBER")
)
# Example 1: Fetch details for a single epic
markets <- ig_get_markets_by_epic("CS.D.USDCHF.MINI.IP", auth)
print(markets)
# Expected output: A tibble with 1 row and 3 columns (instrument, dealingRules, snapshot)
# Example 2: Fetch details for multiple epics
markets <- ig_get_markets_by_epic(c("CS.D.USDCHF.MINI.IP", "CS.D.EURUSD.MINI.IP"), auth)
print(markets)
# Expected output: A tibble with 2 rows and 3 columns
# Example 3: Fetch snapshot data only (no instrument or dealingRules)
markets <- ig_get_markets_by_epic("CS.D.USDCHF.MINI.IP", auth, detailed = FALSE)
print(markets)
# Expected output: A tibble with 1 row and 1 column (snapshot)
# Example 4: Fetch with verbose output for debugging
markets <- ig_get_markets_by_epic("CS.D.USDCHF.MINI.IP", auth, verbose = TRUE)
print(markets)
# Expected output: Prints raw JSON response, followed by a tibble with 1 row and 3 columns
} # }
# Example 5: Use a mock response for testing
mock_response <- list(
marketDetails = list(
list(
instrument = list(
epic = "CS.D.USDCHF.MINI.IP",
name = "USD/CHF Mini",
currencies = list(list(code = "CHF",
symbol = "SF",
baseExchangeRate = 0.08467604,
isDefault = FALSE)),
marginDepositBands = list(
list(min = 0, max = 124, margin = 3.33, currency = "CHF"),
list(min = 124, max = 310, margin = 3.33, currency = "CHF")
),
marginFactor = 3.33,
marginFactorUnit = "PERCENTAGE"
),
dealingRules = list(
minStepDistance = list(unit = "POINTS", value = 1.0),
minDealSize = list(unit = "POINTS", value = 0.1)
),
snapshot = list(
marketStatus = "TRADEABLE",
bid = 0.79715,
offer = 0.79739,
high = 0.79888,
low = 0.79512,
updateTime = "2025/09/29 18:40:51",
binaryOdds = NA,
decimalPlacesFactor = 5,
scalingFactor = 10000
)
)
)
)
markets <- ig_get_markets_by_epic("CS.D.USDCHF.MINI.IP", auth = NULL, mock_response = mock_response)
print(markets)
#> # A tibble: 1 × 3
#> instrument dealingRules snapshot
#> <list> <list> <list>
#> 1 <named list [6]> <named list [2]> <named list [9]>
# Expected output: A tibble with 1 row and 3 columns (instrument, dealingRules, snapshot)