Wednesday 15 November 2017

Forex quantlib


Aqui estão algumas sugestões. Pesquise a Amazon (ou o seu livreiro favorito) para livros sobre financiamento quantitativo C. Encontrei vários títulos que parecem promissores. Eu fui para o SourceForge (pesquisando em Sistemas de Negociação) e vi vários sistemas promissores que poderiam dar uma vantagem na redução, MAE, etc. Eu uso o TradeStation 9.0 para comparar várias estratégias de negociação. Ele fornecerá gráficos MAEMFE, curvas de equidade comercial e estratégias de classificação baseadas em redução máxima. Mas não se esqueça de ler os Sistemas de Negociação que Trabalham: Construindo e Avaliando Sistemas de Negociação Efetivos por Thomas Stridsman para uma crítica adequada dos relatórios gerados pela TradeStations. Respondeu 11 de abril às 15:51 O OP queria quotesome das funções que seriam usadas no desenvolvimento de uma estratégia de negociação. Embora eu não possa citar qualquer evidência em apoio, tenho certeza de que as ferramentas de análise técnica podem ser usadas no desenvolvimento Tais estratégias. Quanto a TAlib está escrito em C ou C, bem, eu estou corrigido. Ndash babelproofreader 3 de abril 11 às 14: 37 O projeto QuantLib destina-se a fornecer uma estrutura de software abrangente para financiamento quantitativo. QuantLib é uma biblioteca livre de código aberto para modelagem, negociação e gerenciamento de riscos na vida real. QuantLib está escrito em C com um modelo de objeto limpo e, em seguida, é exportado para idiomas diferentes, como C, Objective Caml, Java, Perl, Python, GNU R, Ruby e Scheme. Uma versão habilitada para AAD também está disponível. O projeto de repositório facilita a implantação de bibliotecas de objetos para plataformas de usuários finais e é usado para gerar QuantLibXL. Um addin do Excel para QuantLib e QuantLibAddin. Quantlib addins para outras plataformas, como o LibreOffice Calc. Ligações para outros idiomas e portar para Gnumeric, MatlabOctave, S-PLUSR. Mathematica. As arquiteturas COMCORBASOAP, FpML, estão em consideração. Consulte a página de extensões para obter detalhes. Apreciado por analistas quantitativos e desenvolvedores, destina-se tanto a acadêmicos quanto a praticantes, eventualmente promovendo uma maior interação entre eles. O QuantLib oferece ferramentas que são úteis para implementação prática e para modelagem avançada, com recursos como convenções de mercado, modelos de curva de rendimento, solucionadores, PDEs, Monte Carlo (baixa discrepância incluída), opções exóticas, VAR e assim por diante. A finanças é uma área onde projetos bem-escritos de código aberto podem fazer uma tremenda diferença: qualquer instituição financeira precisa de uma implementação sólida, efetiva e efetiva de modelos de preços de ponta e ferramentas de hedge. No entanto, para chegar lá, é atualmente forçado a reinventar a roda de cada vez. Mesmo os modelos padrão da década, como o Black-Scholes, ainda não possuem uma implementação pública robusta. Como conseqüências, muitos quants estão desperdiçando seu tempo escrevendo classes C que já foram escritas milhares de vezes. Ao projetar e construir essas ferramentas ao ar livre, a QuantLib irá incentivar a revisão pelos pares das ferramentas em si e demonstrar como isso deve ser feito para o software científico e comercial. Dan Gezelters conversou na primeira conferência Open SourceOpen Science que discutiu como a tradição científica da revisão pelos pares se encaixa bem com a filosofia do movimento Open Source. Os padrões abertos são o único caminho justo para que a ciência e a tecnologia evoluam. A biblioteca poderia ser explorada em diferentes instituições de pesquisa e regulamentação, bancos, empresas de software, e assim por diante. Sendo um projeto de fonte livre, os quads que contribuem para a biblioteca não precisam começar do zero a cada momento. Os alunos podem dominar uma biblioteca que realmente é usada no mundo real e contribuí-la de forma significativa. Isso poderia potencialmente colocá-los em uma posição privilegiada no mercado de trabalho. Os pesquisadores teriam um quadro à mão, o que reduz consideravelmente a quantidade de trabalho de baixo nível necessário para construir modelos, de modo a poder se concentrar em problemas mais complexos e interessantes. As empresas financeiras podem explorar o QuantLib como código base ou benchmark, ao mesmo tempo em que podem se engajar na criação de soluções mais inovadoras que os tornem mais competitivos no mercado. As instituições reguladoras podem ter uma ferramenta para práticas tarifárias e de gerenciamento de riscos padrão. A licença QuantLib é uma licença BSD modificada, adequada para uso em software livre e aplicativos proprietários, impondo nenhuma restrição ao uso da biblioteca. Algumas empresas comprometeram recursos significativos para o desenvolvimento desta biblioteca, principalmente StatPro. Um dos principais fornecedores internacionais de gerenciamento de riscos, onde nasceu o projeto QuantLib. QUEPE 6: Moeda, Dinheiro e Taxas de Câmbio Esta é uma proposta para aumentar o QuantLib com um novo módulo para lidar com moedas, dinheiro e câmbio. A implementação segue de perto as especificações da moeda OMG (ftp: ftp. omg. orgpubdocsformal00-06-29.pdf), mas não até o final de 100 OMG compatível. Além de novas classes, algumas das funcionalidades atuais relacionadas aos conceitos de tempo de data e quantidade de tempo são estendidas para atender às necessidades do módulo de moeda. Implementação atual e Desvantagens Este é um aprimoramento de complemento para funcionalidades faltantes mais do que uma extensão de qualquer implementação atual. A moeda apenas existe como uma enumeração de alguns códigos de moeda ISO. Além disso, não há abstrações de moeda, dinheiro ou taxas de câmbio disponíveis dentro da biblioteca. Existe uma abstração de data na classe QuantLib :: Date e contém uma implementação de data bastante completa. No entanto, não tem componente de tempo para representar a data-hora. Outra limitação potencial é que a data é uma classe única e concreta. Ao adicionar uma classe abstrata contendo a interface de data e hora, a implementação seria liberada e outros poderiam ser adicionados (padrão de estratégia). A implementação atual é baseada em um número de série da data (como no Excel) que deve ser manipulado para produzir a data em qualquer outra forma. Enquanto funcionalmente correto, pode ser um arrastar no desempenho. Fornecer uma classe abstrata de data-hora em vez de simplesmente enrolar QuantLib :: Date nos permite adicionar novas implementações de Data e DateTime conforme necessário. Há quantidade de tempo como QuantLib :: Period, mas a implementação está limitada a um uso específico. Pode conter uma unidade de tempo como um número inteiro, mas não pode converter entre unidades. Além disso, uma vez que um objeto de Período é construído, ele não pode alterar a precisão. Por exemplo, se o objeto Period for criado para armazenar semanas não pode lidar com um período de tempo, como 2 semanas, 2 dias e 12 horas. Ele pode lidar com algumas das funcionalidades necessárias para manter uma quantidade de tempo, mas não é tão flexível quanto o objeto OMG DAmountOfTime. QuantLib :: O período é bom para o que representa, mas a biblioteca precisa da funcionalidade em AmountOfTime como uma classe complementar. Implementação proposta Seguindo a especificação OMG, o módulo de moeda pode ser dividido em quatro componentes principais e os aprimoramentos de suporte. Os novos componentes são: Moeda: o conceito de moeda como uma mnemônica, descrição, símbolo, convenções de troca, convenções de arredondamento, etc. Dinheiro: um montante de moeda que oferece operações de matemática, os parâmetros de entrada e retorno para câmbio, etc. Troca Taxas: classes para manter taxas de câmbio dinâmicas e estáticas e gerenciar tabelas de taxa de câmbio. Os formatadores de dinheiro. Os aprimoramentos são: a quantidade de classes de tempo de data da classe de tempo as aulas de arredondamento Para uma explicação mais detalhada do módulo de negócios, veja o documento OMG relacionado (ftp: ftp. omg. orgpubdocsformal00-06-29.pdf). Quantlib :: Currency Namespace Observação Todas as classes de moeda, dinheiro e taxa de câmbio relacionadas em um novo espaço de nomes chamado Moeda. Os aprimoramentos de suporte são todos contidos no namespace QuantLib. Moeda Componente Descrição Moeda encapsula informações descritivas básicas de uma moeda, os métodos usados ​​para criar uma moeda e. Isso inclui: nome da moeda. por exemplo. Dólar dos EUA mnemônico, e. Código numérico USD, e. Símbolo 840 (usado para moedas ISO), e. Símbolo de fração, e. Factor de escala de centração, e. 10 proporção de fração para inteiro, e. 100 para dólar: descrição de centavos, e. Data de introdução do dólar dos Estados Unidos, e. (Data padrão de QuantLib) data de validade, por exemplo, (Data padrão QuantLib) se representa e descrição da moeda ISO se ISO, qual versão ela representa se a saída interna externa deve exibir operações de parte fracionada para permitir a definição de saída externa externa exibir um conjunto de locais para os quais as operações de moeda são usadas (para moedas ISO) Para adicionar operações de remoção de localidades para retornar as operações de triangulação de câmbio próximas de moedas para retornar o método de arredondamento preferido, um operador de igualdade para comparar duas moedas. Projeto de Módulo de Moedas e Modelo estático. A hierarquia de classe de moeda está usando o idioma pimpl para cópias leves e para tornar o comportamento de moeda polimórfica disponível para scripts Idiomas sem os problemas do modelo Handle. A moeda da classe base contém um identificador para a classe abstrata CurrencyImpl que é composta pelos campos de dados e definições de getter para Moeda. (Para obter mais informações sobre o idioma pimpl, consulte 1: Implementando o comportamento polimórfico por meio do idioma pimpl. Geralmente, ao aplicar o idioma pimpl, todas as operações chamadas em Moeda seriam proxied às operações de pares na classe CurrencyImpl através da referência Handle. Para a classe Currency, isso só é válido para as operações addLocale e removeLocale. O restante acessa diretamente as variáveis ​​de membro público do CurrencyImpl. Isso criaria mais trabalho para duplicar todas as operações getXXX nas classes Currency e CurrencyImpl sem fornecer benefícios claros. A única responsabilidade das subclasses CurrencyImpl é definir a implementação das operações addLocaleremoveLocale e setExternInternOutputShowingFractions e a inicialização de dados na construção. A classe DefaultCurrency é usada pelo cliente para criar moedas que ainda não existem como classes na biblioteca. Dois construtores são fornecidos: Um construtor padrão que cria uma moeda Somente os valores de dados padrão e um construtor que aceita os parâmetros para criar um objeto de Moeda com valores especificados pelo usuário. Existem também várias subclasses de moeda que implementam as moedas ISO mais comuns. Todos eles são projetados como singletons para que seus construtores sejam declarados protegidos. As instâncias devem ser criadas seguras chamando a operação getInstance em cada uma. A classe de adaptador ISOCurrencyImpl define o addLocaleremoveLocale para que as subclasses ISOCurrencyImpl precisem apenas gerenciar a inicialização de dados para a definição de moeda ISO relevante. As classes de moeda ISO planejadas são USDCurrency, JPYCurrency, EURCurrency e GBPCurrency. Esta lista crescerá conforme necessário. Notas de Implementação de Moedas As seguintes são descrições dos campos de dados na classe CurrencyImpl. Coletivamente, eles mantêm a informação do estado para cada objeto monetário. Seqüência de caracteres de string string mnemônica seqüência de caracteres de seqüência de caracteres numéricos descrição de string de stringSymbol Eles devem conter dados ISO 4217: 1995, mas isso é deixado para o cliente que constrói a instância de Moeda. Long Currency :: scaleFactor Este é o número de dígitos significativos preferidos para representar um valor dessa moeda. Por enquanto, definir o scaleFactor não terá efeito. Ele destina-se a ser usado pelo Money através da referência de objeto decimal (Money. value). Por enquanto, Decimal é apenas um typedef para um duplo, portanto, scaleFactor ainda não tem relevância. Taxa de relaçãoFract2Whole A proporção da parte da fração para a parte inteira de uma moeda é a relação entre a menor unidade da parte fracionada de uma moeda e uma unidade de toda a parte de uma moeda. A proporção dos Dólares dos Estados Unidos é de 100 centavos para um dólar, portanto, proporção de Fract2Whole 100. Nos casos em que não existe uma parte menor de uma moeda (ou seja, ienes), será configurado para 1. DateTime introduçãoDate DateTime expirationDate Introdução A data de validade conterá uma data padrão se nenhuma existir. A data padrão usada é definida pela implementação da classe QuantLib :: DateTime se nenhum for fornecido pelo cliente instanciando a moeda. Boolean isISVISION string isoVersion Para mais informações sobre os nomes e códigos de moeda ISO veja a especificação de moeda ISO 4217: 1995. Localidade de vectorltstringgt Um usuário pode adicionar e remover localidades de qualquer moeda. Uma MoedaExcepção do tipo UNKNOWNLOCALE será lançada se a localidade passada não for encontrada na lista de locais definidos ISO (ISO 4217: 1995). Rounding prefRounding Algumas moedas preferiram os requisitos de arredondamento. A classe Money usa isso para determinar como rodar para operações aritméticas se nenhuma outra classe de arredondamento for especificada. Moeda nextCurrencylastCurrency Essas operações serão usadas pelo ExchangeRateManager para seguir os requisitos cambiais triangulados de algumas moedas. Todas as moedas dos membros do euro retornarão a instância da EURCurrency. Há mais informações sobre isso nas notas do ExchangeRateManager. O dinheiro pode ser pensado como uma instância de moeda. Ele detém um valor decimal (alguma quantia de dinheiro) e fornece operações de aritmética e comparação nesse montante de dinheiro. Observe que a classe Money faz uso de um novo tipo: Decimal. Por enquanto, isso é apenas um typedef para um duplo. Avançando, deveria ser um typedef para uma classe que contenha padrão de representação decimal de precisão arbitrária em todas as plataformas e não sujeito aos problemas de arredondamento com flutuadores. Por conveniência, isso provavelmente deve expor as operações de matemática como o arredondamento (através da classe de arredondamento do compositor), abs, etc. Mas isso deve ser objeto de outra opção. Money Static Model Money é uma classe concreta fornecendo todas as operações necessárias para criar uma nova instância, comparar dois objetos do Money e fazer matemática básica. O cliente pode instanciar um objeto Money com um arredondamento diferente do que a moeda preferir e fornecer uma referência a um objeto ExchangeRateManager (para conversão de moeda). No mínimo, o cliente deve passar uma Moeda e um Decimal para criar uma instância do Money. O dinheiro tentará usar o arredondamento associado à sua Moeda se nenhum outro objeto de arredondamento for especificado. Se a Moeda não tiver nenhum arredondamento específico associado a ele, nenhum arredondamento será realizado até que o cliente forneça um objeto de Arredondamento com a operação setRounding. A classe CurrencyParams contém duas variáveis ​​estáticas utilizadas pelo Money ao tentar matemática em dois objetos Money de Moedas diferentes. O ConversionType contém os valores que indicam se esse tipo de operação é legal e, em caso afirmativo, o tipo de conversão a ser usada. A BaseCurrency refere-se à Moeda para usar para conversão se ConversionType BASECURRENCYCONVERSION. Notas de Implementação de Dinheiro Operações de Matemática Quando a conversão automática é permitida e dois Dinheiros com Moedas diferentes são adicionados, subtraídos, multiplicados ou divididos, o resultado será uma instância do Money com a Moeda no lado direito do operador. MoneysourceCcy MoneytargetCcy MoneytargetCcy Se a conversão da moeda base for permitida, o resultado é em termos da CurrencyParams. BaseCurrency MoneyoneCcy MoneyanotherCcy MoneybaseCcy Isso só se aplica às operadoras. Se a operação adicionar (Money m) for aprovada um Dinheiro com uma Moeda diferente, o resultado será refletido no valor Money. Nesse objeto. A Moeda será a mesma que antes que o chamado fosse chamado. Por favor, note que, sempre que a troca de moeda é necessária para fazer testes matemáticos ou lógicos, os valores são convertidos primeiro, então a matemática é executada nos valores convertidos. O arredondamento é aplicado a cada valor convertido individualmente chamando Money. round () em cada um. Por exemplo, usando os exemplos acima, a ilustração abaixo descreve as etapas tomadas para a conversão e arredondamento: Caso de conversão automática Money1sourceCcy Money2targetCcy Money3targetCcy convert Money1sourceCcy - gt Money1targetCcy Money1targetCcy. round () - usando o mesmo objeto de arredondamento como Money2targetCcy adicione Money1 Money2 Conversão de moeda base Case Money1oneCcy Money2anotherCcy MoneyBaseCurrency converter Money1oneCcy - gt Money1baseCcy Money1baseCcy. round () - usando o objeto de arredondamento padrão para BaseCurrency Money2baseCcy. round () - usando o objeto de arredondamento padrão para BaseCurrency, adicione Money1 Money2 Se uma tentativa de adicionar ou não adiciona dois recursos com Moedas diferentes O sucesso será determinado pelo seguinte: O dinheiro deve conter uma referência a um objeto do ExchangeRateManager capaz de fornecer todas as taxas de câmbio necessárias para realizar uma conversão. O CurrencyParams. ConversionType deve ser BASECURRENCYCONVERSION ou AUTOMATEDCONVERSION Operadores de comparação Além das operadoras de matemática, os seguintes operadores lógicos também estão sobrecarregados: Money :: round () rounding () Se a moeda especifica uma preferência de arredondamento (por exemplo, EURCurrency), arredondamento Será ativado (isRounding retornará true). Isso indica que todas as operações aritméticas serão finalizadas ao arredondar a trunção do valor final. A precisão resultante, é claro, é determinada pela implementação do arredondamento utilizada. Se a Moeda não especificar um tipo de arredondamento, o arredondamento permanecerá desligado, o arredondamento de chamadas () retornará 0 e a chamada em volta () não terá efeito sobre o valor. Taxa de câmbio e gestores de taxa de câmbio A abstração da taxa de câmbio contém referências a moeda de origem, moeda de destino, o fator de conversão e um identificador de tipo de taxa. Ele fornece operações para trocar dinheiro entre as moedas de origem e destino. Usar um membro MarketElement para representar o fator de conversão torna a taxa de câmbio observável como uma interface comum. Um tipo especial de Taxa de Câmbio fornece taxas de câmbio vinculadas à data. A abstração do Gerenciador de taxa de câmbio contém uma coleção de taxas de câmbio e operações para adicionar, remover e consultar. Os look ups são baseados em moeda de origem, moeda alvo e tipo de taxa. Se configurado para fazê-lo, a pesquisa pode criar e retornar taxas derivadas quando não existe uma taxa direta explícita. Também leva em consideração os requisitos cambiais triangulados se estiver presente na fonte e ou moedas alvo (moedas da europa, por exemplo). A abstração relacionada, DExchangeRateManager, executa serve o mesmo propósito, mas para as taxas de câmbio limite da data. Taxa de câmbio e gestores de taxa de câmbio O modelo estático ExchangeRate é uma classe concreta que pode ser construída com uma fonte de moeda, um destino de moeda, um fator de conversão MarketElement e, opcionalmente, um tipo de string. Se nenhum tipo de string for fornecido, será inadimplente para direcionar. O fator de conversão é uma referência para um QuantLib :: MarketElement, fornecendo os benefícios do padrão observacional observável e para a coesão com o resto da biblioteca. O exchangeChain do ExchangeRateList é um vetor para uso quando uma troca direta não é possível. Não há setters públicos. Todas as alterações ao fator de conversão devem ser realizadas através do MarketElement. A principal função, a troca. Obtém dinheiro de qualquer fonte ou moeda alvo e retorna uma nova referência de objeto Money do destino ou fonte Moeda. DExchangeRate estende ExchangeRate para adicionar operações startDateendDate. Ele também fornece construtores para incluir DateTime startDateendDate. RateManager é um modelo que fornece funções para armazenamento e pesquisa de taxas de câmbio. Um RateManager de subclasse adiciona a operação de pesquisa que também leva em um DateTime como um parâmetro de pesquisa. O tipo ExchangeRateManager e DExchangeRateManager são typedefs para RateManagerltExchangeRategt e DRateManagerltDExchangeRategt, respectivamente. As taxas de câmbio são mantidas em um RateMap para uma pesquisa eficiente. Por enquanto, RateMap é um typedef para um mapa, mas se a necessidade surgir pode ser um typedef para um HashMap apropriado. ExchangeRateManager e DExchangeRateManager são uma classe concreta que mantém e executa pesquisas nos membros ExchangeRateList e DExchangeRateList, respectivamente. Eles foram projetados como classes separadas porque as operações deveriam ser denominadas as mesmas e, em alguns casos, adotar os mesmos parâmetros (a função lookupRate), mas retornar diferentes tipos. Este não é um comportamento polimórfico válido, portanto não pode ser expresso em uma hierarquia de classes. A funcionalidade que eles compartilham (embora não publicamente) seja herdada da base de classificação do ExchangeRateManager de superclasse. Taxas de Câmbio e taxas de Implementação do Gerenciador de Taxas de Câmbio typedef VectorltExchangeRategt ExchangeRateList typedef VectorltDExchangeRategt DExchangeRateList typedef RateManagerltDExchangeRategt RateMap typedef RateManagerltDExchangeRategt DRateMap ExchangeRateManager :: lookupRate () No mínimo, esta função precisa de um destino e uma moeda de origem. O ExchangeRateManager tentará encontrar um ExchangeRate com as mesmas moedas sourcetarget primeiro, seguido por um ExchangeRate com as moedas sourcetarget na ordem inversa. Se nenhum tipo for especificado, o tipo de qualquer será assumido. O tipo de prioridade a seguir é usado: tipo derivado do tipo direto Se um tipo específico for passado, somente uma taxa de câmbio desse tipo será retornada. Como o ExchangeRate. type é definido como um string, ele pode ser definido pelo cliente, no entanto eles escolhem. No entanto, o ExchangeRateManager reconhece os seguintes tipos como especiais: qualquer: se algum for passado, a pesquisa funciona como descrito acima. Isso é o mesmo que chamar lookupRate sem passar pelo parâmetro de tipo direto: o tipo padrão para o MoneyRates definido pelo cliente. Se for passado, então nenhum tipo derivado pode ser retornado. Derivado: quando o ExchangeRateManager cria um ExchangeRate por triangulação ele retorna uma taxa de tipo derivada. Estes podem ser adicionados ao gerenciador do ExchangeRate para obter eficiência. LookupRate lida com os casos em que regras específicas foram fornecidas para troca através de uma moeda intermediária. Por exemplo, todas as trocas de moedas entre as moedas do euro e qualquer outra moeda devem primeiro ser trocadas através do euro. Isso também é válido para as divisas do euro em moeda estrangeira. (Europa. eu. it) ExchangeRateManager usa as informações Currency. nextCurrencylastCurrency para construir um tipo derivado ExchangeRate que segue as convenções de triangulação de troca. As opções ExchangeRateManager :: isAutoAddDerivedsetAutoAddDerived estão disponíveis para adicionar automaticamente taxas de câmbio derivadas ao mapa interno para que as pesquisas subseqüentes sejam mais eficientes. ExchangeRate :: Exchange () A implementação da conversão permite a troca bidirecional com base na moeda Money. currency passada. Por exemplo, se o ExhangeRate foi construído com USD como moeda de origem e EUR como a moeda alvo (ExchangeRateUSD2EUR), passando Em um MoneyEUR faria com que MoneyEUR. value () fosse dividido pelo valor conversionFactors. Uma nova instância do MoneyUSD com o resultado seria retornada. Por outro lado, passar em um MoneyUSD causaria MoneyUSD. value () para ser multiplicado pelo valor conversionFactors. Uma nova instância do MoneyEUR com o resultado seria retornada. Observe que a troca não gira antes de retornar a instância do Money. Se o cliente quiser um valor arredondado, ligue para a operação Money. round. Se a conversão está acontecendo devido à aritmética em Dinheiro denominado de forma diferente, qualquer arredondamento é deixado para o objeto Money. Isso não acontece aqui. No caso de a taxa de câmbio ser derivada de tipo, isso significa que o rateChain contém um vetor de objetos do ExchangeRate. Nesse caso, em vez de usar o conversorFactor, o intercâmbio itera através da lista de troca de chamadas de cima para baixo em cada um. Por exemplo, se o ExchangeRate for derivado para converter FRF em JPY e o rateChain contém o seguinte: ExchangeRateFRF para EUR ExchangeRateJPY para EUR A troca de chamadas (MoneyFRF) faria o seguinte :: MoneyEUR ExchangeRateFRF2EUR. exchange (MoneyFRF) MoneyJPY ExchangeRateEUR2JPY. exchange ( MoneyEUR) retornam MoneyJPY ExchangeRate :: type () Os tipos usados ​​pelo ExchangeRateManagers são diretos e derivados, embora os clientes que criem novas instâncias do ExchangeRate possam inserir qualquer string. Ao adicionar ExchangeRates a um ExchangeRateManager, a única condição é que a combinação das moedas de tipo, origem e destino deve ser exclusiva. Direct é o padrão para instâncias instanciadas do cliente porque o fator de conversão representa um mapeamento explícito da moeda da fonte para destino. Derivado é usado pelo ExchangeRateManager para indicar que ele construiu o ExchangeRate de uma cadeia de taxas Direct andor Derived. Observe que o operador (igual) está também sobrecarregado. RoundingTruncation Um conjunto simples de classes tem é criado com o propósito de arredondar dinheiro depois de ter sido trocado e depois da aritmética do dinheiro. Está fora do namespace da Moeda, portanto pode ser usado onde quer que seja necessária a troca de arredondamento. Arredondamento do arredondamento O arredondamento do modelo estático é a classe base abstrata que define a operação básica para o arredondamento. As subclasses fornecem a implementação de seus tipos específicos de arredondamento (padrão de estratégia). RoundingTruncation Implementation Notes O CeilingFloorTruncation classes são subclasses concretas implementando os dois tipos básicos de truncamento com precisão arbitrária. A precisão é especificada pelo cliente passando um int representando a precisão decimal do número truncado. ComputersRuleRounding ronda exatamente como VBExcel faz para moedas: quando o primeiro dígito caiu é 5 sem dígitos a seguir ou 5 com os seguintes dígitos, então adicione 1 ao arredondamento se o dígito atual for estranho, deixe-o como se fosse mesmo. Tal como acontece com as classes de truncamento, o cliente apenas especifica a precisão interna. EuroRounding rounds conforme especificado no Euro Paper 22 (encontre-o em europa. eu. it): Ronda para 2 dígitos. Se o 3º dígito significativo for inferior a 5, então arredondar para baixo, senão arredondar. Como a precisão já está definida pela especificação, apenas o construtor padrão está disponível. CustomRounding é implementado para seguir as diretrizes de OMG para o arredondamento (pelo menos na especificação de Moeda). O cliente passa tanto na precisão quanto no dígito de arredondamento após a construção. A implementação redonda verifica o primeiro dígito após a precisão especificada para ver se é igual ou maior do que o dígito de arredondamento. Se assim for, ele ronda o dígito anterior, senão o deixa inalterado. Por exemplo, se a precisão2 e o dígito de arredondamento4, o número 458.564 arredondaria até 458.57. O número 458.563 seria de 458.56. Observe que isso também pode ser usado para construir um objeto LooseEuroRounding usando 5 como o dígito de arredondamento e selecionando uma precisão maior do que 2. Date-Time e amount of time DateTime estende o conceito de Date em QuantLib para incluir um componente de tempo, bem como Aumentando a interface para ser mais OMG DTime como. Ele foi projetado para ser compatível com o uso atual do QuantLib Date. Isso não garante a compatibilidade com todo o uso do cliente QuantLib :: Date, no entanto. AmountOfTime é usado com a classe DateTime para uma adição flexível de data e hora e para representar uma diferença entre dois DateTimes. DateTime Static Model DateTime é uma classe abstrata que declara as operações para a funcionalidade básica do tempo da data. É mais ou menos uma união entre as operações no QuantLib :: Date e a definição de interface de valor OMG DTime. Ele também contém membros estáticos que definem a data, hora mínima, máxima e padrão. A primeira implementação concreta do DateTime é ExcelDateTime. Como o número de série do Excel pode conter precisão para o segundo (na parte fracionada), a classe ExcelDateTime alavanca a classe existente Quantlib :: Date para representar DateTime. No futuro próximo, serão criadas outras classes concretas mais eficazes do DateTime. Este será o assunto de uma QuEP ainda por vir. Você notará que o idioma pimpl não foi usado para a hierarquia de classes DateTime. Para que o idioma pimpl seja mais benéfico, as classes concretas de implementação não devem definir novas operações fora da construção do objeto. Cada um deve conter uma implementação específica para as operações definidas na superclasse de implementação abstrata. No caso do DateTime, já sabemos que pelo menos uma subclasse estará adicionando operações que são exclusivas dessa subclasse. Por exemplo, o ExcelDateTime possui getters e setters para o número de série do estilo do Excel que ele contém. Provavelmente nenhuma outra classe concreta DateTime precisará dessas operações. À medida que outras implementações do DateTime forem criadas, serão adicionadas outras operações igualmente únicas (por exemplo, formatDateformatTime). Como essas novas operações não podem ser definidas em termos daquelas existentes na superclasse, não é apropriado usar o idioma pimpl aqui. A classe QuantLib :: Date ainda se destina a ser usada por meio de suas operações estáticas. Não há nenhuma operação correspondente de isLeapYear na nova interface DateTime. AmountOfTime (não no modelo) não é uma extensão da classe Quantlib :: Period. Em vez disso, é uma nova classe implementada mais ou menos exatamente ao longo das linhas da interface DAmountOfTime da especificação OMG. Se necessário, a classe Período pode ser aprimorada para retornar uma representação AmountOfTime de si mesma, mas esse não é o foco desse aprimoramento. Notas de implementação do DateTime Além das operações mostradas no modelo estático, há operadores sobrecarregados para fornecer comparações DateTime (lt, lt, gt, gt,), para subtrair uma data de outra e para adicionar ou subtrair um AmountOfTime de DateTime . Aqui estão exemplos dos operadores aritméticos: DateTime AmountOfTime DateTime DateTime - AmountOfTime DateTime DateTime - DateTime AmountOfTime Horas, Minutos, Segundos, os tipos mostrados no modelo são typedefd para ints. Isso está em linha com o tipo de dia atual do QuantLibs. Devo incluir mais sobre as Exceções ou simplesmente deixá-lo para a documentação técnica (ou seja, doxygen). Formatação: Eu vou dar uma olhada nessa situação. Conclusão Experimente a moeda corrente. Você verá que pode ser divertido. O feedback sobre a proposta acima deve ser postado na lista de discussão QuantLib-dev.

No comments:

Post a Comment