English Русский 中文 Español Deutsch 日本語
preview
Teoria das Categorias em MQL5 (Parte 3)

Teoria das Categorias em MQL5 (Parte 3)

MetaTrader 5Integração | 8 junho 2023, 16:25
345 0
Stephen Njuki
Stephen Njuki

Introdução

No artigo anterior, analisamos a definição de categoria, focando nos seus axiomas e introduzindo os logs de ontologia. Neste artigo, exploraremos limites e colimites, enfocando nos produtos e coprodutos mais relevantes, concluindo com uma discussão sobre propriedades universais. Porém, antes de aprofundarmos como esses conceitos podem ser desenvolvidos no MQL5, seria útil compartilhar algumas ideias sobre como a teoria das categorias pode ser aplicada e utilizada em um sistema de negociação. O sistema aqui apresentado é bastante rudimentar, tendo como objetivo apenas destacar o potencial do tema para o operador de mercado.


Prólogo

Neste artigo, vamos explorar os produtos, que na teoria das categorias são uma maneira de listar pares de elementos de domínios sem perder informações prévias sobre os constituintes. Vamos criar um EA usando essa particularidade no arquivo de sinal do Assistente MQL5. Portanto, nosso produto estará entre dois domínios, especificamente entre os valores do indicador DeMarker e o Williams Percent Range. Cada um desses domínios terá morfismos com os domínios de Long Condition e Short Condition. O resultado final da soma da saída que pertence aos dois domínios, que são sinônimos das funções de compra e venda de um arquivo de sinal típico, determinará se o EA abrirá uma posição longa ou curta. Abaixo está a listagem do arquivo de sinal.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CSignalCT : public CExpertSignal
  {
protected:
   CiDeMarker        m_dmk;            // object-oscillator (first corner)
   CiWPR             m_wpr;            // object-indicator (second corner)
   //--- adjusted parameters
   int               m_periods;        // the "period of calculation" parameter of the oscillator & indicator
   ENUM_APPLIED_PRICE m_applied;       // the "prices series" parameter of the oscillator & indicator
   double            m_longdmk;        // long dmk weight
   double            m_shortdmk;       // short dmk weight
   double            m_longwpr;        // long wpr weight
   double            m_shortwpr;       // short wpr weight

public:
   //--- methods of setting adjustable parameters
   void              Periods(int value)                { m_periods=value;  }
   void              Applied(ENUM_APPLIED_PRICE value) { m_applied=value;  }
   
   void              LongDMK(double value) { m_longdmk=value;  }
   void              ShortDMK(double value) { m_shortdmk=value;  }
   void              LongWPR(double value) { m_longwpr=value;  }
   void              ShortWPR(double value) { m_shortwpr=value;  }
   //--- method of verification of settings
   virtual bool      ValidationSettings(void);
   //--- method of creating the indicator and timeseries
   virtual bool      InitIndicators(CIndicators *indicators);
   //--- methods of checking if the market models are formed
   virtual int       LongCondition(void);
   virtual int       ShortCondition(void);
                     CSignalCT(void);
                    ~CSignalCT(void);

protected:
                    
   virtual void      LongMorphism(void);
   virtual void      ShortMorphism(void);
   
   virtual double    Product(ENUM_POSITION_TYPE Position);
   
   NCT::
   CDomain<double>   long_product,short_product;
   //--- method of initialization of the oscillator
   bool              InitDMK(CIndicators *indicators);
   bool              InitWPR(CIndicators *indicators);
  };
//+------------------------------------------------------------------+
//| Constructor                                                      |
//+------------------------------------------------------------------+
CSignalCT::CSignalCT(void)
  {
//--- initialization of protected data
   m_used_series=USE_SERIES_HIGH+USE_SERIES_LOW+USE_SERIES_CLOSE+USE_SERIES_TIME;
   
  }
//+------------------------------------------------------------------+
//| Destructor                                                       |
//+------------------------------------------------------------------+
CSignalCT::~CSignalCT(void)
  {
  }
//+------------------------------------------------------------------+
//| "Voting" that price will grow.                                   |
//+------------------------------------------------------------------+
int CSignalCT::LongCondition(void)
  {
      int result=0;
      
      //Using Domains Indicator biases (long or short)
      //e.g. an DMK reading of 75 => long-25, short-75 
      //or price at upper WPR => long-0, short-100
      LongMorphism();
      
      result=int(round(Product(POSITION_TYPE_BUY)));
      
      return(result);
  }
//+------------------------------------------------------------------+
//| "Voting" that price will fall.                                   |
//+------------------------------------------------------------------+
int CSignalCT::ShortCondition(void)
  {
      int result=0;
      
      ShortMorphism();
      
      result=int(round(Product(POSITION_TYPE_SELL)));
      
      return(result);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CSignalCT::LongMorphism(void)
   {
      int _index=StartIndex();
      
      m_wpr.Refresh(-1);
      m_dmk.Refresh(-1);
      m_close.Refresh(-1);
      
      double _wpr=-1.0*(m_dmk.GetData(0,_index)/100.0);
      double _dmk=(1.0-m_dmk.GetData(0,_index));
      
      NCT::CElement<double> _e;
      _e.Cardinality(2);
      _e.Set(0,_dmk);_e.Set(1,_wpr);
      
      long_product.Cardinality(1);
      long_product.Set(0,_e,true);
   }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CSignalCT::ShortMorphism(void)
   {
      int _index=StartIndex();
      
      m_wpr.Refresh(-1);
      m_dmk.Refresh(-1);
      m_close.Refresh(-1);
      
      double _wpr=-1.0+((m_dmk.GetData(0,_index))/100.0);
      double _dmk=(m_dmk.GetData(0,_index));
      
      NCT::CElement<double> _e;
      _e.Cardinality(2);
      _e.Set(0,_dmk);_e.Set(1,_wpr);
      
      short_product.Cardinality(1);
      short_product.Set(0,_e,true);
   }
//+------------------------------------------------------------------+
//| Morphisms at Product                                             |
//+------------------------------------------------------------------+
double CSignalCT::Product(ENUM_POSITION_TYPE Position)
   {
      double _product=0.0;
      
      NCT::CElement<double> _e;
   
      if(Position==POSITION_TYPE_BUY)
      {
         if(long_product.Cardinality()>=1 && long_product.Get(0,_e))
         {
            _product=100.0*((m_longdmk*_e.Get(0))+(m_longwpr*_e.Get(1)))/(m_longdmk+m_longwpr);
         }
         
         return(_product);
      }
      
      if(short_product.Cardinality()>=1 && short_product.Get(0,_e))
      {
         _product=100.0*((m_shortdmk*_e.Get(0))+(m_shortwpr*_e.Get(1)))/(m_shortdmk+m_shortwpr);
      }
         
      return(_product);
   }


O relatório do testador, baseado em ticks reais para a maior parte de 2022 com o par EURJPY, nos mostra a seguinte curva.

ct_3_curve


Abaixo estão os detalhes do relatório.

  ct_3_report

Obviamente, não é um sistema perfeito, mas apresenta algumas ideias que podem ser desenvolvidas em algo mais coerente. O código-fonte completo pode ser encontrado no anexo.

Segundo a Wikipédia, os conceitos de limites e colimites, juntamente com as propriedades universais intimamente relacionadas a eles, são bastante abstratos. Para compreendê-los, é benéfico começar estudando exemplos específicos que esses conceitos generalizam, como produtos e coprodutos.



Produtos

O produto é denotado como A x B e é definido como o conjunto de pares ordenados (a, b), onde a pertence a A e b pertence a B. Simbolicamente,

A x B = {(a, b) | a ∈ A, b ∈ B}

O produto é uma extensão do produto cartesiano dos domínios e reflete a ideia de um "par" ou "dupla" de domínios numa categoria. Intuitivamente, o produto C representa o comportamento "combinado" ou "composto" de A e B.

Além da propriedade universal discutida a seguir, o produto possui as seguintes propriedades:

  • O produto é associativo: (A × B) × C é isomorfo a A × (B × C).
  • O produto é comutativo: A × B é isomorfo a B × A.
  • O produto de um domínio e do domínio identidade é isomorfo ao próprio domínio: A × 1 é isomorfo a A.
  • O produto de um domínio e do domínio nulo é isomorfo ao domínio nulo: A × 0 é isomorfo a 0.

O conceito de produtos pode ser aplicado a diversas estruturas matemáticas, incluindo conjuntos, grupos, anéis e espaços vetoriais, além de estruturas mais abstratas, como espaços topológicos e as próprias categorias. Em cada caso, o produto reflete a ideia de um comportamento "combinado" ou "composto" de dois domínios ou estruturas e fornece uma maneira de raciocinar sobre o comportamento do sistema como um todo. A gestão de riscos é um exemplo de como o uso da teoria das categorias em finanças oferece uma melhor alternativa aos métodos tradicionais.

A teoria das categorias propicia uma abordagem mais abstrata e universal para a modelagem do risco financeiro, aplicável a uma variedade ampla de instrumentos e mercados financeiros. Esta abordagem pode oferecer uma estrutura mais unificada e flexível para o entendimento do risco, em comparação com o método tradicional que usa modelos específicos para cada instrumento ou mercado. Ademais, o emprego da teoria das categorias no gerenciamento de riscos pode conduzir a estratégias de gestão de risco mais resilientes e escaláveis, que se adequam melhor à natureza complexa e interligada dos mercados financeiros contemporâneos.

Por exemplo, no gerenciamento de risco convencional, o risco é geralmente modelado através de modelos matemáticos particulares para cada instrumento financeiro ou mercado. O modelo de Black-Scholes, por exemplo, é frequentemente utilizado para modelar o risco das opções, enquanto o modelo VaR (Value at Risk) é comumente empregado para modelar o risco de um portfólio de ativos. Esses modelos podem ser efetivos, porém têm alcance limitado e podem ser desafiadores para adaptar a novos instrumentos financeiros ou mercados.

Ao contrário, a teoria das categorias sugere uma abordagem mais abstrata e geral para a modelagem de risco. Por exemplo, instrumentos financeiros nos mercados podem ser apresentados como objetos numa categoria, e o risco é representado como um morfismo desses objetos para um objeto de posição que contém apenas dois elementos: uma posição longa e uma posição curta. Isso proporciona uma base mais unificada e flexível para entender o risco, que pode ser aplicada a uma grande variedade de instrumentos financeiros e mercados. Uma abordagem semelhante foi empregada pelo nosso arquivo de sinal proposto no prólogo.

Por exemplo, suponha que possuímos dois instrumentos financeiros, A e B, e desejamos modelar o risco da transição de A para B. A e B podem ser representados como objetos, e o risco da transição de A para B é retratado como seus morfismos correspondentes. Esses morfismos refletirão o risco associado à transição de A para B, considerando fatores como volatilidade, liquidez e condições de mercado. Alternativamente, como demonstrado no prólogo, podemos ter um único instrumento e precisar determinar qual posição precisamos assumir num determinado momento. Tomamos os indicadores financeiros desse instrumento e calculamos seu produto ponderado. O valor obtido influenciará nossa decisão. A seguir, é apresentado um excerto de uma lista que mostra apenas a combinação dos valores desses indicadores. Primeiramente, precisamos de uma classe para processar e armazenar informações sobre os objetos do produto.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CComposition
   {
      protected:
      
      int                           projectors;
      string                        projector[];
      
      bool                          Projectors(int Value)
                                    { 
                                       if(Value>=0 && Value<INT_MAX)
                                       {
                                          projectors=Value;
                                          ArrayResize(projector,projectors);
                                          return(true);
                                       }
                                       
                                       return(false); 
                                    };
      
      int                           Projectors(){ return(projectors); };
                                    
      public:
                                    
      string                        Get(int ProjectorIndex) { string _projector=""; if(ProjectorIndex>=0 && ProjectorIndex<Projectors()) { _projector=projector[ProjectorIndex]; } return(_projector); }
      bool                          Set(int ValueIndex,string Value) { if(ValueIndex>=0 && ValueIndex<Projectors()) { projector[ValueIndex]=Value; return(true); } return(false); }
      
      CDomain<string>               property;
      CDomain<string>               cone;
      
                                    CComposition(void){ projectors=0;ArrayFree(projector); };
                                    ~CComposition(void){};
   };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class CProduct                      :public CComposition  
   {
      protected:
      
      CDomain<string>               surjector[];
      
      public:
      
      bool                          Surjectors(int Value)
                                    { 
                                       if(Value>=0 && Value<INT_MAX)
                                       {
                                          CComposition::Projectors(Value);
                                          ArrayResize(surjector,Value);
                                          return(true);
                                       }
                                       
                                       return(false); 
                                    };
      
      int                           Surjectors(){ return(CComposition::projectors); };
                                    
      bool                          Get(int SurjectorIndex,CDomain<string> &Surjector) { if(SurjectorIndex>=0 && SurjectorIndex<CComposition::Projectors()) { Surjector=surjector[SurjectorIndex]; return(true); } return(false); }
      bool                          Set(int ValueIndex,CDomain<string> &Value) { if(ValueIndex>=0 && ValueIndex<CComposition::Projectors()) { surjector[ValueIndex]=Value; return(true); } return(false); }
      
                                    CProduct(void){ ArrayFree(surjector); };
                                    ~CProduct(void){};
   };

Depois de defini-los, podemos executar o(s) produto(s) da seguinte forma

      //////////
      //PRODUCTS
      //////////
      
      CDomain<double> _d_p_a,_d_p_b,_d_p_c;
      _d_p_a.Cardinality(__product_size);_d_p_b.Cardinality(__product_size);_d_p_c.Cardinality(__product_size);
      
      int _rsi_handle=iRSI(_Symbol,_Period,__product_size,__product_price);
      int _cci_handle=iCCI(_Symbol,_Period,__product_size,__product_price);
      int _dmk_handle=iDeMarker(_Symbol,_Period,__product_size);
      int _wpr_handle=iWPR(_Symbol,_Period,__product_size);
      int _stc_handle=iStochastic(_Symbol,_Period,8,4,4,MODE_SMA,STO_LOWHIGH);
      int _trx_handle=iTriX(_Symbol,_Period,__product_size,__product_price);
      
      if
      (
      FillDomain(_d_p_a,0,__product_size,_rsi_handle)
      &&
      FillDomain(_d_p_a,1,__product_size,_cci_handle)
      &&
      FillDomain(_d_p_b,0,__product_size,_dmk_handle)
      &&
      FillDomain(_d_p_b,1,__product_size,_wpr_handle)
      &&
      FillDomain(_d_p_c,0,__product_size,_stc_handle)
      &&
      FillDomain(_d_p_c,1,__product_size,_trx_handle)
      )
      {
         printf(__FUNCSIG__+" domain A: "+PrintDomain(_d_p_a,2));
         printf(__FUNCSIG__+" domain B: "+PrintDomain(_d_p_b,2));
         printf(__FUNCSIG__+" domain C: "+PrintDomain(_d_p_c,5));
         
         CProduct _product;
         
         GetProduct(_d_p_a,_d_p_b,_product,2);
         printf(__FUNCSIG__+" A & B product: "+PrintDomain(_product.cone,2));
         
         GetProduct(_product.cone,_d_p_c,_product,5);
         printf(__FUNCSIG__+" A & B & C product: "+PrintDomain(_product.cone,5));
      }


Esses valores do indicador, embora não sejam normalizados como no arquivo de sinal no prólogo, podem, no entanto, ser considerados ou usados como indicadores de risco para a tomada de decisões de negociação. A execução do script gera as seguintes entradas.

2023.02.17 17:31:33.199 ct_3_1 (USDCHF.ln,W1)   void OnStart() domain A: {(-66.67),(66.67)}
2023.02.17 17:31:33.199 ct_3_1 (USDCHF.ln,W1)   
2023.02.17 17:31:33.199 ct_3_1 (USDCHF.ln,W1)   void OnStart() domain B: {(-61.99),(-68.45)}
2023.02.17 17:31:33.199 ct_3_1 (USDCHF.ln,W1)   
2023.02.17 17:31:33.199 ct_3_1 (USDCHF.ln,W1)   void OnStart() domain C: {(-0.00996),(-0.00628)}
2023.02.17 17:31:33.199 ct_3_1 (USDCHF.ln,W1)   
2023.02.17 17:31:33.199 ct_3_1 (USDCHF.ln,W1)   void OnStart() A & B product: {((66.67),(-68.45)),((66.67),(-61.99)),((-66.67),(-68.45)),((-66.67),(-61.99))}
2023.02.17 17:31:33.199 ct_3_1 (USDCHF.ln,W1)   
2023.02.17 17:31:33.200 ct_3_1 (USDCHF.ln,W1)   void OnStart() A & B & C product: {(((-66.67),(-61.99)),(-0.00628)),(((-66.67),(-61.99)),(-0.00996)),(((-66.67),(-68.45)),(-0.00628)),(((-66.67),(-68.45)),(-0.00996)),(((66.67),(-61.99)),(-0.00628)),(((66.67),(-61.99)),(-0.00996)),(((66.67),(-68.45)),(-0.00628)),(((66.67),(-68.45)),(-0.00996))}

A habilidade de considerar múltiplos fatores resultará em uma sensibilidade maior à macroeconomia do que, por exemplo, um valor de risco que leva em conta apenas o intervalo de confiança do risco em comparação com o desempenho anterior. A ideia de integrar vários fatores em um morfismo pode ser utilizada para identificar e quantificar riscos associados a instrumentos financeiros complexos, como derivativos, que podem ser difíceis de modelar usando métodos convencionais. Isso é possível através de uma abordagem sistemática de separação de dados em domínios e conexão usando morfismos que mantêm a integridade. Além disso, podemos desenvolver estratégias de gestão de risco mais adequadas à natureza complexa e interligada dos mercados financeiros atuais, como estratégias que consideram a interconexão entre diferentes instrumentos e mercados financeiros.

O conceito de produtos na teoria das categorias também pode ser útil, por exemplo, em finanças, para gerenciar riscos em diversos ativos. A formação do produto de dois domínios em uma categoria possibilita a combinação deles em um único domínio, que pode ser usado para modelar o risco conjunto associado a ambos os domínios (ativos). Por exemplo, suponha que temos dois instrumentos financeiros, A e B, e queremos modelar o risco conjunto associado a manter ambos em um portfólio. Podemos considerar A e B como domínios em uma categoria, e seu risco conjunto como o produto desses dois domínios. Esses domínios produto cobrirão o risco combinado associado a A e B, levando em consideração seus riscos individuais e qualquer interação entre eles. Essa abordagem preserva o risco de entrada de cada instrumento financeiro, de forma que, ao treinar o modelo, as entradas individuais podem ser consideradas para maior precisão e entendimento, em vez de calcular a média de duas em uma. Essencialmente, temos uma compreensão melhor do risco geral associado a diferentes instrumentos financeiros e, portanto, podemos desenvolver estratégias de gerenciamento de risco mais eficazes. Para ilustrar isso, o produto pode ser usado para modelar o risco associado a estruturas financeiras complexas, como as obrigações de dívida colateralizadas (collateralized debt obligations, CDOs), que são compostas por vários ativos subjacentes.

Os estudos na teoria das categorias tendem a se voltar para a abstração e estruturas genéricas, que podem conduzir a uma ampla variedade de aplicações em instrumentos e mercados financeiros, incluindo a modelagem de riscos. Isso habilita uma abordagem mais unificada e flexível para a gestão de riscos, que pode auxiliar na compreensão mais aprofundada das interações e dependências entre diferentes instrumentos financeiros e mercados, diferentemente da especificidade do VaR/Black-Scholes. Suponha que possuímos uma carteira S&P 500 formada por diversas ações e desejamos modelar o risco desta carteira. Poderíamos fazer isso com o VaR, que estima a maior perda potencial de uma carteira em um determinado nível de probabilidade.

Entretanto, o VaR apresenta algumas limitações, como a suposição de uma distribuição normal, que pode não ser mantida na prática, a incapacidade de capturar relações de risco complexas entre os ativos de uma carteira e a incapacidade de estimar a magnitude das perdas quando o VaR é violado. A teoria das categorias propõe um método mais abstrato e flexível de modelar o risco, focando na estrutura e nas relações entre os diferentes elementos de um portfólio, e não somente em suas propriedades individuais. Em particular, a teoria das categorias nos permite representar o portfólio do S&P 500 como uma categoria, onde os ativos são os domínios da categoria e as relações de risco entre eles são capturadas pelos morfismos ou setas da categoria.

Por exemplo, poderíamos definir um morfismo entre dois ativos como a representação da relação de risco entre eles, como o grau em que seus preços se movem na mesma direção ou na direção oposta (por exemplo, correlação). Ao identificar esses morfismos, podemos criar um quadro mais detalhado e granular das relações de risco entre os ativos da carteira, o que pode ser mais preciso do que simplesmente usar o VaR. Além disso, ao abstrair as relações de risco entre os ativos como morfismos, podemos aplicar ferramentas e conceitos poderosos da teoria das categorias, como composição, dualidade e propriedades universais, para analisar e gerenciar o risco em um portfólio. Por exemplo, poderíamos usar a composição de morfismo para combinar relações de risco entre vários ativos para chegar a um risco geral de portfólio, ou poderíamos usar acategoria dual (abordaremos isso mais tarde) para estudar as relações de risco inverso entre os ativos.

Para ilustrar de forma mais concreta como a aplicação da teoria das categorias, incluindo seus princípios fundamentais, pode proporcionar vantagens em relação aos métodos convencionais de avaliação de risco, como VaR e Black-Scholes, consideremos um exemplo numérico. Imagine que possuímos uma carteira composta por dois instrumentos financeiros, A e B, ambos com um valor atual de US$ 100. Nosso objetivo é avaliar o risco conjunto associado à posse destes dois ativos. Para simplificar a análise, suponhamos que os retornos de A e B sigam uma distribuição normal, com média de 10% e desvio padrão de 20%. Utilizando modelos como o VaR, poderíamos estimar os riscos individuais de A e B, além do risco conjunto. Por exemplo, empregando o VaR com um nível de confiança de 95%, estimaríamos que o VaR diário para A e B, individualmente, é aproximadamente US$ 25,46, e o VaR conjunto é cerca de US$ 36,03.

VaR = valor da carteira x volatilidade x z-score

VaR = US$ 100 x 20% x 1,645

VaR = US$ 36,03.

 

Em contrapartida, poderíamos adotar a teoria das categorias e o conceito de produto categórico para modelar o risco conjunto de A e B. Nessa perspectiva, representaríamos A e B como objetos em uma categoria e seu risco geral como o produto desses dois objetos. Utilizando a fórmula padrão para o produto de duas variáveis aleatórias normalmente distribuídas, poderíamos calcular que a distribuição conjunta de A e B tem uma média de 10% e um desvio padrão de aproximadamente 0,28.

VaR = US$ 100 x √ ((10%)2 x (28%)2 + (10%)2 x (28%)2) x 1,645

VaR = US$ 29,15.

 

Seguindo essa abordagem, estimaríamos o VaR diário para o risco conjunto de A e B utilizando a fórmula padrão do VaR. Com um nível de confiança de 95%, o VaR diário para o risco conjunto de A e B seria de aproximadamente US$ 29,15. Nesse caso, o uso da teoria das categorias e do modelo de produto para o risco conjunto de A e B proporciona uma estimativa do VaR conjuntamente diferente da fornecida pelo modelo tradicional. No entanto, a teoria das categorias pode oferecer uma abordagem mais ampla e flexível para a gestão de riscos, que pode ser aplicada a uma variedade maior de instrumentos e mercados financeiros e pode levar em consideração de forma mais eficaz o risco agregado associado a múltiplos instrumentos financeiros. Isso implica que um resultado típico do produto de uma determinada área seria uma matriz que elenca os resultados de risco para cada iteração. Esse conjunto contínuo de dados funciona como base para estimar a média e o desvio padrão, de acordo com as metas e objetivos dos investidores.

O produto, na teoria das categorias, é um tipo de limite. Sendo assim, pode ser útil trazer algumas observações gerais sobre como os limites, de modo geral, podem ser valiosos para os operadores de nercadi durante o desenvolvimento de um sistema. No âmbito das finanças, o emprego de limites pode nos auxiliar a aproximar estruturas financeiras complexas de maneira mais eficaz, o que pode contribuir para a elaboração de estratégias de gestão de risco mais precisas. Por exemplo, podemos utilizar a ideia de limites para estimar o valor de uma carteira que engloba uma quantidade significativa de diferentes instrumentos financeiros. Ao representar a carteira como o limite de domínios mais simples, somos capazes de avaliar seu valor de forma mais acurada e eficiente.

Por exemplo, vamos supor que possuímos uma carteira com 1000 instrumentos financeiros, cada um com um valor atual de 100 dólares. Desejamos avaliar o valor total dessa carteira, bem como o risco agregado associado à posse de todos esses instrumentos. A utilização de métodos tradicionais, como o VaR ou o método Black-Scholes, pode ser complexa devido à natureza multidimensional da carteira. Contudo, ao empregar o conceito de limites na teoria das categorias, podemos representar a carteira como o limite de domínios mais simples, como a soma dos primeiros n instrumentos financeiros, onde n varia de 1 a 1000. Dessa forma, poderíamos estimar o valor da carteira ao tomar o limite do somatório quando n se aproxima de 1000. Com essa abordagem, somos capazes de estimar o valor da carteira de forma mais precisa e eficiente.

Além disso, a utilização de limites na teoria das categorias pode nos permitir racionalizar sobre o comportamento dos instrumentos financeiros e dos mercados à medida que nos aproximamos de determinados limites. Por exemplo, podemos usar o conceito de limites para analisar o comportamento dos mercados financeiros em períodos de extrema volatilidade, bem como para desenvolver estratégias de gestão de risco mais adequadas a essas condições. Em suma, o emprego de limites na teoria das categorias pode trazer benefícios adicionais quando utilizamos a teoria das categorias e o produto no âmbito financeiro, permitindo-nos aproximar de maneira mais eficiente estruturas financeiras complexas e analisar o comportamento dos instrumentos financeiros e dos mercados à medida que nos aproximamos de determinados limites.


A natureza universal do trabalho

A propriedade universal é uma maneira de caracterizar um objeto numa categoria com base na sua interação com outros objetos da mesma categoria. Essa propriedade pode ser empregada para definir objetos e operações de forma mais abstrata, o que pode conduzir à construção de modelos mais sofisticados e flexíveis. No âmbito financeiro, a utilização de propriedades universais pode permitir-nos definir instrumentos financeiros e mercados de forma mais abstrata, o que pode simplificar a sua análise e o desenvolvimento de modelos mais genéricos. Por exemplo, podemos definir um derivativo negociado em bolsa como um objeto de categoria que satisfaz certas propriedades universais, como a determinação de quem é o regulador, além de especificar se é uma opção ou um contrato futuro. Tal identificação pode auxiliar na avaliação dos custos de conformidade e do risco da contraparte. A seguir, é apresentado um trecho de um script que ilustra o exposto.

      //////////////////////////////
      //PRODUCT UNIVERSAL-PROPERTY
      //////////////////////////////
      
      CDomain<string> _d_security,_d_exchanges,_d_optioncycle,_d_strikewidth,_d_property;
      //
      CElement<string> _e;_e.Cardinality(1);
      //
      _d_security.Cardinality(2);
      _e.Set(0,"EURUSD");_d_security.Set(0,_e,true);
      _e.Set(0,"USDJPY");_d_security.Set(1,_e,true);
      //
      _d_exchanges.Cardinality(7);
      _e.Set(0,"Chicago Board Options Exchange (CBOE)");_d_exchanges.Set(0,_e,true);
      _e.Set(0,"Shanghai Stock Exchange (SSE)");_d_exchanges.Set(1,_e,true);
      _e.Set(0,"Shenzhen Stock Exchange (SZSE)");_d_exchanges.Set(2,_e,true);
      _e.Set(0,"Tokyo Stock Exchange (TSE)");_d_exchanges.Set(3,_e,true);
      _e.Set(0,"Osaka Exchange (OSE)");_d_exchanges.Set(4,_e,true);
      _e.Set(0,"Eurex Exchange");_d_exchanges.Set(5,_e,true);
      _e.Set(0,"London Stock Exchange (LSE)");_d_exchanges.Set(6,_e,true);
      //
      _d_optioncycle.Cardinality(3);
      _e.Set(0,"JAJO - January, April, July, and October");_d_optioncycle.Set(0,_e,true);
      _e.Set(0,"FMAN - February, May, August, and November");_d_optioncycle.Set(1,_e,true);
      _e.Set(0,"MJSD - March, June, September, and December");_d_optioncycle.Set(2,_e,true);
      //
      _d_strikewidth.Cardinality(2);
      _e.Set(0,"1000 points");_d_strikewidth.Set(0,_e,true);
      _e.Set(0,"1250 points");_d_strikewidth.Set(1,_e,true);
      //
      printf(__FUNCSIG__+" securities domain: "+PrintDomain(_d_security,0));
      printf(__FUNCSIG__+" exchanges domain: "+PrintDomain(_d_exchanges,0));
      printf(__FUNCSIG__+" option cycle domain: "+PrintDomain(_d_optioncycle,0));
      printf(__FUNCSIG__+" strike width domain: "+PrintDomain(_d_strikewidth,0));
      
      CProduct _product_1;
      
      GetProduct(_d_security,_d_exchanges,_product_1,0);
      printf(__FUNCSIG__+" securities & exchanges product: "+PrintDomain(_product_1.cone,0));
      
      CProduct _product_2;
      
      GetProduct(_d_optioncycle,_d_strikewidth,_product_2,0);
      printf(__FUNCSIG__+" securities & exchanges & optioncycle product: "+PrintDomain(_product_2.cone,0));
      
      CProduct _product_all;
      
      GetProduct(_product_1.cone,_product_2.cone,_product_all,0);
      printf(__FUNCSIG__+" securities & exchanges & optioncycle & strikewidth product: "+PrintDomain(_product_all.cone,0));
      
      _d_property.Cardinality(5);
      _e.Set(0,"Commodity Futures Trading Commission (CFTC)");_d_property.Set(0,_e,true);
      _e.Set(0,"China Securities Regulatory Commission (CSRC)");_d_property.Set(1,_e,true);
      _e.Set(0,"Financial Services Agency (FSA)");_d_property.Set(2,_e,true);
      _e.Set(0,"Federal Financial Supervisory Authority (BaFin)");_d_property.Set(3,_e,true);
      _e.Set(0,"Financial Conduct Authority (FCA)");_d_property.Set(4,_e,true);
      
      //
      _product_all.property=_d_property;
      //
      _product_all.universality.domain=_product_all.property;
      _product_all.universality.codomain=_product_all.cone;
      //
      CMorphism<string,string> _mm;
      _mm.domain=_product_all.property;
      _mm.codomain=_product_all.cone;
      //
      
      for(int c=0;c<_product_all.property.Cardinality();c++)
      {
         CElement<string> _e_property;_e_property.Cardinality(1);
         if(_product_all.property.Get(c,_e_property) && _e_property.Get(0)!="")
         {
            for(int cc=0;cc<_product_all.cone.Cardinality();cc++)
            {
               CElement<string> _e_cone;_e_cone.Cardinality(1);
               if(_product_all.cone.Get(cc,_e_cone) && _e_cone.Get(0)!="")
               {
                  if(_e_property.Get(0)=="Commodity Futures Trading Commission (CFTC)")
                  {
                     if(StringFind(_e_cone.Get(0),"Chicago Board Options Exchange (CBOE)")>=0)
                     {
                        if(_product_all.universality.Morphisms(_product_all.universality.Morphisms()+1))
                        {
                           if(_mm.Morph(_product_all.property,_product_all.cone,_e_property,_e_cone))
                           {
                              if(!_product_all.universality.Set(_product_all.universality.Morphisms()-1,_mm))
                              {
                              }
                           }
                        }
                     }
                  }
                  else if(_e_property.Get(0)=="China Securities Regulatory Commission (CSRC)")
                  {
                     if(StringFind(_e_cone.Get(0),"Shanghai Stock Exchange (SSE)")>=0||StringFind(_e_cone.Get(0),"Shenzhen Stock Exchange (SZSE)")>=0)
                     {
                        if(_product_all.universality.Morphisms(_product_all.universality.Morphisms()+1))
                        {
                           if(_mm.Morph(_product_all.property,_product_all.cone,_e_property,_e_cone))
                           {
                              if(!_product_all.universality.Set(_product_all.universality.Morphisms()-1,_mm))
                              {
                              }
                           }
                        }
                     }
                  }
                  else if(_e_property.Get(0)=="Financial Services Agency (FSA)")
                  {
                     if(StringFind(_e_cone.Get(0),"Tokyo Stock Exchange (TSE)")>=0||StringFind(_e_cone.Get(0),"Osaka Exchange (OSE)")>=0)
                     {
                        if(_product_all.universality.Morphisms(_product_all.universality.Morphisms()+1))
                        {
                           if(_mm.Morph(_product_all.property,_product_all.cone,_e_property,_e_cone))
                           {
                              if(!_product_all.universality.Set(_product_all.universality.Morphisms()-1,_mm))
                              {
                              }
                           }
                        }
                     }
                  }
                  else if(_e_property.Get(0)=="Federal Financial Supervisory Authority (BaFin)")
                  {
                     if(StringFind(_e_cone.Get(0),"Eurex Exchange")>=0)
                     {
                        if(_product_all.universality.Morphisms(_product_all.universality.Morphisms()+1))
                        {
                           if(_mm.Morph(_product_all.property,_product_all.cone,_e_property,_e_cone))
                           {
                              if(!_product_all.universality.Set(_product_all.universality.Morphisms()-1,_mm))
                              {
                              }
                           }
                        }
                     }
                  }
                  else if(_e_property.Get(0)=="Financial Conduct Authority (FCA)")
                  {
                     if(StringFind(_e_cone.Get(0),"London Stock Exchange (LSE)")>=0)
                     {
                        if(_product_all.universality.Morphisms(_product_all.universality.Morphisms()+1))
                        {
                           if(_mm.Morph(_product_all.property,_product_all.cone,_e_property,_e_cone))
                           {
                              if(!_product_all.universality.Set(_product_all.universality.Morphisms()-1,_mm))
                              {
                              }
                           }
                        }
                     }
                  }
               }
            }
         }
      }

Ao executar este script, são geradas as entradas que serão mostradas a seguir, exibindo o homomorfismo entre o domínio cônico e o domínio da propriedade. Este homomorfismo evidencia uma propriedade universal.

/*
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   void OnStart() universal property: 
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   {(Commodity Futures Trading Commission (CFTC)),(China Securities Regulatory Commission (CSRC)),(Financial Services Agency (FSA)),(Federal Financial Supervisory Authority (BaFin)),(Financial Conduct Authority (FCA))}
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   |
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   (Commodity Futures Trading Commission (CFTC))|----->(((EURUSD),(Chicago Board Options Exchange (CBOE))),((JAJO - January, April, July, and October),(1000 points)))
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   (Commodity Futures Trading Commission (CFTC))|----->(((EURUSD),(Chicago Board Options Exchange (CBOE))),((JAJO - January, April, July, and October),(1250 points)))
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   (Commodity Futures Trading Commission (CFTC))|----->(((EURUSD),(Chicago Board Options Exchange (CBOE))),((FMAN - February, May, August, and November),(1000 points)))
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   (Commodity Futures Trading Commission (CFTC))|----->(((EURUSD),(Chicago Board Options Exchange (CBOE))),((FMAN - February, May, August, and November),(1250 points)))
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   (Commodity Futures Trading Commission (CFTC))|----->(((EURUSD),(Chicago Board Options Exchange (CBOE))),((MJSD - March, June, September, and December),(1000 points)))
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   (Commodity Futures Trading Commission (CFTC))|----->(((EURUSD),(Chicago Board Options Exchange (CBOE))),((MJSD - March, June, September, and December),(1250 points)))
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   (Commodity Futures Trading Commission (CFTC))|----->(((USDJPY),(Chicago Board Options Exchange (CBOE))),((JAJO - January, April, July, and October),(1000 points)))
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   (Commodity Futures Trading Commission (CFTC))|----->(((USDJPY),(Chicago Board Options Exchange (CBOE))),((JAJO - January, April, July, and October),(1250 points)))
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   (Commodity Futures Trading Commission (CFTC))|----->(((USDJPY),(Chicago Board Options Exchange (CBOE))),((FMAN - February, May, August, and November),(1000 points)))
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   (Commodity Futures Trading Commission (CFTC))|----->(((USDJPY),(Chicago Board Options Exchange (CBOE))),((FMAN - February, May, August, and November),(1250 points)))
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   (Commodity Futures Trading Commission (CFTC))|----->(((USDJPY),(Chicago Board Options Exchange (CBOE))),((MJSD - March, June, September, and December),(1000 points)))
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   (Commodity Futures Trading Commission (CFTC))|----->(((USDJPY),(Chicago Board Options Exchange (CBOE))),((MJSD - March, June, September, and December),(1250 points)))
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((EURUSD),(Shanghai Stock Exchange (SSE))),((JAJO - January, April, July, and October),(1000 points)))
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((EURUSD),(Shanghai Stock Exchange (SSE))),((JAJO - January, April, July, and October),(1250 points)))
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((EURUSD),(Shanghai Stock Exchange (SSE))),((FMAN - February, May, August, and November),(1000 points)))
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((EURUSD),(Shanghai Stock Exchange (SSE))),((FMAN - February, May, August, and November),(1250 points)))
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((EURUSD),(Shanghai Stock Exchange (SSE))),((MJSD - March, June, September, and December),(1000 points)))
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((EURUSD),(Shanghai Stock Exchange (SSE))),((MJSD - March, June, September, and December),(1250 points)))
2023.02.21 09:57:41.077 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((EURUSD),(Shenzhen Stock Exchange (SZSE))),((JAJO - January, April, July, and October),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((EURUSD),(Shenzhen Stock Exchange (SZSE))),((JAJO - January, April, July, and October),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((EURUSD),(Shenzhen Stock Exchange (SZSE))),((FMAN - February, May, August, and November),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((EURUSD),(Shenzhen Stock Exchange (SZSE))),((FMAN - February, May, August, and November),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((EURUSD),(Shenzhen Stock Exchange (SZSE))),((MJSD - March, June, September, and December),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((EURUSD),(Shenzhen Stock Exchange (SZSE))),((MJSD - March, June, September, and December),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((USDJPY),(Shanghai Stock Exchange (SSE))),((JAJO - January, April, July, and October),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((USDJPY),(Shanghai Stock Exchange (SSE))),((JAJO - January, April, July, and October),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((USDJPY),(Shanghai Stock Exchange (SSE))),((FMAN - February, May, August, and November),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((USDJPY),(Shanghai Stock Exchange (SSE))),((FMAN - February, May, August, and November),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((USDJPY),(Shanghai Stock Exchange (SSE))),((MJSD - March, June, September, and December),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((USDJPY),(Shanghai Stock Exchange (SSE))),((MJSD - March, June, September, and December),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((USDJPY),(Shenzhen Stock Exchange (SZSE))),((JAJO - January, April, July, and October),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((USDJPY),(Shenzhen Stock Exchange (SZSE))),((JAJO - January, April, July, and October),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((USDJPY),(Shenzhen Stock Exchange (SZSE))),((FMAN - February, May, August, and November),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((USDJPY),(Shenzhen Stock Exchange (SZSE))),((FMAN - February, May, August, and November),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((USDJPY),(Shenzhen Stock Exchange (SZSE))),((MJSD - March, June, September, and December),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (China Securities Regulatory Commission (CSRC))|----->(((USDJPY),(Shenzhen Stock Exchange (SZSE))),((MJSD - March, June, September, and December),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((EURUSD),(Tokyo Stock Exchange (TSE))),((JAJO - January, April, July, and October),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((EURUSD),(Tokyo Stock Exchange (TSE))),((JAJO - January, April, July, and October),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((EURUSD),(Tokyo Stock Exchange (TSE))),((FMAN - February, May, August, and November),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((EURUSD),(Tokyo Stock Exchange (TSE))),((FMAN - February, May, August, and November),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((EURUSD),(Tokyo Stock Exchange (TSE))),((MJSD - March, June, September, and December),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((EURUSD),(Tokyo Stock Exchange (TSE))),((MJSD - March, June, September, and December),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((EURUSD),(Osaka Exchange (OSE))),((JAJO - January, April, July, and October),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((EURUSD),(Osaka Exchange (OSE))),((JAJO - January, April, July, and October),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((EURUSD),(Osaka Exchange (OSE))),((FMAN - February, May, August, and November),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((EURUSD),(Osaka Exchange (OSE))),((FMAN - February, May, August, and November),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((EURUSD),(Osaka Exchange (OSE))),((MJSD - March, June, September, and December),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((EURUSD),(Osaka Exchange (OSE))),((MJSD - March, June, September, and December),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((USDJPY),(Tokyo Stock Exchange (TSE))),((JAJO - January, April, July, and October),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((USDJPY),(Tokyo Stock Exchange (TSE))),((JAJO - January, April, July, and October),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((USDJPY),(Tokyo Stock Exchange (TSE))),((FMAN - February, May, August, and November),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((USDJPY),(Tokyo Stock Exchange (TSE))),((FMAN - February, May, August, and November),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((USDJPY),(Tokyo Stock Exchange (TSE))),((MJSD - March, June, September, and December),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((USDJPY),(Tokyo Stock Exchange (TSE))),((MJSD - March, June, September, and December),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((USDJPY),(Osaka Exchange (OSE))),((JAJO - January, April, July, and October),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((USDJPY),(Osaka Exchange (OSE))),((JAJO - January, April, July, and October),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((USDJPY),(Osaka Exchange (OSE))),((FMAN - February, May, August, and November),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((USDJPY),(Osaka Exchange (OSE))),((FMAN - February, May, August, and November),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((USDJPY),(Osaka Exchange (OSE))),((MJSD - March, June, September, and December),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Financial Services Agency (FSA))|----->(((USDJPY),(Osaka Exchange (OSE))),((MJSD - March, June, September, and December),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Federal Financial Supervisory Authority (BaFin))|----->(((EURUSD),(Eurex Exchange)),((JAJO - January, April, July, and October),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Federal Financial Supervisory Authority (BaFin))|----->(((EURUSD),(Eurex Exchange)),((JAJO - January, April, July, and October),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Federal Financial Supervisory Authority (BaFin))|----->(((EURUSD),(Eurex Exchange)),((FMAN - February, May, August, and November),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Federal Financial Supervisory Authority (BaFin))|----->(((EURUSD),(Eurex Exchange)),((FMAN - February, May, August, and November),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Federal Financial Supervisory Authority (BaFin))|----->(((EURUSD),(Eurex Exchange)),((MJSD - March, June, September, and December),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Federal Financial Supervisory Authority (BaFin))|----->(((EURUSD),(Eurex Exchange)),((MJSD - March, June, September, and December),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Federal Financial Supervisory Authority (BaFin))|----->(((USDJPY),(Eurex Exchange)),((JAJO - January, April, July, and October),(1000 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Federal Financial Supervisory Authority (BaFin))|----->(((USDJPY),(Eurex Exchange)),((JAJO - January, April, July, and October),(1250 points)))
2023.02.21 09:57:41.078 ct_3_1 (USDCHF.ln,H1)   (Federal Financial Supervisory Authority (BaFin))|----->(((USDJPY),(Eurex Exchange)),((FMAN - February, May, August, and November),(1000 points)))
2023.02.21 09:57:41.079 ct_3_1 (USDCHF.ln,H1)   (Federal Financial Supervisory Authority (BaFin))|----->(((USDJPY),(Eurex Exchange)),((FMAN - February, May, August, and November),(1250 points)))
2023.02.21 09:57:41.079 ct_3_1 (USDCHF.ln,H1)   (Federal Financial Supervisory Authority (BaFin))|----->(((USDJPY),(Eurex Exchange)),((MJSD - March, June, September, and December),(1000 points)))
2023.02.21 09:57:41.079 ct_3_1 (USDCHF.ln,H1)   (Federal Financial Supervisory Authority (BaFin))|----->(((USDJPY),(Eurex Exchange)),((MJSD - March, June, September, and December),(1250 points)))
2023.02.21 09:57:41.079 ct_3_1 (USDCHF.ln,H1)   (Financial Conduct Authority (FCA))|----->(((EURUSD),(London Stock Exchange (LSE))),((JAJO - January, April, July, and October),(1000 points)))
2023.02.21 09:57:41.079 ct_3_1 (USDCHF.ln,H1)   (Financial Conduct Authority (FCA))|----->(((EURUSD),(London Stock Exchange (LSE))),((JAJO - January, April, July, and October),(1250 points)))
2023.02.21 09:57:41.079 ct_3_1 (USDCHF.ln,H1)   (Financial Conduct Authority (FCA))|----->(((EURUSD),(London Stock Exchange (LSE))),((FMAN - February, May, August, and November),(1000 points)))
2023.02.21 09:57:41.079 ct_3_1 (USDCHF.ln,H1)   (Financial Conduct Authority (FCA))|----->(((EURUSD),(London Stock Exchange (LSE))),((FMAN - February, May, August, and November),(1250 points)))
2023.02.21 09:57:41.079 ct_3_1 (USDCHF.ln,H1)   (Financial Conduct Authority (FCA))|----->(((EURUSD),(London Stock Exchange (LSE))),((MJSD - March, June, September, and December),(1000 points)))
2023.02.21 09:57:41.079 ct_3_1 (USDCHF.ln,H1)   (Financial Conduct Authority (FCA))|----->(((EURUSD),(London Stock Exchange (LSE))),((MJSD - March, June, September, and December),(1250 points)))
2023.02.21 09:57:41.079 ct_3_1 (USDCHF.ln,H1)   (Financial Conduct Authority (FCA))|----->(((USDJPY),(London Stock Exchange (LSE))),((JAJO - January, April, July, and October),(1000 points)))
2023.02.21 09:57:41.079 ct_3_1 (USDCHF.ln,H1)   (Financial Conduct Authority (FCA))|----->(((USDJPY),(London Stock Exchange (LSE))),((JAJO - January, April, July, and October),(1250 points)))
2023.02.21 09:57:41.079 ct_3_1 (USDCHF.ln,H1)   (Financial Conduct Authority (FCA))|----->(((USDJPY),(London Stock Exchange (LSE))),((FMAN - February, May, August, and November),(1000 points)))
2023.02.21 09:57:41.079 ct_3_1 (USDCHF.ln,H1)   (Financial Conduct Authority (FCA))|----->(((USDJPY),(London Stock Exchange (LSE))),((FMAN - February, May, August, and November),(1250 points)))
2023.02.21 09:57:41.079 ct_3_1 (USDCHF.ln,H1)   (Financial Conduct Authority (FCA))|----->(((USDJPY),(London Stock Exchange (LSE))),((MJSD - March, June, September, and December),(1000 points)))
2023.02.21 09:57:41.079 ct_3_1 (USDCHF.ln,H1)   (Financial Conduct Authority (FCA))|----->(((USDJPY),(London Stock Exchange (LSE))),((MJSD - March, June, September, and December),(1250 points)))
2023.02.21 09:57:41.079 ct_3_1 (USDCHF.ln,H1)   |
2023.02.21 09:57:41.079 ct_3_1 (USDCHF.ln,H1)   {(((EURUSD),(Chicago Board Options Exchange (CBOE))),((JAJO - January, April, July, and October),(1000 points))),(((EURUSD),(Chicago Board Options Exchange (CBOE))),((JAJO - January, April, July, and October),(1250 points))),(((EURUSD),(Chicago Board Options Exchange (CBOE))),((FMAN - February, May, August, and November),(1000 points))),(((EURUSD),(Chicago Board Options Exchange (CBOE))),((FMAN - February, May, August, and November),(1250 points))),(((EURUSD),(Chicago Board Options Exchange (CBOE))),((MJSD
*/

O uso de propriedades universais também pode simplificar a consideração de estruturas financeiras complexas, como obrigações de dívida colateralizadas (CDOs). Estas estruturas são comumente compostas por múltiplos ativos subjacentes, cada um com seu próprio perfil de risco. Ao definir os ativos subjacentes como objetos em uma categoria e empregar propriedades universais para estruturar o CDO, podemos desenvolver modelos mais abstratos e genéricos que retratem de maneira mais efetiva o risco conjunto associado aos ativos subjacentes. Além disso, a noção de propriedade universal pode ser aplicada para criar novos instrumentos ou produtos financeiros, determinando suas propriedades universais desejadas, ao invés de tentar conceber um instrumento financeiro específico a partir do zero. Isso pode resultar na criação de produtos financeiros mais inovadores e eficientes, que atendam de maneira mais adequada às necessidades dos investidores e do mercado.

      ////////////////////////////
      //PRODUCT UNIVERSAL-PROPERTY
      ////////////////////////////
      
      //EX no.2
      
      CDomain<string> _d_hedge,_d_cover,_d_postion,_d_p2_property;
      //
      CElement<string> _ep2;_ep2.Cardinality(1);
      //
      _d_hedge.Cardinality(2);
      _ep2.Set(0,"EURUSD");_d_hedge.Set(0,_ep2,true);
      _ep2.Set(0,"GBPUSD");_d_hedge.Set(1,_ep2,true);
      //
      _d_cover.Cardinality(2);
      _ep2.Set(0,"USDCHF");_d_cover.Set(0,_ep2,true);
      _ep2.Set(0,"USDJPY");_d_cover.Set(1,_ep2,true);
      //
      _d_postion.Cardinality(4);
      _ep2.Set(0,"EURCHF");_d_postion.Set(0,_ep2,true);
      _ep2.Set(0,"EURJPY");_d_postion.Set(1,_ep2,true);
      _ep2.Set(0,"GBPCHF");_d_postion.Set(2,_ep2,true);
      _ep2.Set(0,"GBPJPY");_d_postion.Set(3,_ep2,true);
      //
      printf(__FUNCSIG__+" hedge domain: "+PrintDomain(_d_hedge,0));
      printf(__FUNCSIG__+" cover domain: "+PrintDomain(_d_cover,0));
      printf(__FUNCSIG__+" postion domain: "+PrintDomain(_d_postion,0));
      
      CProduct _product_hc;
      
      GetProduct(_d_hedge,_d_cover,_product_hc,0);
      printf(__FUNCSIG__+" hedge & cover product: "+PrintDomain(_product_hc.cone,0));
      
      CProduct _product_hcp;
      
      GetProduct(_product_hc.cone,_d_postion,_product_hcp,0);
      printf(__FUNCSIG__+" hedge & cover & postion product: "+PrintDomain(_product_hcp.cone,0));
      //
      
      CDomain<double> _d_p2_eu,_d_p2_gu,_d_p2_uc,_d_p2_uj,_d_p2_ec,_d_p2_ej,_d_p2_gc,_d_p2_gj;
      _d_p2_eu.Cardinality(1);_d_p2_gu.Cardinality(1);_d_p2_uc.Cardinality(1);_d_p2_uj.Cardinality(1);
      _d_p2_ec.Cardinality(1);_d_p2_ej.Cardinality(1);_d_p2_gc.Cardinality(1);_d_p2_gj.Cardinality(1);
      
      int _eu_handle=iATR("EURUSD",_Period,__product_size);
      int _gu_handle=iATR("GBPUSD",_Period,__product_size);
      int _uc_handle=iATR("USDCHF",_Period,__product_size);
      int _uj_handle=iATR("USDJPY",_Period,__product_size);
      int _ec_handle=iATR("EURCHF",_Period,__product_size);
      int _ej_handle=iATR("EURJPY",_Period,__product_size);
      int _gc_handle=iATR("GBPCHF",_Period,__product_size);
      int _gj_handle=iATR("GBPJPY",_Period,__product_size);
      
      if
      (
      FillDomain(_d_p2_eu,0,1,_eu_handle)
      &&
      FillDomain(_d_p2_gu,0,1,_gu_handle)
      &&
      FillDomain(_d_p2_uc,0,1,_uc_handle)
      &&
      FillDomain(_d_p2_uj,0,1,_uj_handle)
      &&
      FillDomain(_d_p2_ec,0,1,_ec_handle)
      &&
      FillDomain(_d_p2_ej,0,1,_ej_handle)
      &&
      FillDomain(_d_p2_gc,0,1,_gc_handle)
      &&
      FillDomain(_d_p2_gj,0,1,_gj_handle)
      )
      {
         CElement<double> _e_eu,_e_gu,_e_uc,_e_uj,_e_ec,_e_ej,_e_gc,_e_gj;
         //
         if
         (
         _d_p2_eu.Get(0,_e_eu) && _d_p2_gu.Get(0,_e_gu) && 
         _d_p2_uc.Get(0,_e_uc) && _d_p2_uj.Get(0,_e_uj) && 
         _d_p2_ec.Get(0,_e_ec) && _d_p2_ej.Get(0,_e_ej) && 
         _d_p2_gc.Get(0,_e_gc) && _d_p2_gj.Get(0,_e_gj)
         )
         {
            _d_p2_property.Cardinality(4);
            _ep2.Set(0,DoubleToString(_e_eu.Get(0),3)+","+DoubleToString(_e_uc.Get(0),3)+","+DoubleToString(_e_ec.Get(0),3));_d_p2_property.Set(0,_ep2,true);
            _ep2.Set(0,DoubleToString(_e_gu.Get(0),3)+","+DoubleToString(_e_uc.Get(0),3)+","+DoubleToString(_e_gc.Get(0),3));_d_p2_property.Set(1,_ep2,true);
            _ep2.Set(0,DoubleToString(_e_eu.Get(0),3)+","+DoubleToString(_e_uj.Get(0),3)+","+DoubleToString(_e_ej.Get(0),3));_d_p2_property.Set(2,_ep2,true);
            _ep2.Set(0,DoubleToString(_e_gu.Get(0),3)+","+DoubleToString(_e_uj.Get(0),3)+","+DoubleToString(_e_gj.Get(0),3));_d_p2_property.Set(3,_ep2,true);
            
            //
            _product_hcp.property=_d_p2_property;
            //
            _product_hcp.universality.domain=_product_hcp.property;
            _product_hcp.universality.codomain=_product_hcp.cone;
            //
            CMorphism<string,string> _m_p2;
            _m_p2.domain=_product_hcp.property;
            _m_p2.codomain=_product_hcp.cone;
            //
            
            for(int c=0;c<_product_hcp.property.Cardinality();c++)
            {
               CElement<string> _e_property;_e_property.Cardinality(1);
               if(_product_hcp.property.Get(c,_e_property) && _e_property.Get(0)!="")
               {
                  for(int cc=0;cc<_product_hcp.cone.Cardinality();cc++)
                  {
                     CElement<string> _e_cone;_e_cone.Cardinality(1);
                     if(_product_hcp.cone.Get(cc,_e_cone) && _e_cone.Get(0)!="")
                     {
                        if(c==0)
                        {
                           if(StringFind(_e_cone.Get(0),"EURUSD")>=0&&StringFind(_e_cone.Get(0),"USDCHF")>=0&&StringFind(_e_cone.Get(0),"EURCHF")>=0)
                           {
                              if(_product_hcp.universality.Morphisms(_product_hcp.universality.Morphisms()+1))
                              {
                                 if(_m_p2.Morph(_product_hcp.property,_product_hcp.cone,_e_property,_e_cone))
                                 {
                                    if(!_product_hcp.universality.Set(_product_hcp.universality.Morphisms()-1,_m_p2))
                                    {
                                    }
                                 }
                              }
                           }
                        }
                        else if(c==1)
                        {
                           if(StringFind(_e_cone.Get(0),"GBPUSD")>=0&&StringFind(_e_cone.Get(0),"USDCHF")>=0&&StringFind(_e_cone.Get(0),"GBPCHF")>=0)
                           {
                              if(_product_hcp.universality.Morphisms(_product_hcp.universality.Morphisms()+1))
                              {
                                 if(_m_p2.Morph(_product_hcp.property,_product_hcp.cone,_e_property,_e_cone))
                                 {
                                    if(!_product_hcp.universality.Set(_product_hcp.universality.Morphisms()-1,_m_p2))
                                    {
                                    }
                                 }
                              }
                           }
                        }
                        else if(c==2)
                        {
                           if(StringFind(_e_cone.Get(0),"EURUSD")>=0&&StringFind(_e_cone.Get(0),"USDJPY")>=0&&StringFind(_e_cone.Get(0),"EURJPY")>=0)
                           {
                              if(_product_hcp.universality.Morphisms(_product_hcp.universality.Morphisms()+1))
                              {
                                 if(_m_p2.Morph(_product_hcp.property,_product_hcp.cone,_e_property,_e_cone))
                                 {
                                    if(!_product_hcp.universality.Set(_product_hcp.universality.Morphisms()-1,_m_p2))
                                    {
                                    }
                                 }
                              }
                           }
                        }
                        else if(c==3)
                        {
                           if(StringFind(_e_cone.Get(0),"GBPUSD")>=0&&StringFind(_e_cone.Get(0),"USDJPY")>=0&&StringFind(_e_cone.Get(0),"GBPJPY")>=0)
                           {
                              if(_product_hcp.universality.Morphisms(_product_hcp.universality.Morphisms()+1))
                              {
                                 if(_m_p2.Morph(_product_hcp.property,_product_hcp.cone,_e_property,_e_cone))
                                 {
                                    if(!_product_hcp.universality.Set(_product_hcp.universality.Morphisms()-1,_m_p2))
                                    {
                                    }
                                 }
                              }
                           }
                        }
                     }
                  }
               }
            }
            
            printf(__FUNCSIG__+" universal property hcp: "+PrintHomomorphism(_product_hcp.universality,0));
         }
      }
      


Ao reexecutar esse script, obtemos um homomorfismo da propriedade universal, que essencialmente mapeia os níveis de risco (neste caso, os valores do ATR) em uma carteira no domínio cônico que foi constituída a partir dos produtos de diferentes títulos.

2023.02.21 20:21:53.614 ct_3_1 (USDCHF.ln,H1)   void OnStart() universal property hcp: 
2023.02.21 20:21:53.614 ct_3_1 (USDCHF.ln,H1)   
2023.02.21 20:21:53.614 ct_3_1 (USDCHF.ln,H1)   {(0.002,0.001,0.001),(0.002,0.001,0.002),(0.002,0.145,0.189),(0.002,0.145,0.258)}
2023.02.21 20:21:53.614 ct_3_1 (USDCHF.ln,H1)   |
2023.02.21 20:21:53.614 ct_3_1 (USDCHF.ln,H1)   (0.002,0.001,0.001)|----->(((EURUSD),(USDCHF)),(EURCHF))
2023.02.21 20:21:53.614 ct_3_1 (USDCHF.ln,H1)   (0.002,0.001,0.002)|----->(((GBPUSD),(USDCHF)),(GBPCHF))
2023.02.21 20:21:53.614 ct_3_1 (USDCHF.ln,H1)   (0.002,0.145,0.189)|----->(((EURUSD),(USDJPY)),(EURJPY))
2023.02.21 20:21:53.614 ct_3_1 (USDCHF.ln,H1)   (0.002,0.145,0.258)|----->(((GBPUSD),(USDJPY)),(GBPJPY))
2023.02.21 20:21:53.614 ct_3_1 (USDCHF.ln,H1)   |
2023.02.21 20:21:53.614 ct_3_1 (USDCHF.ln,H1)   {(((EURUSD),(USDCHF)),(GBPJPY)),(((EURUSD),(USDCHF)),(GBPCHF)),(((EURUSD),(USDCHF)),(EURJPY)),(((EURUSD),(USDCHF)),(EURCHF)),(((EURUSD),(USDJPY)),(GBPJPY)),(((EURUSD),(USDJPY)),(GBPCHF)),(((EURUSD),(USDJPY)),(EURJPY)),(((EURUSD),(USDJPY)),(EURCHF)),(((GBPUSD),(USDCHF)),(GBPJPY)),(((GBPUSD),(USDCHF)),(GBPCHF)),(((GBPUSD),(USDCHF)),(EURJPY)),(((GBPUSD),(USDCHF)),(EURCHF)),(((GBPUSD),(USDJPY)),(GBPJPY)),(((GBPUSD),(USDJPY)),(GBPCHF)),(((GBPUSD),(USDJPY)),(EURJPY)),(((GBPUSD),(USDJPY)),(EURCHF))}


Coprodutos

Na álgebra, o coproduto categorial de dois grupos (G e H) é um conjunto que contém todos os elementos de G e H, com uma operação definida de tal forma que a estrutura resultante seja o "menor" conjunto que inclui G e H. Isso difere do produto de dois conjuntos, que é um conjunto contendo todos os pares de elementos (g, h), onde g pertence a G e h pertence a H, com a operação do conjunto definida de forma componente a componente. O coproduto é um colimite, porque é a "menor cota superior" de G e H no sentido de que qualquer outro conjunto que contenha G e H também deve conter o coproduto.

O coproduto de dois conjuntos A e B também é um terceiro conjunto C, juntamente com dois morfismos de inclusão de A e B em C, respectivamente, de tal forma que, para qualquer outro conjunto D com dois morfismos de A e B, respectivamente, existe um único morfismo de C para D, o que resulta em alguma comutação de diagrama. O coproduto também é chamado de "união disjunta" ou "soma" de A e B, pois reflete a ideia de escolha entre dois conjuntos diferentes. Intuitivamente, o subproduto C representa o comportamento "alternativo" ou "divergente" de A e B.

Um coproduto geralmente satisfaz as seguintes propriedades:

  • É associativo: (A + B) + C é isomorfo a A + (B + C).
  • É comutativo: A + B é isomorfo a B + A.
  • O coproduto de um conjunto com um conjunto inicial é isomorfo ao próprio conjunto: A + 0 é isomorfo a A.
  • O coproduto de um conjunto com um conjunto terminal é isomorfo ao próprio conjunto: A + 1 é isomorfo a 1.

O conceito de coproduto pode ser aplicado a diversas estruturas matemáticas, incluindo conjuntos, grupos, anéis e espaços vetoriais, além de estruturas mais abstratas como espaços topológicos e as próprias categorias. Em cada situação, o coproduto expressa a ideia de uma "escolha" ou "alternativa" entre duas regiões ou estruturas, fornecendo um meio para raciocinar sobre o comportamento do sistema como um todo.

Na perspectiva de um investidor, os coprodutos na teoria das categorias podem ser utilizados para modelar e analisar carteiras de investimentos, podendo ser uma alternativa superior aos métodos tradicionais de avaliação de carteiras, uma vez que eles oferecem uma maneira de combinar domínios em uma categoria, onde o domínio resultante representa uma escolha entre os domínios originais. Por exemplo, o coproduto de dois números é o seu máximo. Esta propriedade pode ser utilizada para modelar carteiras de investimentos como uma escolha entre diferentes ativos, proporcionando uma análise mais flexível e geral na avaliação dessas carteiras.

Como exemplo, imagine que possuímos uma carteira de investimentos composta por dois ativos: ações e títulos. Queremos analisar o valor da carteira e como ela se altera em diferentes cenários de mercado. Tradicionalmente, isso é feito usando técnicas como a análise de fluxo de caixa descontado ou o modelo de precificação de ativos de capital (capital asset pricing model, CAPM). No entanto, com o uso dos coprodutos na teoria das categorias, podemos modelar o portfólio como uma escolha entre ações e títulos. O domínio resultante do coproduto representará o valor do portfólio em distintas condições de mercado, abrangendo o risco combinado associado à posse de ambos os ativos.

Para simplificar, imagine que o valor atual de uma ação seja de US$ 50 e o valor atual de um título seja de US$ 100. Podemos definir o coproduto entre uma ação e um título como sendo seu valor máximo, que é US$ 100. Isso significa que o valor da carteira será de, no mínimo, US$ 100, independentemente das condições de mercado. Com essa abordagem, podemos analisar o comportamento da carteira em diferentes cenários de mercado. Por exemplo, se o preço da ação aumentar para US$ 60 e o preço do título se manter o mesmo, o valor da carteira será de US$ 110, superior a US$ 60 ou US$ 100, refletindo o aumento no preço, mas ainda inferior ao valor total de US$ 160. Da mesma forma, se o preço do título cair para US$ 90 e o preço da ação permanecer o mesmo, o valor da carteira ainda será de US$ 100, superior a US$ 50 ou US$ 90, mas ainda inferior ao total de US$ 140. Em geral, os coprodutos oferecem uma abordagem mais conservadora e menos volátil para avaliação, menos atrelada às flutuações do preço de mercado. Assim, podemos modelar carteiras de investimentos como uma escolha entre diferentes ativos e analisar seu comportamento de maneira mais flexível e geral. Isso pode resultar em estratégias de avaliação de carteira de longo prazo mais precisas e eficientes, permitindo uma melhor consideração do risco combinado associado à posse de múltiplos ativos.

 

Os coprodutos e a propriedade universal

A noção de propriedadespropriedade universal, tal como apresentada nos trabalhos supracitados, é uma ferramenta robusta da teoria das categorias, que também pode ser empregada para ampliar a análise de produtos correlatos no campo das finanças. Ela disponibiliza um método formal de descrever a unicidade de um coproduto para um tipo específico de isomorfismo, o que pode conduzir a uma análise mais eficaz e precisa de carteiras de investimento. Para exemplificar, consideremos uma carteira composta por três ativos: ações, títulos e um fundo de investimento imobiliário (real estate investment trust, REIT). Podemos modelar esse portfólio utilizando um coproduto de ações, títulos e REITs na categoria de ativos de investimento. O coproduto desses três ativos pode ser percebido como uma escolha entre possuir uma ação, um título ou um REIT. Podemos valer-nos da propriedade universal dos coprodutos para entender como essa escolha é única para o isomorfismo. Em particular, a propriedade universal do coproduto afirma que, para qualquer outro domínio Z e morfismos dos três ativos para Z, existe um morfismo único do coproduto para Z, resultando em uma substituição de diagrama.

Utilizando a propriedade universal, podemos inferir de maneira mais precisa e efetiva sobre o comportamento do coproduto. Por exemplo, suponhamos que queiramos calcular o risco combinado associado à posse de ações, títulos e REITs. Podemos empregar a propriedade universal do coproduto para demonstrar que qualquer avaliação que atenda aos diagramas exigidos pela propriedade universal deve também satisfazer determinadas propriedades, como a subaditividade do risco. Como ilustração, imaginemos que uma ação tenha valor de US$ 50, um título valha US$ 100 e um REIT esteja avaliado em US$ 150. Utilizando o coproduto, podemos modelar a carteira como uma escolha entre esses três ativos e calcular o risco combinado associado à manutenção dos mesmos.

Em particular, o risco total pode ser computado como o maior dentre os riscos individuais associados a cada ativo. Suponhamos que o risco das ações seja de 10%, o risco dos títulos seja de 5% e o risco dos REITs seja de 8%. Usando a coprodução, podemos calcular o risco combinado como o maior desses três riscos, que é de 10%. Este é o risco associado à carteira, assumindo que os riscos associados a cada ativo são independentes. Com o auxílio da propriedade universal do coproduto, podemos inferir sobre o comportamento de uma carteira sob diferentes pressupostos acerca da correlação entre os riscos associados a cada ativo. Por exemplo, podemos utilizar a propriedade universal para demonstrar que, se os riscos associados às ações e aos REITs estiverem positivamente correlacionados, o risco total associado à manutenção desses ativos será maior do que o maior entre seus riscos individuais.

Desta forma, a utilização da propriedade universal em conjunto com coprodutos pode fornecer um método mais preciso e eficiente para analisar carteiras de investimento. Isso nos permite entender as propriedades únicas do coproduto em relação ao isomorfismo e inferir sobre o comportamento da carteira sob diferentes pressupostos relativos à correlação e ao risco.


Considerações finais

A Teoria das Categorias oferece um poderoso conjunto de instrumentos para a análise de sistemas complexos, e seus conceitos de produtos, coprodutos e propriedade universal apresentam relevante aplicação prática em finanças, particularmente no campo da negociação algorítmica. Ao empregar essas concepções em MQL5, os operadores de mercado podem adquirir um entendimento mais aprofundado do comportamento dos mercados financeiros e elaborar estratégias de negociação mais eficientes. A utilização de produtos e coprodutos habilita os traders a raciocinar sobre o comportamento conjunto ou diverso de instrumentos financeiros, e a compor carteiras mais intrincadas que considerem a interrelação entre os ativos.

A propriedade universal assegura que essas construções sejam singulares e atendam a certas propriedades desejáveis. Limites e colimites proporcionam um modo mais abstrato e amplo de refletir sobre o comportamento de sequências de domínios e permitem aos operadores de mercado desenvolver estratégias de gestão de risco mais sofisticadas. Em resumo, a aplicação da Teoria das Categorias em finanças pode avançar significativamente nosso entendimento sobre os mercados financeiros e permitir que os traders tomem decisões mais fundamentadas. Incorporando estes conceitos no MQL5, os operadores de mercado podem usufruir integralmente das vantagens da Teoria das Categorias e elaborar estratégias de negociação mais efetivas baseadas em um entendimento mais profundo da estrutura subjacente dos mercados financeiros.

Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/12085

Arquivos anexados |
SignalCT3.mqh (10.76 KB)
ct_3_1.mq5 (96.41 KB)
Desenvolvimento de um sistema de negociação baseado no Índice de Facilitação do Mercado de Bill Williams Desenvolvimento de um sistema de negociação baseado no Índice de Facilitação do Mercado de Bill Williams
Este é um novo artigo de uma série na qual aprendemos a desenvolver sistemas de negociação baseados em indicadores técnicos conhecidos. Neste novo artigo, analisamos o Índice de Facilitação do Mercado (Market Facilitation Index, MFI), criado por Bill Williams.
Desenvolvendo um sistema de Replay - Simulação de mercado (Parte 14): Nascimento do SIMULADOR (IV) Desenvolvendo um sistema de Replay - Simulação de mercado (Parte 14): Nascimento do SIMULADOR (IV)
Neste artigo continuaremos a fase de desenvolvimento do simulador. Mas agora, vamos ver como criar de fato um movimento do tipo RANDOM WALK. Este tipo de movimentação é muito interessante, pois tudo envolvido no mercado de capitais tem como base este tipo de movimentação. Além do mais você vai começar a entender alguns conceitos importantes para quem faz estáticas de mercado.
Desenvolvendo um fator de qualidade para os EAs Desenvolvendo um fator de qualidade para os EAs
Nesse artigo vamos explicar como desenvolver um fator de qualidade para ser retornado pelo seu EA no testador de estratégia. Iremos mostrar duas formas de cálculo conhecidas (Van Tharp e Sunny Harris).
Desenvolvendo um sistema de Replay - Simulação de mercado (Parte 13): Nascimento do SIMULADOR (III) Desenvolvendo um sistema de Replay - Simulação de mercado (Parte 13): Nascimento do SIMULADOR (III)
Aqui iremos dar uma leve otimizada nas coisas. Isto para facilitar o que iremos fazer no próximo artigo. Mas também irei explicar como você pode visualizar o que o simulador está gerando em termos de aleatoriedade.