Afin de réaliser différentes stratégies pour la spéculation ou la couverture de risque, les gestionnaires de fonds cherchent de divers instruments financiers basiques pour construire les produits dérivés composés possédant les caractéristiques favorables pour un profit élevé ou contre le risque de marché. Par exemple, pour bien couvrir les titres sous-jacents, les multiples stratégies simples ou composées des options [1] se produisent en suivant les règles élémentaires en commun, qui indépendamment récupèrent les actifs et options nécessaires à acheter ou à vendre dans le marché avant de générer leurs P&L en total. Les positions acheteur et vendeur qui représentent une stratégie pourraient être très nombreuses, lorsque les recherches des contrats financiers seraient simplement effectuées individuellement à la chaîne. De plus, une stratégie ne peut s’appliquer que sur un seul type d’actif couvert par des options du style identique (par exemple, européen ou américain). Si l’on ne met en œuvre toutes les stratégies que par la fabrique [2], les branches de vérifications seront très importantes dans le code. D’ailleurs, différente que le problème résolu par la fabrique abstraite [3] faisant face au défi des composants complexes dans un objet, notre issue actuelle consiste à créer une interface de fabrication élastique, qui pourrait éventuellement réduire ou augmenter à l’aise les positions présentées dans la procédure de création d’une stratégie au gré des demandes.
En effet, le patron de conception : le moteur (builder en anglais) saura répondre à cette question comment construire un objet complexe lors de sa représentation. À l’instar des autres patrons de conception créateurs[4], il s’occupe de fabriquer les objets d‘un même processus, lorsque les éléments des différentes représentations sont créés par un moteur spécifique et composés chez un directeur moteur. À cet égard, dans notre contexte les moteurs héritant d’une même interface de moteur offrent les positions simples et représentées en option des différents styles avec les actifs sous-jacents très variés. Ils implémentent indépendamment les positions dans leurs sous-classes, alors que le directeur prenant un de ces moteurs met ensemble ses positions concrètes et nécessaires, avant que l’on n’obtienne une stratégie d’un style des options en composition qui courent sur un titre à la demande.
Dans cet article, on va apprendre le patron de conception de moteur en guise d’une mise en place des stratégies optionnelles. Le moteur prépare les positions acheteur et vendeurs des contrats élémentaires en commun dont les stratégies peuvent disposer, avant qu’il ne les commande facilement à la chaîne, tandis que le programme respecte le principe SOLID [5].
Conception
Le diagramme ULM démontre en général deux rôles importants joués dans le patron de conception : Moteur en Python 3. D’abord c’est l’interface motrice, dans laquelle les signatures des procédures élémentaires impliquées à la fabrication complexe sont proposées et définies dans ses sous-classes. La sélection d’un des moteurs concrets a lieu chez le rôle de directeur, qui commande les étapes nécessaires à la chaîne avant de retourner l’objet à la demande du client.
Dans notre contexte, les positions basiques sont organisées de la même manière pour une stratégie complexe, lorsque les styles d’option et les titres sous-jacents se varient dans la stratégie au gré du besoin chez les produits. Du fait, on conçoit l’interface motrice pour les différentes positions éventuellement présentées dans une stratégie. On l’implémente dans les moteurs concrets pour les divers styles d’option avec les actifs sous-jacents variés. Le directeur prend un moteur dont on a besoin comme un attribut, ainsi que les méthodes qui organisent les positions étape à étape avant de fournir une stratégie instanciée.
Développement
Dans notre exemple, on s’appuie sur les 5 positions élémentaires pour réaliser une stratégie en question :
Achète des positions sous-jacentes
Achète des options call
Achète des options put
Vendre des options call
Vendre des options put
Afin de simplifier la démonstration, on définit simplement les prix d’exercice : les prix préfixés à exécuter l’option si besoin chez l’acheteur de l’option, ainsi que la maturité d’option de la stratégie et les nombres d’option nécessaires comme les arguments d’entrée, grâce auxquels les contrats correspondants pourraient être obtenus dans les marchés financiers. Les recherches ont lieu chez le moteur par les méthodes dont chacune présente une étape de construction créant une position élémentaire. Par ailleurs, faute d’espace, le code simplifie les implémentations des algorithmes pour telles recherches par les impressions de processus, en supposant que les contrats satisfaisants sont toujours disponibles dans le marché.
La classe Strategy fournit un protocole basique pour les instances stratégiques. Le directeur doit la réaliser à la demande d’un client, en organisant les appels des méthodes de production chez les moteurs. En plus, pour tester la justesse de l’instanciation des stratégies par le moteur, on enrichit la classe Strategy par la méthode __str__ qui retourne toutes les positions comprises dedans sous une chaîne de caractères.
/code
Dans un premier temps, on conçoit en Python 3 l’interface motrice IStrategyBuilder avec les méthodes de fabrication abstraites, qui sont mises en œuvre aux classes dérivées pour trouver les actions sous-jacentes avec ses options américaines, ainsi que les bonds avec ses options européennes respectivement. Toutes les méthodes retournent l’instance de son moteur, ce qui favorise les appels en chaîne sans limite chez le directeur, avant que la méthode get_strategy ne retourne l’objet stratégique en question.
Ensuite, le directeur cherche à comprendre les compositions dans chaque stratégie. Dans cet exemple, on implémente les trois stratégies parmi [6] : l’option de vente de protection (protective put en anglais) [7], le tunnel (protective collar en anglais) [8] et l’achat de papillon en call (long butterfly by calls en anglais) [9], qui sont populairement pratiquées dans la gestion des risques, lorsque les autres stratégies seraient facilement étendues grâce notamment au moteur.
A la fin, le client peut instancier un moteur intéressant à passer chez un directeur, qui prépare toutes les stratégies en combinant les représentations de position complexes, avant de retourner l’objet stratégique au gré de la demande clientèle.
Toutes les trois stratégies se valident les tests unitaires pour les actions avec les options américaines, mais aussi pour les bonds avec les options européennes, tandis que les affichages des processus détaillés sont mis en lumière ci-dessous :
Comme toutes les trois stratégies sont testées pour les deux moteurs en boucle for, les stratégies sont correctement retournées l’une après l’autre.
De cette façon, le patron de conception Moteur réduit la complexité de la fabrication des objets ayant représentations complexes à la chaîne sans limite. En effet, il nous ouvre deux dimensions d’extension possibles en code de Python 3. On pourrait développer à l’aise autant de stratégies, par exemple Box Spread [5], en rajoutant autant de positions élémentaires nécessaires chez le directeur. En parallèle, on pourrait également enrichir autant de moteurs concrets pour les nouveaux produits auxquels on mettrait les stratégies sans déranger le reste du programme, ce qui fait passer à l’échelle le développement.
Conclusion
Dans cet article, on met en évidence la nécessité du patron de conception Moteur contre l’issue des instanciations des objets avec les représentations très complexes à fabriquer à la chaîne. À l’instar des autres patrons de conceptions créateurs[4], il respecte le principe de responsabilité unique. Il s’appuie sur les représentations décomposées en composants élémentaires chez les moteurs qui sont assemblés à la chaîne sans limite en fonction du besoin chez le directeur. Le patron de conception moteur est mis en place et testé en Python 3 pour monter les options, lorsque l’enrichissement des nouvelles caractéristiques pour les nouvelles options pourrait efficacement passer à l’échelle dans le programme.
Références
[1] https://fr.wikipedia.org/wiki/Option
[2] https://www.invivoo.com/blog/fabrique-design-patterns/
[3] https://www.invivoo.com/blog/fabrique-abstraite/
[4] https://www.invivoo.com/blog/design-patterns/
[5] https://www.invivoo.com/blog/lart-clean-code-environnement-java/
[6] https://www.investopedia.com/trading/options-strategies/
[7] https://www.investopedia.com/terms/p/protective-put.asp
[8]https://www.investopedia.com/articles/active-trading/011515/how-protective-collar-works.asp
[9] https://www.investopedia.com/terms/b/butterflyspread.asp