Habilitando o ciclo de vida de risco dos serviços financeiros com o Azure e REnabling the financial services risk lifecycle with Azure and R

Cálculos de riscos são fundamentais em vários estágios do ciclo de vida de operações chave de serviços financeiros.Risk calculations are pivotal at several stages in the lifecycle of key financial services operations. Por exemplo, uma forma simplificada do ciclo de vida de gerenciamento de produtos de seguro pode ser semelhante ao diagrama a seguir.For example, a simplified form of the insurance product management lifecycle might look something like the diagram below. Os aspectos do cálculo de risco são mostrados em texto azul.The risk calculation aspects are shown in blue text.

Um cenário em uma empresa de mercados de capital pode ter esta aparência:A scenario in a capital markets firm might look like this:

Nesses processos, há necessidades comuns em torno da modelagem de risco, incluindo:Through these processes there are common needs around risk modelling including:

  1. A necessidade de experimentação ad hoc relacionada a riscos por analistas de risco, atuários em uma seguradora ou analistas quantitativos em uma empresa de mercados de capital.The need for ad-hoc risk-related experimentation by risk analysts; actuaries in an insurance firm or quants in a capital markets firm. Esses analistas normalmente trabalham com as ferramentas de código e de modelagem populares em seus domínios: R e Python.These analysts typically work with code and modelling tools popular in their domain: R and Python. Muitos currículos universitários incluem treinamento em R ou Python em cursos de matemática financeira e MBA.Many university curriculums include training in R or Python in mathematical finance and in MBA courses. As duas linguagens oferecem uma ampla variedade de bibliotecas de software livre que dão suporte a cálculos de riscos populares.Both languages offer a wide range of open source libraries which support popular risk calculations. Juntamente com as ferramentas apropriadas, os analistas muitas vezes exigem acesso a:Along with appropriate tooling, analysts often require access to:

    a.a. Dados de preço de mercado precisos.Accurate market pricing data.

    b.b. Dados de apólices e sinistros existentes.Existing policy and claims data.

    c.c. Dados existentes de posição no mercado.Existing market position data.

    d.d. Outros dados externos.Other external data. As fontes incluem dados estruturados, como tabelas de mortalidade e dados de preços competitivos.Sources include structured data such as mortality tables and competitive pricing data. Fontes menos tradicionais, como clima, notícias e outros também podem ser usados.Less traditional sources such as weather, news and others may also be used.

    e.e. Capacidade computacional para permitir investigações de dados rápidas e interativas.Computational capacity to enable quick interactive data investigations.

  2. Eles também usar algoritmos de aprendizado de máquina ad hoc para determinar preços ou a estratégia de mercado.They may also make use of ad-hoc machine learning algorithms for pricing or determining market strategy.

  3. A necessidade de visualizar e apresentar dados para uso no planejamento de produtos, na estratégia comercial e em discussões semelhantes.The need to visualize and present data for use in product planning, trading strategy, and similar discussions.

  4. A execução rápida de modelos definidos, configurados pelos analistas, para definição de preços, avaliações e risco de mercado.The rapid execution of defined models, configured by the analysts, for pricing, valuations, and market risk. As avaliações usam uma combinação de modelagem de risco dedicada, ferramentas de risco de mercado e código personalizado.The valuations use a combination of dedicated risk modelling, market risk tools, and custom code. A análise é executada em um lote com diferentes cálculos noturnos, semanais, mensais, trimestrais e anuais que geram picos nas cargas de trabalho.The analysis is executed in a batch with varying nightly, weekly, monthly, quarterly, and annual calculations generating spikes in workloads.

  5. A integração dos dados com outras medidas de risco amplas empresariais para relatórios de risco consolidados.The integration of data with other enterprise wide risk measures for consolidated risk reporting. Em organizações maiores, estimativas de risco de nível inferior podem ser transferidas para uma ferramenta de modelagem e relatórios de risco empresarial.In larger organizations lower level risk estimates may be transferred to an enterprise risk modelling and reporting tool.

  6. Os resultados devem ser relatados em um formato definido no intervalo necessário para atender aos requisitos normativos e de investidores.Results must be reported in a defined format at the required interval to meet investor and regulatory requirements.

A Microsoft dá suporte às necessidades acima por meio de uma combinação de serviços do Azure e de ofertas de parceiros no Azure Marketplace.Microsoft supports the above concerns through a combination of Azure services and partner offerings in the Azure Marketplace. Neste artigo, mostraremos exemplos práticos de como fazer a experimentação ad hoc usando R. Começamos explicando como executar o experimento em um único computador, em seguida, mostramos como executar o mesmo experimento no Lote do Azure e encerramos mostrando como tirar proveito de serviços externos em nosso processo de modelagem.In this article, we show practical examples of how to perform ad-hoc experimentation using R. We begin by explaining how to run the experiment on a single machine, then show how to run the same experiment on Azure Batch, and close by showing how to take advantage of external services in our modelling. As opções e considerações para a execução de modelos definidos no Azure são descritas nestes artigos focados nos setores bancário e de seguros.Options and considerations for the execution of defined models on Azure are described in these articles focused on banking and insurance.

Analista fazendo modelagem em RAnalyst Modelling in R

Vamos começar examinando como o R pode ser usado por um analista em um cenário de mercados de capital simplificado e representativo.Let's start by looking at how R may be used by an analyst in a simplified, representative capital markets scenario. Você pode fazer isso fazendo referência a uma biblioteca de R existente para o cálculo ou escrevendo o código do zero.You can build this either by referencing an existing R library for the calculation or by writing code from scratch. Em nosso exemplo, também precisamos buscar dados externos de preços.In our example, we also must fetch external pricing data. Para manter o exemplo simples, mas ilustrativo, podemos calcular a PFE (exposição potencial futura) de um contrato de ações patrimoniais.To keep the example simple but illustrative, we calculate the potential future exposure (PFE) of an equity stock forward contract. Este exemplo evita técnicas complexas de modelagem quantitativa para instrumentos como derivativos complexos e se concentra em um único fator de risco para se concentrar no ciclo de vida de risco.This example avoids complex quantitative modelling techniques for instruments like complex derivatives and focuses on a single risk factor to concentrate on the risk life cycle. Nosso exemplo faz o seguinte:Our example does the following:

  1. Seleciona um instrumento de interesse.Select an instrument of interest.

  2. Obtém preços históricos do instrumento.Source historic prices for the instrument.

  3. Modela o preço da ação com um cálculo MC (Monte Carlo) simples, que usa GBM (Movimento Browniano Geométrico):Model equity price by simple Monte Carlo (MC) calculation, which uses Geometric Brownian Motion (GBM):

    a.a. Estima o retorno esperado μ (mu) e a volatilidade σ (teta).Estimate expected return μ (mu) and volatility σ (theta).

    b.b. Calibra o modelo de dados históricos.Calibrate the model to historic data.

  4. Visualiza os vários caminhos para comunicar os resultados.Visualize the various paths to communicate the results.

  5. Representa em gráfico max(0,Stock Value) para demonstrar o significado da PFE, a diferença de VaR (valor em risco)Plot max(0,Stock Value) to demonstrate the meaning of PFE, the difference to Value at Risk (VaR)

    a.a. Para esclarecer: PFE = Preço de Compartilhamento (T) – Preço de Contrato a Termo KTo clarify: PFE = Share Price (T) -- Forward Contract Price K

  6. Use o quantil 0,95 para obter o valor da PFE em cada etapa / término do período de simulaçãoTake the 0.95 Quantile to get the PFE value at each time step / end of simulation period

Nós calculamos a exposição potencial futura de uma ação com base em ações da MSFT.We will calculate the potential future exposure for an equity forward based on MSFT stock. Conforme mencionado acima, para modelar os preços das ações, são necessários os preços históricos das ações da MSFT para que possamos calibrar o modelo de dados históricos.As mentioned above, to model the stock prices, historic prices for the MSFT stock are required so we can calibrate the model to historical data. Há várias maneiras de obter preços históricos de ações.There are many ways to acquire historical stock prices. Em nosso exemplo, usamos uma versão gratuita de um serviço de preços de ações de um provedor de serviços externo, a Quandl.In our example, we use a free version of a stock price service from an external service provider, Quandl.

Observação: O exemplo usa o Conjunto de dados Preços WIKI, que pode ser usado para o aprendizado dos conceitos.Note: The example uses the WIKI Prices dataset which can be used for learning concepts. Para obter o preço de ações baseadas nos EUA para uso em produção, a Quandl recomenda usar o conjunto de dados End of Day US Stock Prices.For production usage of US based equities, Quandl recommends using the End of Day US Stock Prices dataset.

Para processar os dados e definir o risco associado à ação, é preciso fazer o seguinte:To process the data and define the risk associated with the equity, we need to do the following things:

  1. Recuperar dados históricos da ação.Retrieve history data from the equity.

  2. Determinar o retorno esperado μ e a volatilidade σ dos dados históricos.Determine the expected return μ and volatility σ from the historic data.

  3. Modelar os preços das ações subjacentes usando simulação.Model the underlying stock prices using some simulation.

  4. Executar o modeloRun the model

  5. Determinar a exposição da ação no futuro.Determine the exposure of the equity in the future.

Nós começamos recuperando a ação no serviço da Quandl e plotando o histórico de preços nos últimos 180 dias.We start by retrieving the stock from the Quandl service and plotting the closing price history over the last 180 days.

# Lubridate package must be installed
if (!require(lubridate)) install.packages('lubridate')
library(lubridate)

# Quandl package must be installed
if (!require(Quandl)) install.packages('Quandl')
library(Quandl)

# Get your API key from quandl.com
quandl_api = "enter your key here"

# Add the key to the Quandl keychain
Quandl.api_key(quandl_api)

quandl_get <-
    function(sym, start_date = "2018-01-01") {
        require(devtools)
        require(Quandl)
        # Retrieve the Open, High, Low, Close and Volume Column for a given Symbol
        # Column Indices can be deduced from this sample call
        # data <- Quandl(c("WIKI/MSFT"), rows = 1)

        tryCatch(Quandl(c(
        paste0("WIKI/", sym, ".8"),    # Column 8 : Open
        paste0("WIKI/", sym, ".9"),    # Column 9 : High
        paste0("WIKI/", sym, ".10"),   # Column 10: Low
        paste0("WIKI/", sym, ".11"),   # Column 11: Close
        paste0("WIKI/", sym, ".12")),  # Column 12: Volume
        start_date = start_date,
        type = "raw"
        ))
    }

# Define the Equity Forward
instrument.name <- "MSFT"
instrument.premium <- 100.1
instrument.pfeQuantile <- 0.95

# Get the stock price for the last 180 days
instrument.startDate <- today() - days(180)

# Get the quotes for an equity and transform them to a data frame
df_instrument.timeSeries <- quandl_get(instrument.name,start_date = instrument.startDate)

#Rename the columns
colnames(df_instrument.timeSeries) <- c()
colnames(df_instrument.timeSeries) <- c("Date","Open","High","Low","Close","Volume")

# Plot the closing price history to get a better feeling for the data
plot(df_instrument.timeSeries$Date, df_instrument.timeSeries$Close)

Com os dados em mãos, podemos calibrar o modelo de GBM.With the data in hand, we calibrate the GBM model.

# Code inspired by the book Computational Finance, An Introductory Course with R by 
#    A. Arratia.

# Calculate the daily return in order to estimate sigma and mu in the Wiener Process
df_instrument.dailyReturns <- c(diff(log(df_instrument.timeSeries$Close)), NA)

# Estimate the mean of std deviation of the log returns to estimate the parameters of the Wiener Process

estimateGBM_Parameters <- function(logReturns,dt = 1/252) {

    # Volatility
    sigma_hat = sqrt(var(logReturns)) / sqrt(dt)

    # Drift
    mu_hat = mean(logReturns) / dt + sigma_hat**2 / 2.0

    # Return the parameters
    parameter.list <- list("mu" = mu_hat,"sigma" = sigma_hat)

    return(parameter.list)
}

# Calibrate the model to historic data
GBM_Parameters <- estimateGBM_Parameters(df_instrument.dailyReturns[1:length(df_instrument.dailyReturns) - 1])

Em seguida, modelamos os preços de ações subjacentes.Next, we model the underlying stock prices. Podemos implementar o processo de GBM discreto do zero ou utilizar um dos muitos pacotes de R que fornecem essa funcionalidade.We can either implement the discrete GBM process from scratch or utilize one of many R packages which provide this functionality. Usamos o pacote de R sde (Simulation and Inference for Stochastic Differential Equations) que fornece um método para solucionar este problema.We use the R package sde (Simulation and Inference for Stochastic Differential Equations) which provides a method of solving this problem. O método GBM requer um conjunto de parâmetros que são calibrados para dados históricos ou fornecidos como parâmetros de simulação.The GBM method requires a set of parameters which are either calibrated to historic data or given as simulation parameters. Nós usamos os dados históricos, fornecendo μ, σ e os preços das ações no início da simulação (P0).We use the historic data, providing μ, σ and the stock prices at the beginning of the simulation (P0).

if (!require(sde)) install.packages('sde')
library(sde)

sigma <-  GBM_Parameters$sigma
mu <- GBM_Parameters$mu
P0 <- tail(df_instrument.timeSeries$Close, 1)

# Calculate the PFE looking one month into the future
T <- 1 / 12

# Consider nt MC paths
nt=50

# Divide the time interval T into n discrete time steps
n = 2 ^ 8 

dt <- T / n
t <- seq(0,T,by=dt)

Agora, estamos prontos para começar uma simulação de Monte Carlo para modelar a exposição potencial para certo número de caminhos de simulação.We are now ready to start a Monte Carlo simulation to model the potential exposure for some number of simulation paths. Limitaremos a simulação a 50 caminhos de Monte Carlo e 256 etapas de tempo.We will limit the simulation to 50 Monte Carlo paths and 256 time steps. Na preparação para dimensionar a simulação e aproveitar a paralelização em R, o loop de simulação de Monte Carlo usa uma instrução foreach.In preparation for scaling out the simulation and taking advantage of parallelization in R, the Monte Carlo simulation loop uses a foreach statement.

# Track the start time of the simulation
start_s <- Sys.time()

# Instead of a simple for loop to execute a simulation per MC path, call the
# simulation with the foreach package
# in order to demonstrate the similarity to the AzureBatch way to call the method.

library(foreach)
# Execute the MC simulation for the wiener process utilizing the GBM method from the sde package
exposure_mc <- foreach (i=1:nt, .combine = rbind ) %do%  GBM(x = P0, r = mu, sigma = sigma, T = T, N = n)
rownames(exposure_mc) <- c()

# Track the end time of the simulation
end_s <- Sys.time()

# Duration of the simulation

difftime(end_s, start_s) 

Agora, simulamos o preço das ações da MSFT subjacentes.We have now simulated the price of the underlying MSFT stock. Para calcular a exposição da ação, podemos subtrair o prêmio e limitar a exposição somente a valores positivos.To calculate the exposure of the equity forward, we subtract the premium and limit the exposure to only positive values.

# Calculate the total Exposure as V_i(t) - K, put it to zero for negative exposures
pfe_mc <- pmax(exposure_mc - instrument.premium ,0)

ymax <- max(pfe_mc)
ymin <- min(pfe_mc)
plot(t, pfe_mc[1,], t = 'l', ylim = c(ymin, ymax), col = 1, ylab="Credit Exposure in USD", xlab="time t in Years")
for (i in 2:nt) {
    lines(t, pfe_mc[i,], t = 'l', ylim = c(ymin, ymax), col = i)
}

As próximas duas imagens mostram o resultado da simulação.The next two pictures show the result of the simulation. A primeira imagem mostra a simulação de Monte Carlo do preço da ação subjacente para 50 caminhos.The first picture shows the Monte Carlo simulation of the underlying stock price for 50 paths. A segunda imagem ilustra a Exposição de Crédito subjacente da ação após a subtração do prêmio da ação e da limitação da exposição somente a valores positivos.The second picture illustrates the underlying Credit Exposure for the equity forward after subtracting the premium of the equity forward and limiting the exposure to positive values.

Figure 1 - 50 Monte Carlo Paths Figure 2 - Credit Exposure for Equity Forward
Figura 1 – 50 caminhos de Monte CarloFigure 1 - 50 Monte Carlo Paths Figura 2 – Exposição de Crédito para a AçãoFigure 2 - Credit Exposure for Equity Forward

Na última etapa, o PFE do Quantil 0,95 de 1 Mês é calculado com o código a seguir.In the last step, the 1-Month 0.95 Quantile PFE is calculated by the following code.

# Calculate the PFE at each time step
df_pfe <- cbind(t,apply(pfe_mc,2,quantile,probs = instrument.pfeQuantile ))

resulting in the final PFE plot
plot(df_pfe, t = 'l', ylab = "Potential Future Exposure in USD", xlab = "time t in Years")
Potential Future Exposure for MSFT Equity Forward

Figura 3 Exposição Potencial Futura para Ação da MSFTFigure 3 Potential Future Exposure for MSFT Equity Forward

Usando o Lote do Azure com RUsing Azure Batch with R

A solução de R descrita acima pode ser conectada ao Lote do Azure para aproveitar a nuvem para cálculos de riscos.The R solution described above can be connected to Azure Batch and leverage the cloud for risk calculations. Isso demanda pouco esforço extra para um cálculo paralelo como o nosso.This takes little extra effort for a parallel calculation such as ours. O tutorial Executar uma simulação de R paralela com o Lote do Azure fornece informações detalhadas sobre como conectar o R ao Lote do Azure.The tutorial, Run a parallel R simulation with Azure Batch, provides detailed information on connecting R to Azure Batch. A seguir, mostramos o código e o resumo do processo para se conectar ao Lote do Azure e como tirar proveito da extensão para a nuvem em um cálculo de PFE simplificado.Below we show the code and summary of the process to connect to Azure Batch and how to take advantage of the extension to the cloud in a simplified PFE calculation.

Este exemplo lida com o mesmo modelo descrito anteriormente.This example tackles the same model described earlier. Como vimos anteriormente, esse cálculo pode ser executado em nosso PC.As we have seen before, this calculation can run on our personal computer. Aumentos no número de caminhos de Monte Carlo ou o uso de etapas de tempo menores resulta em tempos de execução muito maiores.Increases to the number of Monte Carlo paths or use of smaller time steps will result in much longer execution times. Quase todo o código R permanecerá inalterado.Almost all of the R code will remain unchanged. Vamos destacar as diferenças nesta seção.We will highlight the differences in this section.

Cada caminho da simulação de Monte Carlo é executado no Azure.Each path of the Monte Carlo simulation runs in Azure. Podemos fazer isso porque cada caminho é independente dos outros, fornecendo um cálculo "excessivamente paralelo".We can do this because each path is independent of the others, giving us an "embarrassingly parallel" calculation.

Para usar o Lote do Azure, podemos definir o cluster subjacente e referenciá-lo no código antes do cluster poder ser usado nos cálculos.To use Azure Batch, we define the underlying cluster and reference it in the code before the cluster can be used in the calculations. Para executar os cálculos, usamos a seguinte definição de JSON:To run the calculations, we use the following cluster.json definition:

{
  "name": "myMCPool",
  "vmSize": "Standard_D2_v2",
  "maxTasksPerNode": 4,
  "poolSize": {
    "dedicatedNodes": {
      "min": 1,
      "max": 1
    },
    "lowPriorityNodes": {
      "min": 3,
      "max": 3
    },
    "autoscaleFormula": "QUEUE"
  },
  "containerImage": "rocker/tidyverse:latest",
  "rPackages": {
    "cran": [],
    "github": [],
    "bioconductor": []
  },
  "commandLine": [],
  "subnetId": ""
}

Com essa definição de cluster, o seguinte código de R usa o cluster:With this cluster definition, the following R code makes use of the cluster:

# Define the cloud burst environment
library(doAzureParallel)

# set your credentials
setCredentials("credentials.json")

# Create your cluster if not exist
cluster <- makeCluster("cluster.json")

# register your parallel backend
registerDoAzureParallel(cluster)

# check that your workers are up
getDoParWorkers()

Por fim, podemos atualizar a instrução foreach de antes para usar o pacote doAzureParallel.Finally, we update the foreach statement from earlier to use the doAzureParallel package. É uma pequena alteração, adicionando uma referência ao pacote sde e alterando %do% para %dopar%:It's a minor change, adding a reference to the sde package and changing the %do% to %dopar%:

# Execute the MC simulation for the wiener process utilizing the GBM method from the sde package and extend the computation to the cloud
exposure_mc <- foreach(i = 1:nt, .combine = rbind, .packages = 'sde') %dopar% GBM(x = P0, r = mu, sigma = sigma, T = T, N = n)
rownames(exposure_mc) <- c()

Cada simulação de Monte Carlo é enviada como uma tarefa ao Lote do Azure.Each Monte Carlo simulation is submitted as a task to Azure Batch. A tarefa é executada na nuvem.The task executes in the cloud. Os resultados são mesclados antes de serem enviados para o workbench de analista.Results are merged before being sent back to the analyst workbench. O trabalho pesado e os cálculos são executados na nuvem para aproveitar ao máximo a escala e a infraestrutura subjacente exigida pelos cálculos solicitados.The heavy lifting and computations execute in the cloud to take full advantage of scaling and the underlying infrastructure required by the requested calculations.

Após o fim da execução dos cálculos, os recursos adicionais podem facilmente ser desligados invocando a seguinte instrução única:After the calculations have finished, the additional resources can easily be shut-down by invoking the following a single instruction:

# Stop the Cloud cluster
stopCluster(cluster)

Usar uma oferta de SaaSUse a SaaS offering

Os dois primeiros exemplos mostram como utilizar a infraestrutura local e de nuvem para o desenvolvimento de um modelo de avaliação adequado.The first two examples show how to utilize local and cloud infrastructure for developing an adequate valuation model. Esse paradigma começou a mudar.This paradigm has begun to shift. Da mesma maneira que a infraestrutura local se transformou serviços de IaaS e PaaS baseados em nuvem, a modelagem de cálculos de risco relevantes se transformou em um processo orientado a serviços.In the same way that on-premises infrastructure has transformed into cloud-based IaaS and PaaS services, the modelling of relevant risk figures is transforming into a service-oriented process. Os analistas de hoje enfrentam dois grandes desafios:Today's analysts face two major challenges:

  1. Os requisitos regulatórios usam cada vez mais capacidade de computação para adicionar a requisitos de modelagem.The regulatory requirements use increasing compute capacity to add to modeling requirements. Os reguladores pedem cálculos de risco cada vez mais frequentes e atualizados.The regulators are asking for more frequent and up-to date risk figures.

  2. A infraestrutura de risco existente cresceu de maneira orgânica com o tempo e cria desafios ao implementar novos requisitos e uma modelagem de risco mais avançada de maneira ágil.The existing risk infrastructure has grown organically with time and creates challenges when implementing new requirements and more advanced risk modeling in an agile manner.

Serviços baseados em nuvem podem fornecer a funcionalidade necessária e dar suporte à análise de risco.Cloud-based services can deliver the required functionality and support risk analysis. Essa abordagem tem algumas vantagens:This approach has some advantages:

  • Os cálculos de riscos mais comuns exigidos pelo regulador devem ser implementados por todos os usuários sujeitos à regulamentação.The most common risk calculations required by the regulator must be implemented by everyone under the regulation. Utilizando os serviços de um provedor especializado, o analista se beneficia de cálculos de riscos em conformidade com as exigências do regulador e prontos para uso.By utilizing services from a specialized service provider, the analyst benefits from ready to use, regulator-compliant risk calculations. Esses serviços podem incluir cálculos de riscos de mercado, cálculos de riscos de contraparte, XVA (ajuste do valor de X) e até mesmo cálculos de FRTB (Fundamental Review of Trading Book).Such services may include market risk calculations, counterparty risk calculations, X-Value Adjustment (XVA), and even Fundamental Review of Trading Book (FRTB) calculations.

  • Esses serviços expõem suas interfaces por meio de serviços Web.These services expose their interfaces through web services. A infraestrutura de risco existente pode ser aprimorada por esses outros serviços.The existing risk infrastructure can be enhanced by these other services.

Em nosso exemplo, gostaríamos de invocar um serviço baseado em nuvem para cálculos de FRTB.In our example, we want to invoke a cloud-based service for FRTB calculations. Vários desses podem ser encontrados no AppSource.Several of these can be found on AppSource. Para este artigo, escolhemos uma opção de avaliação da Vector Risk.For this article we chose a trial option from Vector Risk. Continuaremos a modificar nosso sistema.We will continue to modify our system. Desta vez, usamos um serviço para calcular o risco dos juros.This time, we use a service to calculate the risk figure of interest. O processo é composto pelas seguintes etapas:This process consists of the following steps:

  1. Chamar o serviço de risco relevante com os parâmetros certos.Call the relevant risk service and with the right parameters.

  2. Aguardar até que o serviço termine o cálculo.Wait until the service finishes the calculation.

  3. Recuperar e incorporar os resultados da análise de risco.Retrieve and incorporate the results into the risk analysis.

Traduzido em código R, nosso código R pode ser aprimorado pela definição dos valores de entrada necessários de um modelo de entrada preparado.Translated into R code, our R code can be enhanced by the definition of the required input values from a prepared input template.

Template <- readLines('RequiredInputData.json')
data <- list(
# drilldown setup
  timeSteps = seq(0, n, by = 1),
  paths = as.integer(seq(0, nt, length.out = min(nt, 100))),
# calc setup
  calcDate = instrument.startDate,
  npaths = nt,
  price = P0,
  vol = sigma,
  drift = mu,
  premium = instrument.premium,
  maturityDate = today()
  )
body <- whisker.render(template, data)

Em seguida, precisamos chamar o serviço Web.Next, we need to call the web service. Nesse caso, chamamos o método StartCreditExposure para disparar o cálculo.In this case, we call the StartCreditExposure method to trigger the calculation. Armazenamos o ponto de extremidade da API em uma variável chamada endpoint.We store the endpoint for the API in a variable named endpoint.

# make the call
result <- POST( paste(endpoint, "StartCreditExposure", sep = ""),  
                authenticate(username, password, type = "basic"),
                content_type("application/json"),
                add_headers(`Ocp-Apim-Subscription-Key` = api_key),
                body = body, encode = "raw"
               )

result <- content(result)

Depois de terminar de executar os cálculos, podemos recuperar os resultados.Once the calculations have finished, we retrieve the results.

# get back high level results
result <- POST( paste(endpoint, "GetCreditExposureResults", sep = ""), 
                authenticate(username, password, type = "basic"),
                content_type("application/json"),
                add_headers(`Ocp-Apim-Subscription-Key` = api_key),
               body = sprintf('{"getCreditExposureResults": {"token":"DataSource=Production;Organisation=Microsoft", "ticket": "%s"}}', ticket), encode = "raw")

result <- content(result)

Depois disso, o analista continua com os resultados recebidos.This leaves the analyst to continue with the results received. Os cálculos de risco relevantes de juros são extraídos dos resultados e plotados.The relevant risk figures of interest are extracted from the results and plotted.

if (!is.null(result$error)) {
    cat(result$error$message)
} else {
    # plot PFE
    result <- result$getCreditExposureResultsResponse$getCreditExposureResultsResult
    df <- do.call(rbind, result$exposures)
    df <- as.data.frame(df)
    df <- subset(df, term <= n)   
}

plot(as.numeric(df$term[df$statistic == 'PFE']) / 365, df$result[df$statistic == 'PFE'], type = "p", xlab = ("time t in Years"), ylab = ("Potential Future Exposure in USD"), ylim = range(c(df$result[df$statistic == 'PFE'], df$result[df$statistic == 'PFE'])), col = "red")

Os gráficos resultantes são semelhantes a este:The resulting plots look like this:

Figure 4 - Credit Exposure for MSFT Equity Forward - Calculated with a Cloud Based Risk Engine Figure 5 - Potential Future Exposure for MSFT Equity Forward - Calculated with a Cloud  Based Risk Engine
Figura 4 – Exposição de Crédito para a Ação da MSFT –Figure 4 - Credit Exposure for MSFT Equity Forward -
Calculado com um Mecanismo de Risco Baseado na NuvemCalculated with a Cloud Based Risk Engine
Figura 5 Exposição Potencial Futura para Ação da MSFT –Figure 5 - Potential Future Exposure for MSFT Equity Forward -
Calculado com um Mecanismo de Risco Baseado na NuvemCalculated with a Cloud Based Risk Engine

Próximas etapasNext Steps

O acesso flexível à nuvem por meio da infraestrutura de computação e de serviços de análise de risco baseada em SaaS pode oferecer melhorias na velocidade e na agilidade para analistas de risco que trabalham com seguros e mercado de capital.Flexible access to the cloud through compute infrastructure and SaaS-based risk analysis services can deliver improvements in speed and agility for risk analysts working in capital markets and insurance. Neste artigo, trabalhamos em um exemplo que ilustra como usar o Azure e outros serviços usando ferramentas que analistas de risco conhecem.In this article we worked through an example which illustrates how to use Azure and other services using tools risk analysts know. Tente tirar proveito dos recursos do Azure conforme você cria e aprimora seus modelos de risco.Try taking advantage of Azure's capabilities as you create and enhance your risk models.

TutoriaisTutorials

Este artigo foi criado pelo Dr. Darko Mocelj e Rupert Nicolay.This article was authored by Dr. Darko Mocelj and Rupert Nicolay.