Functions/UserData/Get-KETradeVolume.ps1

function Get-KETradeVolume {
    <#
    .SYNOPSIS
    Retrieves trade volume data for a specific currency pair from the Kraken Exchange API.
 
    .DESCRIPTION
    The Get-KETradeVolume function retrieves trade volume data for a specific currency pair from the Kraken Exchange API.
    It requires an API key and API secret, which can be either passed as parameters or retrieved from environment variables.
    If the API secret is not provided, it will attempt to retrieve it by calling the Connect-KExchange function.
 
    .PARAMETER ApiKey
    The API key for the Kraken Exchange API. If not provided, it will attempt to retrieve it from the 'KE_API_KEY' environment variable.
 
    .PARAMETER ApiSecret
    The encoded API secret for the Kraken Exchange API. If not provided, it will attempt to retrieve it by calling the Connect-KExchange function.
 
    .PARAMETER Pair
    The currency pair for which to retrieve trade volume data. Must be in the format "XXXXXX". Defaults to "XBTUSD".
 
    .EXAMPLE
    PS C:\> Get-KETradeVolume -ApiKey "myApiKey" -ApiSecret "encoded_myApiSecret" -Pair "ETHUSD"
    Retrieves trade volume data for the ETH/USD currency pair using the specified API key and API secret.
 
    .LINK
    For more information, see the Kraken API documentation:
    https://docs.kraken.com/rest/#tag/User-Data/operation/getTradeVolume
 
    .NOTES
    The KrakenExchange PowerShell module is not affiliated with or endorsed by Kraken exchange.
    Author: wnapierala [@] hotmail.com, chatGPT
    Date: 04.2023
    #>
    
    [CmdletBinding()]
    param (
        [Parameter()]
        [ValidatePattern("[A-Z]")]
        [string]$Pair = "XBTUSD",

        [Parameter(Mandatory = $false)]
        [string]$ApiKey = ([Environment]::GetEnvironmentVariable('KE_API_KEY', 'user')),

        [Parameter(Mandatory = $false)]
        [string]$ApiSecret = ([Environment]::GetEnvironmentVariable('KE_API_SECRET', 'user'))
    )

    # Check if ApiSecret is provided or needs to be retrieved
    if (-not $ApiSecret) {
        Disconnect-KExchange
        Connect-KExchange
        $ApiKey = ([Environment]::GetEnvironmentVariable('KE_API_KEY', "User"))
        $ApiSecretEncoded = $ApiSecret = ([Environment]::GetEnvironmentVariable('KE_API_SECRET', "User"))
    }
    else {
        $ApiSecretEncoded = $ApiSecret
    }

    # Define User-Agent header
    $UserAgent = "Powershell Module KrakenExchange/1.0"

    # Define API endpoint and version
    $endpoint = "https://api.kraken.com"
    $TradeVolumeMethod = "/0/private/TradeVolume"
    $TradeVolumeUrl = $endpoint + $TradeVolumeMethod

    # Generate nonce for API request
    $nonce = [Math]::Round((New-TimeSpan -Start "1/1/1970").TotalMilliseconds)

    # Define parameters for API request
    $TradeVolumeParam = [ordered]@{
        "nonce" = $nonce
        "pair"  = $Pair
    }

    # Generate signature for API request
    $signature = Set-KESignature -Payload $TradeVolumeParam -URI $TradeVolumeMethod -ApiSecret $ApiSecretEncoded

    # Define headers for API request
    $TradeVolumeHeaders = @{ 
        "API-Key"    = $apiKey; 
        "API-Sign"   = $signature; 
        "User-Agent" = $useragent
    }

    # Send API request and retrieve response
    $TradeVolumeResponse = Invoke-RestMethod -Uri $TradeVolumeUrl -Method Post -body $TradeVolumeParam -Headers $TradeVolumeHeaders
    
    if ($TradeVolumeResponse.error -contains "EAPI:Invalid key") {
        [Environment]::SetEnvironmentVariable("KE_API_KEY", "", "User")
        Connect-KExchange
    }

    # Return the response
    return $TradeVolumeResponse
}