Monday, February 27, 2017

Forex Quantlib

Voici quelques suggestions. Recherchez Amazon (ou votre libraire préféré) pour des livres concernant C finance quantitative. J'ai trouvé plusieurs titres qui semblent prometteurs. Je suis allé à SourceForge (recherche sur les systèmes de négociation) et a vu plusieurs systèmes prometteurs qui pourraient vous donner une jambe en amont, MAE, etc. J'utilise TradeStation 9.0 pour comparer différentes stratégies de négociation. Il fournira des graphiques MAEMFE, des courbes d'équité commerciale et des stratégies de classement basées sur le tirage maximal. Mais n'oubliez pas de lire les systèmes de négociation qui fonctionnent: Construire et évaluer des systèmes de négociation efficaces par Thomas Stridsman pour une critique appropriée des rapports générés TradeStations. Bien que je ne puisse citer aucun élément de preuve à l'appui, je suis sûr que les outils de l'analyse technique peuvent être utilisés dans les pays en développement De telles stratégies. Quant à savoir si TAlib est écrit en C ou C, bien je suis corrigé. Ndash babelproofreader Apr 3 11 at 14: 37Le projet QuantLib vise à fournir un cadre logiciel complet pour la finance quantitative. QuantLib est une bibliothèque open-source gratuite pour la modélisation, le commerce et la gestion des risques dans la vie réelle. QuantLib est écrit en C avec un modèle d'objet propre et est ensuite exporté vers différentes langues telles que C, Objective Caml, Java, Perl, Python, GNU R, Ruby et Scheme. Une version AAD-enabled est également disponible. Le projet de dépôt facilite le déploiement des bibliothèques d'objets vers les plates-formes utilisateur finales et est utilisé pour générer QuantLibXL. Un addin Excel pour QuantLib et QuantLibAddin. QuantLib addins pour d'autres plateformes telles que LibreOffice Calc. Liaisons vers d'autres langues et portage vers Gnumeric, MatlabOctave, S-PLUSR. Mathematica. Les architectures COMCORBASOAP, FpML, sont à l'étude. Voir la page des extensions pour plus de détails. Apprécié par les analystes quantitatifs et les développeurs, il est destiné aux universitaires et aux praticiens, favorisant éventuellement une interaction plus forte entre eux. QuantLib propose des outils qui sont utiles à la fois pour la mise en œuvre pratique et pour la modélisation avancée, avec des caractéristiques telles que les conventions de marché, modèles de courbe de rendement, solveurs, PDE, Monte Carlo (faible écart inclus), options exotiques, VAR et ainsi de suite. Les finances sont un domaine dans lequel des projets ouverts et bien écrits peuvent faire une énorme différence: toute institution financière a besoin d'une mise en œuvre solide, efficace et efficace de modèles de tarification et d'outils de couverture. Cependant, pour y arriver, on est actuellement contraint de réinventer la roue à chaque fois. Même les modèles décennaux traditionnels, tels que Black-Scholes, n'ont toujours pas une mise en œuvre publique robuste. En conséquence, de nombreux bons quants perdent leur temps à écrire des classes C qui ont déjà été écrites des milliers de fois. En concevant et en construisant ces outils à l'air libre, QuantLib encouragera à la fois l'examen par les pairs des outils eux-mêmes et montrera comment cela devrait être fait pour les logiciels scientifiques et commerciaux. Dan Gezelters à la première conférence Open SourceOpen Science a discuté de la façon dont la tradition scientifique de l'examen par les pairs correspond bien à la philosophie du mouvement Open Source. Les normes ouvertes sont le seul moyen juste pour que la science et la technologie évoluent. La bibliothèque pourrait être exploitée auprès de différentes institutions de recherche et de réglementation, banques, sociétés de logiciels, etc. Étant un projet de source libre, les quants contribuant à la bibliothèque n'auraient pas besoin de partir de zéro à chaque fois. Les étudiants pourraient maîtriser une bibliothèque qui est réellement utilisé dans le monde réel et de contribuer à elle d'une manière significative. Cela pourrait les placer dans une position privilégiée sur le marché du travail. Les chercheurs disposeraient d'un cadre de travail qui réduirait considérablement le travail de faible niveau nécessaire pour construire des modèles, afin de pouvoir se concentrer sur des problèmes plus complexes et intéressants. Les entreprises financières pourraient exploiter QuantLib comme code de base et / ou benchmark, tout en étant en mesure de s'engager dans la création de solutions plus innovantes qui les rendraient plus compétitifs sur le marché. Les institutions de réglementation peuvent disposer d'un outil de tarification standard et de pratiques de gestion des risques. La licence QuantLib est une licence BSD modifiée pouvant être utilisée à la fois dans des logiciels libres et des applications propriétaires, sans imposer aucune contrainte à l'utilisation de la bibliothèque. Quelques entreprises ont consacré d'importantes ressources au développement de cette bibliothèque notamment StatPro. Un fournisseur de premier plan international de gestion des risques, où le projet QuantLib est né. QuEP 6: Monnaie, argent et taux de change Cette proposition vise à améliorer QuantLib avec un nouveau module de gestion des devises, de l'argent et des devises. La mise en œuvre suit de près les spécifications OMG Currency (ftp: ftp. omg. orgpubdocsformal00-06-29.pdf), mais pas à la fin de 100 OMG conforme. En plus des nouvelles classes, certaines fonctionnalités actuelles relatives aux concepts de date et de temps sont étendues pour répondre aux besoins du module de devises. Mise en œuvre et désavantages actuels Il s'agit d'une amélioration complémentaire pour les fonctionnalités manquantes plus que d'une extension de toute implémentation courante. La devise n'existe que sous la forme d'une énumération de certains codes de devises ISO. En dehors de cela, il n'ya pas d'abstractions de monnaie, d'argent ou de taux de change disponibles à l'intérieur de la bibliothèque. Une abstraction Date existe dans la classe QuantLib :: Date et contient une implémentation de date assez complète. Cependant, il n'a pas de composant temporel pour représenter la date et l'heure. Une autre limite potentielle est que la date est une classe unique et concrète. En ajoutant une classe abstraite contenant l'interface date-heure, la mise en œuvre serait libérée et d'autres pourraient être ajoutés (modèle de stratégie). L'implémentation actuelle est basée sur un numéro de série de date (comme dans Excel) qui doit être manipulé pour produire la date sous toute autre forme. Bien que fonctionnellement correct, il peut être un frein à la performance. Fournir une classe abstraite Date-Time au lieu d'envelopper QuantLib :: Date nous permet d'ajouter de nouvelles implémentations Date et DateTime au besoin. La quantité de temps existe comme QuantLib :: Period, mais la mise en œuvre est limitée à une utilisation spécifique. Il peut contenir une unité de temps en tant qu'entier, mais ne peut pas convertir entre les unités. En outre, une fois un objet Période est construit, il ne peut pas changer la précision. Par exemple, si l'objet Période est créé pour contenir des semaines, il ne peut traiter une quantité de temps telle que 2 semaines, 2 jours, 12 heures. Il peut gérer certaines des fonctionnalités nécessaires pour contenir une quantité de temps, mais il n'est pas aussi flexible que l'objet OMG DAmountOfTime. QuantLib :: Period est très bien pour ce qu'il représente, mais la bibliothèque a besoin de la fonctionnalité dans AmountOfTime comme classe complémentaire. Mise en œuvre proposée Suivant la spécification OMG, le module monétaire peut être divisé en quatre composantes principales et les améliorations à apporter. Les nouvelles composantes sont: Monnaie: le concept de la monnaie comme un mnémonique, la description, le symbole, les conventions d'échange, les conventions d'arrondi, etc Money: un montant d'une certaine monnaie fournissant des opérations mathématiques, les paramètres d'entrée et de retour pour les devises étrangères, etc. Tarifs: classes pour maintenir des taux de change dynamiques et statiques et gérer les tables de taux de change. Les formateurs d'argent. Les améliorations sont les suivantes: le nombre de classes de date et d'heure de la classe d'heures les classes d'arrondi Pour une explication plus détaillée du module, voir le document OMG associé (ftp: ftp. omg. orgpubdocsformal00-06-29.pdf). Quantlib :: Currency Namespace Remarque Toutes les classes de devise, d'argent et de taux de change correspondantes dans un nouvel espace de noms appelé Currency. Les améliorations de support sont toutes contenues dans l'espace de noms QuantLib. Monnaie Description de la composante Monnaie encapsule les informations descriptives de base d'une devise, les méthodes utilisées pour créer une devise et. Cela comprend: le nom de la devise. par exemple. Mnémonique en dollars américains, p. Code numérique USD, par ex. 840 (utilisé pour les monnaies ISO) symbole, par ex. Symbole de fraction, par ex. Cent; 10 rapport de la fraction à l'ensemble, par ex. 100 pour dollar: cents description par ex. Date d'introduction (Date par défaut de QuantLib) date d'expiration, par ex. (Date par défaut de QuantLib) si elle représente et description de la monnaie ISO si ISO, quelle version il représente si la sortie interne externe doit afficher des opérations partielles fractionnées pour permettre le réglage de la sortie interne externe afficher un ensemble de paramètres régionaux pour lesquels la monnaie est utilisée Méthode de modélisation des devises et modèle statique La hiérarchie des classes de devises utilise l'expression pimpl pour la copie légère et pour rendre le comportement de devise polymorphe disponible pour les scripts Langues sans les problèmes de modèle Handle. La classe de base Currency contient une classe Handle to the CurrencyImpl abstract qui comprend les champs de données et les définitions getter pour Currency. (Pour plus d'informations sur l'idiome Pimpl, voir 1: Implémentation de comportement polymorphe à l'aide de l'idiome Pimpl. Habituellement, lors de l'application de l'idiome Pimpl, toutes les opérations appelées sur la monnaie serait ensuite Proxied aux opérations homologues sur la classe CurrencyImpl par la référence Handle. Pour la classe Currency, cela est uniquement vrai pour les opérations addLocale et removeLocale. Le reste accède directement aux variables de membre public de la CurrencyImpl. Il créerait plus de travail pour dupliquer toutes les opérations getXXX dans les classes Currency et CurrencyImpl sans fournir d'avantages clairs. La seule responsabilité des sous-classes CurrencyImpl est de définir l'implémentation des opérations addLocaleremoveLocale et setExternInternOutputShowingFractions et l'initialisation des données lors de la construction. La classe DefaultCurrency est utilisée par le client pour créer des devises qui n'existent pas déjà en tant que classes dans la bibliothèque. Un constructeur par défaut qui crée une devise avec uniquement les valeurs de données par défaut et un constructeur qui prend les paramètres pour créer un objet Currency avec des valeurs spécifiées par l'utilisateur. Il existe également plusieurs sous-classes de devise qui mettent en œuvre les monnaies ISO les plus courantes. Ils sont tous conçus comme des singletons de sorte que leurs constructeurs sont déclarés protégés. Les instances doivent être createdretrieved en appelant l'opération getInstance sur chacune. La classe d'adaptateur ISOCurrencyImpl définit addLocaleremoveLocale de sorte que les sous-classes ISOCurrencyImpl ne doivent gérer l'initialisation des données que pour la définition de devise ISO pertinente. Les classes de devise ISO prévues sont USDCurrency, JPYCurrency, EURCurrency et GBPCurrency. Cette liste augmentera au besoin. Notes sur l'implémentation des devises Voici une description des champs de données de la classe CurrencyImpl. Collectivement, ils contiennent les informations d'état pour chaque objet de devise. Chaîne nom chaîne chaîne mnémonique chaîne numérique chaîne de caractères fractionSymbole chaîne de description Ils sont censés contenir des données ISO 4217: 1995, mais c'est laissé au client de construire l'instance de devise. Long Currency :: scaleFactor Il s'agit du nombre de chiffres significatifs préférés pour représenter un montant de cette devise. Pour l'instant, le réglage du scaleFactor n'a aucun effet. Il est destiné à être utilisé par Money via la référence de l'objet Décimal (Money. value). Pour le moment, Decimal est juste un typedef à un double, donc scaleFactor n'a pas encore de pertinence. Int ratioFract2Whole Le rapport de la part de la fraction à la partie entière d'une devise est le rapport entre la plus petite unité de la partie fractionnaire d'une devise et une unité de la partie entière d'une devise. Le rapport pour les dollars des États-Unis est cent pennies à un dollar, donc ratioFract2Whole 100. Dans les cas où il n'y a pas de partie mineure d'une devise (c'est-à-dire Yen), elle sera définie sur 1. DateTime introductionDate DateTime expirationDate IntroductionLa date d'expiration contient une date par défaut si elle n'existe pas. La date par défaut utilisée est définie par l'implémentation de classe QuantLib :: DateTime si aucune n'est fournie par le client instanciant la devise. Boolean isISO chaîne isoVersion Pour en savoir plus sur les noms et codes de devise ISO, consultez la spécification de devise ISO 4217: 1995. Vectorltstringgt locale Un utilisateur peut ajouter et supprimer des locales à partir de n'importe quelle devise. Une deviseException de type UNKNOWNLOCALE sera lancée si l'environnement local transmis n'est pas trouvé dans la liste des paramètres ISO définis (ISO 4217: 1995). Arrondi prefRounding Certaines devises ont préféré arrondi exigences. La classe Money l'utilise pour déterminer comment redonner aux opérations arithmétiques si aucune autre classe d'arrondi n'est spécifiée. Currency nextCurrencylastCurrency Ces opérations seront utilisées par ExchangeRateManager afin de suivre les exigences d'échange triangulé de certaines devises. Toutes les monnaies membres de l'Euro retourneront l'instance de EURCurrency. Il y en a d'autres dans les notes ExchangeRateManager. L'argent peut être considéré comme une instance monétaire. Il détient une valeur décimale (une certaine quantité d'argent) et prévoit des opérations d'arithmétique et de comparaison sur ce montant d'argent. Notez que la classe Money utilise un nouveau type: Decimal. Pour l'instant, c'est juste un typedef à un double. Pour aller de l'avant il devrait typedef à une classe qui contient la précision arbitraire de la représentation décimale standard sur toutes les plates-formes et non soumis aux problèmes d'arrondissement avec les flotteurs. Pour plus de commodité, cela devrait probablement exposer les opérations mathématiques comme l'arrondissement (par le compositeur Rounding classe), abs, etc Mais cela devrait faire l'objet d'un autre QuEP. Money Static Model Money est une classe concrète fournissant toutes les opérations nécessaires pour créer une nouvelle instance, comparer deux objets Money et faire des mathématiques de base. Le client peut instancier un objet Money avec un arrondi différent de celui que la devise préfère et / ou fournir une référence à un objet ExchangeRateManager (pour la conversion de devise). Au minimum, le client doit passer une devise et un décimal pour créer une instance Money. Money tentera d'utiliser l'arrondissement associé à sa devise si aucun autre objet Arrondi n'est spécifié. Si la devise n'a aucun arrondi spécifique qui lui est associé, aucun arrondissement ne sera effectué jusqu'à ce que le client fournisse un objet Arrondi avec l'opération setRounding. La classe CurrencyParams contient deux variables statiques utilisées par Money lorsque vous essayez des mathématiques sur deux objets Money de différentes devises. ConversionType contient les valeurs qui indiquent si ce type d'opération est légal et si oui quel type de conversion à utiliser. La BaseCurrency fait référence à la devise à utiliser pour la conversion si ConversionType BASECURRENCYCONVERSION. Lorsque la conversion automatique est autorisée et que deux Monnaies avec différentes devises sont ajoutées, soustraites, multipliées ou divisées, le résultat sera une instance Money avec la devise sur le côté droit de l'opérateur. MoneysourceCcy MoneytargetCcy MoneytargetCcy Si la conversion de devise de base est autorisée, alors le résultat est en termes de CurrencyParams. BaseCurrency MoneyoneCcy MoneyanotherCcy MoneybaseCcy Ceci s'applique uniquement aux opérateurs. Si l'opération ajouter (argent m) est passé un argent avec une devise différente, le résultat sera reflété dans la valeur Money. dans cet objet. La devise sera la même qu'avant d'ajouter a été appelé. S'il vous plaît noter, chaque fois que l'échange de devises est nécessaire pour faire des mathématiques ou des tests logiques, les valeurs sont converties d'abord, puis le calcul est effectué sur les valeurs converties. L'arrondissement est appliqué à chaque montant converti individuellement en appelant Money. round () sur chacun. Par exemple, en utilisant les exemples ci-dessus, l'illustration ci-dessous décrit les étapes de conversion et d'arrondissement: Conversion automatique Case Money1sourceCcy Money2targetCcy Money3targetCcy convert Money1sourceCcy - gt Money1targetCcy Money1targetCcy. round () - en utilisant le même objet d'arrondi que Money2targetCcy ajouter Money1 Money2 Base Currency Conversion Money1oneCcy Money2anotherCcy MoneyBaseCurrency convert Money1oneCcy - gt Money1baseCcy Money1baseCcy. round () - en utilisant l'objet Arrondi par défaut pour BaseCurrency Money2baseCcy. round () - en utilisant l'objet Arrondi par défaut pour BaseCurrency ajouter Money1 Money2 Que ce soit ou non une tentative d'adjonction de deux Moneys avec différentes Devises Sera réussie est déterminée par ce qui suit: L'argent doit contenir une référence à un objet ExchangeRateManager qui est capable de fournir tous les taux de change nécessaires pour effectuer une conversion. Le CurrencyParams. ConversionType doit être BASECURRENCYCONVERSION ou AUTOMATEDCONVERSION Opérateurs de comparaison Outre les opérateurs mathématiques, les opérateurs logiques suivants sont également surchargés: Money :: round () arrondi () Si la devise spécifie une préférence d'arrondi (par exemple EURCurrency), l'arrondissement Sera activé (isRounding retournera true). Cela indique que toutes les opérations arithmétiques seront terminées en arrondissant la valeur finale. La précision résultante est bien sûr déterminée par la mise en œuvre de l'arrondi utilisée. Si la devise ne spécifie pas de type d'arrondi, l'arrondissement reste désactivé, l'arrondi d'appel () retournera 0 et le tour d'appel () n'aura aucun effet sur la valeur. Gestionnaires de taux de change et de taux de change L'abstraction de taux de change contient des références à la devise source, à la devise cible, au facteur de conversion et à un identificateur de type de taux. Il fournit des opérations pour l'échange d'argent entre la source et la devise cible. L'utilisation d'un membre MarketElement pour représenter le facteur de conversion rend le taux de change observable pensé une interface commune. Un type spécialisé de taux de change fournit des taux de change à date limitée. L'abstraction du gestionnaire de taux de change contient une collection de taux de change et des opérations d'ajout, de suppression et d'interrogation. Les look ups sont basés sur la devise source, la devise cible et le type de taux. Si cette option est définie, la recherche peut créer et retourner des taux dérivés lorsqu'aucun taux direct explicite n'existe. Elle prend également en compte les besoins d'échange triangulé s'ils sont présents dans les devises source et / ou cible (par exemple, les devises de l'Euroland). L'abstraction connexe, DExchangeRateManager, effectue les mêmes fins, mais pour les taux de change à date limitée. Gestionnaire de taux de change et de taux de change Modèle statique ExchangeRate est une classe concrète qui peut être construite avec une source Currency, une cible Currency, un facteur de conversion MarketElement et éventuellement une chaîne Type. Si aucun type de chaîne n'est fourni, il sera par défaut de diriger. Le facteur de conversion est une référence à un QuantLib :: MarketElement fournissant les avantages de l'observateur observable et la cohérence avec le reste de la bibliothèque. La variable RateChain ExchangeRateList est un vecteur à utiliser lorsqu'un échange direct n'est pas possible. Il n'y a pas d'organismes publics. Toutes les modifications apportées au facteur de conversion doivent être effectuées via MarketElement. La fonction principale, l'échange. Prend l'argent de la devise source ou cible et renvoie une nouvelle référence d'objet Money de la devise cible ou source. DExchangeRate étend ExchangeRate pour ajouter des opérations startDateendDate. Il fournit également des constructeurs pour inclure DateTime startDateendDate. RateManager est un modèle fournissant des fonctions pour le stockage et la recherche de ExchangeRates. Une sous-classe RateManager ajoute l'opération de recherche qui prend également une DateTime comme paramètre de recherche. Le type ExchangeRateManager et DExchangeRateManager sont typedefs à RateManagerltExchangeRategt et à DRateManagerltDExchangeRategt, respectivement. Les ExchangeRates sont détenus dans un RateMap pour une recherche efficace. Pour maintenant, RateMap est un typedef à une carte, mais si le besoin se présente pourrait être un typedef à un HashMap approprié. ExchangeRateManager et DExchangeRateManager sont des classes concrètes qui maintiennent et effectuent des recherches sur les membres ExchangeRateList et DExchangeRateList, respectivement. Ils ont été conçus comme des classes distinctes parce que les opérations doivent être nommées identiques et dans certains cas prennent les mêmes paramètres (la fonction lookupRate), mais retournent différents types. Ce comportement polymorphe n'est pas valide et ne peut donc pas être exprimé dans une hiérarchie de classes. Les fonctionnalités qu'ils partagent (bien que non publiquement) sont héritées de la base de la superclasse ExchangeRateManager. Tâche de change et gestionnaire de taux de change Notes d'implémentation typedef VectorltExchangeRategt ExchangeRateList typedef VectorltDExchangeRategt DExchangeRateList typedef RateManagerltDExchangeRategt RateMapager RateManagerltDExchangeRategt DRateMap ExchangeRateManager :: lookupRate () Au minimum, cette fonction a besoin d'une cible et d'une devise source. ExchangeRateManager tentera de trouver un ExchangeRate avec les mêmes monnaies sourcetarget en premier, suivi d'un ExchangeRate avec les devises sourcetarget dans l'ordre inverse. Si aucun type n'est spécifié, le type de tout sera supposé. Le type de priorité suivant est utilisé: type direct type dérivé Si un type spécifique est transmis, seul un taux de change de ce type sera retourné. Parce que ExchangeRate. type est défini comme une chaîne, il peut être défini par le client, mais ils choisissent. Toutefois, l'ExchangeRateManager reconnaît les types suivants comme spéciaux: any: si aucun est transmis, la recherche agit comme indiqué ci-dessus. C'est la même chose que d'appeler lookupRate sans passer le paramètre de type direct: le type par défaut pour ExchangeRates défini par le client. Si transmis, aucun type dérivé ne peut être renvoyé. Dérivé: lorsque ExchangeRateManager crée un ExchangeRate par triangulation, il renvoie un taux de type dérivé. Ils peuvent être ajoutés au gestionnaire ExchangeRate pour plus d'efficacité. LookupRate gère les cas où des règles spécifiques ont été données pour l'échange à travers une devise intermédiaire. Par exemple, tous les échanges de devises entre les monnaies de l'euro et toute autre monnaie doivent d'abord être échangés par l'euro. Cela est également vrai pour la monnaie de l'euro aux échanges de devises de l'euro. (Europa. eu. it) ExchangeRateManager utilise les informations Currency. nextCurrencylastCurrency pour construire un ExchangeRate de type dérivé qui suit les conventions de triangulation d'échange. ExchangeRateManager :: isAutoAddDerivedsetAutoAddDerived Des options sont disponibles pour ajouter automatiquement les taux de change dérivés à la carte interne afin que les recherches ultérieures soient plus efficaces. ExchangeRate :: Exchange () L'implémentation de conversion permet un échange bidirectionnel basé sur le Money. currency passé. Par exemple, si le ExhangeRate a été construit avec USD comme monnaie source et EUR comme la devise cible (ExchangeRateUSD2EUR), puis en passant Dans un MoneyEUR ferait le MoneyEUR. value () être divisé par la valeur de conversionFactors. Une nouvelle instance de MoneyUSD avec le résultat serait renvoyée. À l'inverse, le passage d'un MoneyUSD ferait que MoneyUSD. value () soit multiplié par la valeur conversionFactors. Une nouvelle instance de MoneyEUR avec le résultat serait retournée. Notez que l'échange ne tourne pas avant de renvoyer l'instance Money. Si le client souhaite une valeur arrondie, appelez l'opération Money. round. Si la conversion se produit en raison de l'arithmétique sur des deniers dénommés différemment, l'arrondi est laissé à l'objet Money. Cela ne se produit pas ici. Dans le cas où le taux de change est dérivé de type, cela signifie que le tauxChain contient un vecteur d'objets ExchangeRate. Dans ce cas, plutôt que d'utiliser le conversionFactor, l'échange itérait dans la liste de haut en bas appelant échange sur chacun. Par exemple, si ExchangeRate est dérivé pour convertir FRF en JPY et le tauxChain contient les éléments suivants: ExchangeRateFRF à EUR ExchangeRateJPY à EUR Appel d'échange (MoneyFRF) ferait ce qui suit :: MoneyEUR ExchangeRateFRF2EUR. exchange (MoneyFRF) MoneyJPY ExchangeRateEUR2JPY. exchange MoneyEUR) return MoneyJPY ExchangeRate :: type () Les types utilisés par les ExchangeRateManagers sont directs et dérivés, bien que les clients créant de nouvelles instances ExchangeRate puissent entrer n'importe quelle chaîne. Lorsque vous ajoutez ExchangeRates à un ExchangeRateManager, la seule condition est que la combinaison des devises de type, source et cible doit être unique. Direct est la valeur par défaut pour les instances client instanciées car le facteur de conversion représente un mappage explicite de la source vers la devise cible. Derivé est utilisé par le ExchangeRateManager pour indiquer qu'il a construit le ExchangeRate à partir d'une chaîne de Direct andor Derived taux. Notez que l'opérateur (égal) est également surchargé. RoundingTruncation Un ensemble simple de classes a est créé pour les besoins d'arrondir l'argent après qu'il a été échangé et après l'arithmétique de l'argent. Il se trouve en dehors de l'espace de noms Currency, donc peut être utilisé partout où roundingtruncation est nécessaire. RoundingTruncation Static Model Rounding est la classe de base abstraite définissant l'opération de base pour l'arrondissement. Les sous-classes fournissent l'implémentation de leurs types d'arrondis (modèle de stratégie). RoundingTruncation Notes d'implémentation Les classes CeilingFloorTruncation sont des sous-classes concrètes implémentant les deux types de troncature de base avec une précision arbitraire. La précision est spécifiée par le client en transmettant un int représentant la précision décimale du nombre tronqué. ComputersRuleRounding rounds juste comme VBExcel fait pour les devises: quand le premier chiffre est tombé est 5 avec pas de chiffres suivants ou 5 avec les chiffres suivants, puis ajouter 1 à l'arrondissement si le chiffre actuel est impair, laissez-le comme est si même. Comme avec les classes de troncature, le client spécifie uniquement la précision interne. EuroRounding rounds comme spécifié dans Euro Paper 22 (trouver à europa. eu. it): Ronde à 2 chiffres. Si le 3ème chiffre significatif est inférieur à 5, alors arrondissez vers le bas, sinon arrondissez. Comme la précision est déjà définie par la spécification, seul le constructeur par défaut est disponible. CustomRounding est implémenté pour suivre les directives OMG pour l'arrondissement (au moins dans la spécification de la devise). Le client transmet à la fois la précision et le chiffre d'arrondi lors de la construction. L'implémentation ronde vérifie le premier chiffre après la précision spécifiée pour voir si elle est égale ou supérieure au chiffre d'arrondi. Si c'est le cas, il arrondit le chiffre précédent, sinon il reste inchangé. Par exemple, si précision2 et arrondi chiffre4, alors le nombre 458.564 arrondirait à 458.57. Le nombre 458.563 s'arrondirait à 458.56. Notez que cela pourrait également être utilisé pour construire un objet LooseEuroRounding en utilisant 5 comme chiffre d'arrondi et en sélectionnant une précision supérieure à 2. Date-Time et quantité de temps DateTime étend le concept de Date dans QuantLib pour inclure un composant de temps ainsi que L'amélioration de l'interface pour être plus OMG DTime comme. Il a été conçu pour être compatible avec l'utilisation actuelle de QuantLib Date. Cela ne garantit pas la compatibilité avec toute l'utilisation client de QuantLib :: Date, cependant. AmountOfTime est utilisé avec la classe DateTime pour l'ajout date-heure flexible et pour représenter une différence entre deux DateTimes. DateTime Modèle statique DateTime est une classe abstraite qui déclare les opérations pour la fonctionnalité de date de base. Il s'agit plus ou moins d'une union entre les opérations sur QuantLib :: Date et la définition de l'interface OMG DTime. Il contient également des membres statiques définissant les dates et heures minimale, maximale et par défaut. La première mise en œuvre concrète de DateTime est ExcelDateTime. Étant donné que le numéro de série Excel peut contenir la précision jusqu'à la seconde (dans la partie fractionnaire), la classe ExcelDateTime exploite la classe Quantlib :: Date existante pour représenter DateTime. Dans un futur proche, d'autres classes DateTime concrètes plus efficaces seront créées. Ce sera le sujet d'un QuEP encore à venir. Vous remarquerez que l'idiome Pimpl n'a pas été utilisé pour la hiérarchie de classe DateTime. Pour que l'idiome pimpl soit le plus bénéfique, les classes concrètes de mise en œuvre ne devraient pas définir de nouvelles opérations en dehors de la construction de l'objet. Ils doivent contenir chacun une implémentation spécifique pour les opérations définies dans la superclasse d'implémentation abstraite. Dans le cas de DateTime, nous savons déjà qu'au moins une sous-classe ajoutera des opérations qui sont uniques à cette sous-classe. Par exemple, ExcelDateTime a getters et setters pour le numéro de série de style Excel qu'il contient. Il est probable qu'aucune autre classe concret DateTime n'aura besoin de ces opérations. À mesure que d'autres implémentations DateTime sont créées, d'autres opérations semblables seront ajoutées (par exemple formatDateformatTime). Parce que ces nouvelles opérations ne peuvent pas être définies en termes de ceux existant dans la superclasse, il n'est pas approprié d'utiliser l'idiome pimpl ici. La classe QuantLib :: Date est toujours destinée à être utilisée par ses opérations statiques. Il n'y a pas d'opération isLeapYear correspondante sur la nouvelle interface DateTime. AmountOfTime (non dans le modèle) n'est pas une extension de la classe Quantlib :: Period. Au lieu de cela, il s'agit d'une nouvelle classe implémentée plus ou moins exactement selon les lignes de l'interface OMG spec DAmountOfTime. Si nécessaire, la classe Période pourrait être améliorée pour renvoyer une représentation AmountOfTime de lui-même, mais ce n'est pas le focus de cette amélioration. Notes d'implémentation DateTime Outre les opérations indiquées dans le modèle statique, il existe des opérateurs surchargés pour fournir des comparaisons DateTime (lt, lt, gt, gt), pour soustraire une date d'une autre, et pour ajouter ou soustraire un AmountOfTime d'une DateTime . Voici des exemples d'opérateurs arithmétiques: DateTime AmountOfTime DateTime DateTime - AmountOfTime DateTime DateTime - DateTime AmountOfTime Heures, Minutes, Secondes types montrés dans le modèle sont typedefd à ints. Ceci est en ligne avec QuantLibs jour type. Devrais-je inclure plus d'informations sur les exceptions ou la laisser juste pour la documentation technique (c'est-à-dire doxygen) Mise en forme: Je vais jeter un coup d'oeil à ce en attendant. Conclusion Essayez la devise. Vous verrez que cela peut être amusant. Les commentaires sur la proposition ci-dessus doivent être affichés dans la liste de diffusion QuantLib-dev.


No comments:

Post a Comment