Public/Cryptocurrency/Get-CMCStablecoins.ps1
function Get-CMCStablecoins { <# .SYNOPSIS Gets a list of stablecoin cryptocurrencies with latest market data. .DESCRIPTION The Get-CMCStablecoins cmdlet retrieves stablecoins from CoinMarketCap by filtering cryptocurrencies that are categorized as stablecoins. This is a convenience function that combines Get-CMCMap and Get-CMCQuotes to provide stablecoin-specific data. .PARAMETER Limit Optionally specify the number of results to return. Default: 20, Max: 100 .PARAMETER Convert Optionally calculate market quotes in up to 120 currencies at once. Default: USD .PARAMETER Sort What field to sort the list by. Valid values: market_cap, price, volume_24h, percent_change_24h Default: market_cap .PARAMETER SortDirection The direction in which to order stablecoins. Valid values: asc, desc Default: desc .EXAMPLE Get-CMCStablecoins Gets the top 20 stablecoins by market cap. .EXAMPLE Get-CMCStablecoins -Limit 10 -Convert "EUR","GBP" Gets the top 10 stablecoins with prices in EUR and GBP. .EXAMPLE Get-CMCStablecoins -Sort "volume_24h" -Limit 5 Gets the top 5 stablecoins by 24h trading volume. .OUTPUTS PSCustomObject[] Returns an array of stablecoin cryptocurrency objects with market data. .NOTES This function uses a known list of major stablecoins. For a comprehensive list, consider using the CoinMarketCap categories endpoint when it becomes available. #> [CmdletBinding()] [OutputType([PSCustomObject[]])] param( [Parameter()] [ValidateRange(1, 100)] [int]$Limit = 20, [Parameter()] [ValidateCount(1, 120)] [string[]]$Convert = @('USD'), [Parameter()] [ValidateSet('market_cap', 'price', 'volume_24h', 'percent_change_24h')] [string]$Sort = 'market_cap', [Parameter()] [ValidateSet('asc', 'desc')] [string]$SortDirection = 'desc' ) begin { Write-Verbose "Getting stablecoin listings from CoinMarketCap" # Well-known stablecoin symbols $stablecoinSymbols = @( 'USDT', # Tether 'USDC', # USD Coin 'BUSD', # Binance USD 'DAI', # Dai 'TUSD', # TrueUSD 'USDP', # Pax Dollar 'USDD', # USDD 'GUSD', # Gemini Dollar 'FRAX', # Frax 'LUSD', # Liquity USD 'USTC', # TerraClassicUSD 'FEI', # Fei USD 'SUSD', # sUSD 'CUSD', # Celo Dollar 'HUSD', # HUSD 'RSV', # Reserve 'EURS', # STASIS EURO 'EURT', # Euro Tether 'USDN', # Neutrino USD 'MIM', # Magic Internet Money 'USDX', # USDX 'VAI', # Vai 'TRIBE', # Tribe 'UST', # TerraUSD 'USDS', # USDS 'PYUSD', # PayPal USD 'FDUSD', # First Digital USD 'EUROC', # Euro Coin 'USDJ', # JUST Stablecoin 'HAY', # Hay Stablecoin 'ZUSD', # ZUSD 'MUSD', # mStable USD 'CEUR', # Celo Euro 'MAI', # MAI 'DUSD', # DefiChain USD 'XAI', # XAI Stablecoin 'RAI', # Rai Reflex Index 'DOLA', # DOLA 'USDB', # USDB 'USDH', # USDH 'GHO', # GHO 'MKUSD', # Maker USD 'CRVUSD' # Curve USD ) } process { try { # Get quotes for stablecoin symbols $params = @{ Symbol = $stablecoinSymbols[0..([Math]::Min($Limit - 1, $stablecoinSymbols.Count - 1))] Convert = $Convert } Write-Verbose "Fetching quotes for stablecoins: $($params.Symbol -join ', ')" $stablecoins = Get-CMCQuotes @params if (-not $stablecoins) { Write-Warning "No stablecoin data retrieved" return } # Convert to array if single object if ($stablecoins -isnot [array]) { $stablecoins = @($stablecoins) } # Sort the results $sortProperty = switch ($Sort) { 'market_cap' { "${Convert[0]}_market_cap" } 'price' { "${Convert[0]}_price" } 'volume_24h' { "${Convert[0]}_volume_24h" } 'percent_change_24h' { "${Convert[0]}_percent_change_24h" } } $sorted = if ($SortDirection -eq 'desc') { $stablecoins | Sort-Object -Property $sortProperty -Descending } else { $stablecoins | Sort-Object -Property $sortProperty } # Output limited results $sorted | Select-Object -First $Limit | ForEach-Object { # Add custom type for stablecoin formatting $_.PSObject.TypeNames.Insert(0, 'PsCoinMarketCap.Stablecoin') Write-Output $_ } } catch { Write-Error "Failed to get stablecoin listings: $_" } } end { Write-Verbose "Get-CMCStablecoins completed" } } |