English 中文 Español Deutsch 日本語 Português
preview
Теория категорий в MQL5 (Часть 3)

Теория категорий в MQL5 (Часть 3)

MetaTrader 5Интеграция | 19 апреля 2023, 10:35
656 2
Stephen Njuki
Stephen Njuki

Введение

В предыдущей статье мы рассмотрели определение категории, сосредоточив внимание на ее аксиомах, а также введя журналы онтологии. В этой статье мы исследуем пределы и копределы, сосредоточимся на соответствующих произведениях и копроизведениях и завершим рассмотрением универсальных свойств. Однако, прежде чем мы углубимся в то, как эти концепции могут быть разработаны в MQL5, было бы полезно поделиться некоторыми идеями о том, как теория категорий может применяться и использоваться в торговой системе. Система, представленная здесь, очень рудиментарна и предназначена только для того, чтобы подчеркнуть потенциал предмета для трейдера.


Пролог

В этой статье мы рассмотрим произведения, которые в теории категорий представляют собой способ перечисления пар элементов доменов без потери предшествующей информации о составляющих. Создадим советник, используя эту особенность в сигнальном файле Мастера MQL5. Итак, наше произведение будет находиться между двумя доменами, а именно значениями индикатора DeMarker и Williams Percent Range. Затем каждый из этих доменов будет иметь морфизмы с доменами Long Condition и Short Condition. Чистый результат суммирования выходных данных двух доменов, которые являются синонимами функций покупки и продажи типичного сигнального файла, будет определять, будет ли советник открывать длинную или короткую позицию. Ниже приведен листинг сигнального файла.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
   }


Отчет тестера, основанный на реальных тиках за большую часть 2022 года для пары EURJPY, дает нам следующую кривую.

ct_3_curve


Ниже приведены детали отчета.

  ct_3_report

Ясно, что это не идеальная система, но она представляет некоторые идеи, которые можно развить в нечто более целостное. Во вложениях представлен полный исходный код.

Согласно Википедии, пределы и копределы, как и тесно связанные с ними понятия универсальных свойств, очень абстрактны. Для их понимания полезно сначала изучить конкретные примеры, которые обобщаются эими понятиями, такие как произведения и копроизведения.



Произведения

Произведение двух доменов A и B представляется как A x B и определяется как множество упорядоченных пар (a, b), где a ∈ A и b ∈ B. Символически

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

Произведение является обобщением декартова произведения доменов и отражает идею "пары" или "кортежа" доменов в категории. Интуитивно произведение C представляет собой "совместное" или "составное" поведение A и B.

В дополнение к рассмотренному ниже универсальному свойству произведение обладает следующими свойствами:

  • Произведение ассоциативно: (A × B) × C изоморфно A × (B × C).
  • Произведение коммутативно: A × B изоморфно B × A.
  • Произведение домена и исходного домена изоморфно самому домену: A × 1 изоморфно A.
  • Произведение домена и конечного домена изоморфно самому домену: A × 0 изоморфно 0.

Концепция произведений может применяться к различным математическим структурам, включая множества, группы, кольца и векторные пространства, а также к более абстрактным структурам, таким как топологические пространства и сами категории. В каждом случае произведение отражает идею "совместного" или "составного" поведения двух доменов или структур и обеспечивает способ рассуждения о поведении системы в целом. Управление рисками - один из примеров того, как использование теории категорий в финансах обеспечивает лучшую альтернативу традиционным подходам.

Теория категорий позволяет использовать более абстрактный и общий подход к моделированию финансового риска, который можно применять к широкому кругу финансовых инструментов и рынков. Этот подход может обеспечить более унифицированную и гибкую основу для понимания риска по сравнению с традиционным подходом использования конкретных моделей для каждого инструмента или рынка. Кроме того, использование теории категорий в управлении рисками может привести к более надежным и масштабируемым стратегиям управления рисками, которые лучше подходят для сложной и взаимосвязанной природы современных финансовых рынков.

Например, в традиционном управлении рисками риск часто моделируется с использованием конкретных математических моделей для каждого финансового инструмента или рынка. Например, модель Блэка-Шоулза обычно используется для моделирования риска опционов, а модель VaR (Value at Risk) часто используется для моделирования риска портфеля активов. Эти модели могут быть эффективными, но они ограничены по своему охвату, и их может быть трудно распространить на новые финансовые инструменты или рынки.

Напротив, теория категорий предлагает более абстрактный и общий подход к моделированию риска. Например, финансовые инструменты на рынках могут быть представлены как домены в категории, а риск представлен как морфизм этих доменов в домен позиции, который имеет только два элемента: длинную позицию и короткую позицию. Это позволит создать более унифицированную и гибкую основу для понимания риска, которую можно применять к широкому кругу финансовых инструментов и рынков. Аналогичный подход был использован нашим сигнальным файлом в прологе.

Например, предположим, что у нас есть два финансовых инструмента, A и B, и мы хотим смоделировать риск перехода от A к B. A и B можно представить в виде доменов, а риск перехода от A к B - как их соответствующие морфизмы. Эти морфизмы будут отражать риск, связанный с переходом от A к B, с учетом таких факторов, как волатильность, ликвидность и рыночные условия. В качестве альтернативы, как показано в прологе, у нас может быть один инструмент, и мы хотим знать, какую позицию нам нужно иметь в определенное время. Берем финансовые показатели по этому инструменту и находим их взвешенное произведение. Полученное значение повлияет на наше решение. Ниже приведен отрывок листинга, в котором показана только комбинация значений этих индикаторов. Во-первых, нам нужен класс для обработки и хранения информации о доменах произведения.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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){};
   };

После того, как мы их определили, мы можем выполнить произведение(я) следующим образом.

      //////////
      //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));
      }


Эти значения индикаторов, хотя и не нормализованы, как в файле сигналов в прологе, тем не менее могут рассматриваться или использоваться как индикаторы риска для принятия торгового решения. Запуск скрипта выдает следующие записи.

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 и B, и мы хотим смоделировать совместный риск, связанный с удерживанием их обоих в портфеле. Мы можем представить А и В как домены в категории, а их совместный риск - как произведение двух доменов. Эти домены произведения будут охватывать комбинированный риск, связанный как с A, так и с B, с учетом их индивидуальных рисков, а также любых взаимодействий между ними. Этот подход сохраняет входной риск каждого финансового инструмента, так что при обучении модели можно рассматривать отдельные входные данные для большей точности и понимания, а не усреднять два в один. По сути, мы лучше понимаем общий риск, связанный с различными финансовыми инструментами и таким образом можем разрабатывать более эффективные стратегии управления рисками. Для иллюстрации сказанного можно использовать произведения для моделирования риска, связанного со сложными финансовыми структурами, такими как обеспеченные долговые обязательства (collateralized debt obligations, CDO), которые состоят из нескольких базовых активов.

Произведения в теории категорий имеют тенденцию склоняться к абстракции и общим фреймворкам, которые могут привести к широкому спектру применения в финансовых инструментах и рынках, в том числе и при моделировании риска. Это позволяет использовать более унифицированный и гибкий подход к управлению рисками, что может помочь нам лучше понять взаимодействия и зависимости между различными финансовыми инструментами и рынками, в отличие от специфики VaR/Блэка-Шоулза. Предположим, у нас есть портфель S&P 500, состоящий из различных акций, и мы хотим смоделировать риск этого портфеля. Мы могли бы сделать это с помощью VaR, который оценивает максимальный потенциальный убыток портфеля с заданным уровнем вероятности.

Тем не менее, VaR имеет некоторые ограничения, такие как предположение о нормальном распределении, которое может не выполняться на практике, неспособность уловить сложные отношения риска между активами в портфеле, а также неспособность оценить величину убытков при нарушении VaR. Теория категорий обеспечивает более абстрактный и гибкий способ моделирования риска, сосредоточив внимание на структуре и отношениях между различными элементами портфеля, а не только на их индивидуальных свойствах. В частности, теория категорий позволяет нам представить портфель S&P 500 как категорию, где активы являются доменами категории, а отношения риска между ними фиксируются морфизмами или стрелками категории.

Например, мы могли бы определить морфизм между двумя активами как представляющий отношения риска между ними, такие как степень, в которой их цены движутся в одном и том же направлении или в противоположном направлении (например, корреляция). Определяя такие морфизмы, мы можем построить более подробную и детализированную картину отношений риска между активами в портфеле, что может быть более точным, чем простое использование VaR. Более того, абстрагируя отношения риска между активами как морфизмы, мы можем применять мощные инструменты и концепции из теории категорий, такие как состав, двойственность и универсальные свойства, для анализа и управления рисками в портфеле. Например, мы могли бы использовать композицию морфизмов, чтобы объединить отношения риска между несколькими активами и получить общий риск портфеля, или мы могли бы использоватьдвойственность (о ней позже) для изучения обратных отношений риска между активами.

Вот числовой пример, чтобы дополнительно проиллюстрировать, как использование теории категорий, включая произведения, может дать преимущества по сравнению с вышеупомянутыми традиционными методами измерения риска. Предположим, у нас есть портфель, состоящий из двух финансовых инструментов, А и В, каждый из которых имеет текущую стоимость 100 долларов, и мы хотим оценить совместный риск, связанный с владением ими обоими. Для простоты предположим, что доходность А и В нормально распределена со средним значением 10% и стандартным отклонением 20%. Используя традиционные модели, такие как VaR, мы можем оценить индивидуальные риски A и B, а также их совместный риск. Например, используя VaR с доверительной вероятностью 95%, мы можем оценить, что однодневная VaR для A и B по отдельности составляет примерно 25,46 доллара, а совместная VaR — примерно 36,03 доллара.

VaR = стоимость портфеля x волатильность x z-score

VaR = 100$ x 20% x 1,645

VaR = 36,03$.

 

В качестве альтернативы мы могли бы использовать теорию категорий и произведения теории категорий для моделирования совместного риска A и B. В этом подходе мы представляем A и B как домены в категории, а их общий риск как произведение двух доменов. Используя стандартную формулу произведения двух нормально распределенных случайных величин, мы можем рассчитать, что совместное распределение А и В имеет среднее значение 10% и стандартное отклонение примерно 0,28.

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

VaR = 29,15$.

 

Используя этот подход, мы могли бы оценить однодневную VaR для совместного риска A и B, используя стандартную формулу VaR. При доверительном уровне 95% однодневная VaR для совместного риска A и B составит приблизительно 29,15$. В этом примере использование теории категорий и модели произведения совместного риска A и B дает другую оценку совместного VaR, чем традиционная модель, описанная выше. Однако теория категорий может обеспечить более общий и гибкий подход к управлению рисками, который может применяться к более широкому кругу финансовых инструментов и рынков и может более эффективно учитывать совокупный риск, связанный с несколькими финансовыми инструментами. Это означает, что типичным результатом произведения домена будет матрица, в которой перечислены результаты риска для каждой итерации. Этот континуум данных служит основой для оценки среднего значения и стандартного отклонения в зависимости от целей и задач инвесторов.

Произведение — это тип предела, поэтому, возможно, было бы полезно предоставить некоторые общие замечания о том, как пределы в целом могут быть полезными для трейдеров при разработке системы. В контексте финансов использование пределов может помочь нам более эффективно аппроксимировать сложные финансовые структуры, что может помочь в разработке более точных стратегий управления рисками. Например, мы можем использовать концепцию пределов для оценки стоимости портфеля, содержащего большое количество различных финансовых инструментов. Представляя портфель как предел более простых доменов, мы можем более точно и эффективно оценить его стоимость.

В качестве примера предположим, что у нас есть портфель из 1000 финансовых инструментов, каждый из которых имеет текущую стоимость 100$. Мы хотим оценить стоимость всего портфеля, а также совокупный риск, связанный с владением всеми инструментами. Использование традиционных методов, таких как VaR или метод Блэка-Шоулза, может быть затруднено из-за многомерного характера портфеля. Однако, используя концепцию пределов в теории категорий, мы можем представить портфель как предел более простых доменов, таких как сумма первых n финансовых инструментов, где n находится в диапазоне от 1 до 1000. Затем мы можем оценить стоимость портфеля, взяв предел суммы, когда n приближается к 1000. Используя этот подход, мы можем более точно и эффективно оценить стоимость портфеля.

Более того, использование пределов в теории категорий может позволить нам рассуждать о поведении финансовых инструментов и рынков по мере приближения к определенным пределам. Например, мы можем использовать концепцию пределов для анализа поведения финансовых рынков в периоды крайней волатильности, а также для разработки стратегий управления рисками, которые лучше подходят для этих условий. Подводя итог, можно сказать, что использование пределов в теории категорий может принести дополнительные преимущества при использовании теории категорий и произведений в финансах, позволяя нам эффективнее апроксимировать сложные финансовые структуры и анализировать поведение финансовых инструментов и рынков по мере того, как они приближаются к определенным пределам.


Универсальное свойство произведения

Универсальное свойство — это способ характеристики домена в категории на основе того, как он взаимодействует с другими доменами в категории. Это свойство можно использовать для более абстрактного определения доменов и операций, что может привести к созданию более мощных и гибких моделей. В контексте финансов использование универсальных свойств может позволить нам более абстрактно определять финансовые инструменты и рынки, что может облегчить их рассмотрение и разработку более общих моделей. Например, мы можем определить торгуемый на бирже дериватив как домен категории, который удовлетворяет определенным универсальным свойствам, таким как определение того, кто является регулятором, помимо указания, является ли это опционом или фьючерсным контрактом. Эта идентификация может помочь в оценке затрат на соблюдение требований и риска контрагента. Ниже приведен фрагмент скрипта, демонстрирующий сказанное.

      //////////////////////////////
      //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))
                              {
                              }
                           }
                        }
                     }
                  }
               }
            }
         }
      }

При запуске этого скрипта мы создаем показанные ниже записи, которые отображают гомоморфизм между конусным доменом и доменом свойства. Этот гомоморфизм отмечает универсальное свойство.

/*
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
*/

Использование универсальных свойств также может упростить рассмотрение сложных финансовых структур, таких как обеспеченные долговые обязательства (CDO). Эти структуры обычно состоят из нескольких базовых активов, каждый из которых имеет свой собственный профиль риска. Определяя базовые активы как домены в категории и используя универсальные свойства для определения структуры CDO, мы можем разработать более абстрактные и общие модели, которые более эффективно отражают совместный риск, связанный с базовыми активами. Кроме того, концепцию универсального свойства можно использовать для разработки новых финансовых инструментов или произведений путем определения их желаемых универсальных свойств, а не пытаться создать конкретный финансовый инструмент с нуля. Это может привести к созданию более инновационных и мощных финансовых продуктов, которые лучше соответствуют потребностям инвесторов и рынка.

      ////////////////////////////
      //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));
         }
      }
      


При повторном запуске этого скрипта мы получаем гомоморфизм универсального свойства, которое, по сути, отображает уровни риска (в данном случае значения ATR) на портфель в конусном домене, который был сформирован в результате произведений различных ценных бумаг.

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))}


Копроизведения

В алгебре копроизведение двух групп (G и H) является доменом, который содержит все элементы как G, так и H, с доменной операцией, определенной таким образом, что результирующая структура является "наименьшим" доменом, которая содержит как G, так и H. Это отличается от произведения двух доменов, который представляет собой домен, содержащий все пары элементов (g, h), где g находится в G, а h находится в H, с операцией домена, определенной покомпонентно. Копроизведение — это копредел, потому что это "наименьшая верхняя граница" G и H в том смысле, что любой другой домен, содержащий как G, так и H, также должен содержать копроизведение.

Копроизведение двух доменов A и B также является третьим доменом C вместе с двумя морфизмами вложения из A и B в C соответственно, так что для любого другого домена D с двумя морфизмами из A и B соответственно существует единственный морфизм из C на D, что приводит к замене некоторых диаграмм. Копроизведение также называют "непересекающимся объединением" или "суммой" A и B, поскольку оно отражает идею выбора между двумя разными доменами. Интуитивно копроизведение C представляет собой "альтернативное" или "расходящееся" поведение A и B.

Копроизведение обычно удовлетворяет следующим свойствам:

  • Оно ассоциативно: (A + B) + C изоморфно A + (B + C).
  • Оно коммутативно: A + B изоморфно B + A.
  • Копроизведение домена с исходным доменом изоморфно самому домену: A + 0 изоморфно A.
  • Копроизведение домена с конечным доменом изоморфно самому домену: A + 1 изоморфно 1.

Концепция копроизведений может применяться к различным математическим структурам, включая множества, группы, кольца и векторные пространства, а также к более абстрактным структурам, таким как топологические пространства и сами категории. В каждом случае копроизведение отражает идею "выбора" или "альтернативы" между двумя доменами или структурами и обеспечивает способ рассуждения о поведении системы в целом.

С точки зрения трейдера, копроизведения в теории категорий могут использоваться для моделирования и анализа инвестиционных портфелей и могут стать лучшей альтернативой традиционным методам оценки портфеля, потому что они представляют собой способ объединения доменов в категорию, где результирующий домен представляет собой выбор между исходными доменами. Например, копроизведение двух чисел является их максимумом. Это свойство можно использовать для моделирования инвестиционных портфелей как выбора между различными активами, а также для более гибкого и общего анализа оценки этих портфелей.

В качестве примера предположим, что у нас есть инвестиционный портфель, содержащий два актива: акции и облигации. Мы хотим проанализировать стоимость портфеля и то, как она меняется в различных рыночных условиях. Традиционно это делается с использованием таких методов, как анализ дисконтированных денежных потоков или модель оценки капитальных активов (capital asset pricing model, CAPM). Однако используя копроизведения в теории категорий, мы можем моделировать портфель как выбор между акцией и облигацией. Полученный домен копроизведения будет представлять стоимость портфеля в различных рыночных условиях и охватит совместный риск, связанный с владением обоими активами.

Для простоты предположим, что текущая стоимость акции составляет 50$, а текущая стоимость облигации — 100$. Мы можем определить копроизведение акции и облигации как их максимум, который составляет 100$. Это означает, что стоимость портфеля составляет не менее 100$ независимо от рыночных условий. Используя этот подход, мы можем анализировать поведение портфеля при различных рыночных сценариях. Например, если цена акции увеличится до 60$, а цена облигации останется прежней, стоимость портфеля составит 110$, что больше, чем 60 или 100$, отражает прирост цены, но остается меньше общей суммы 160$. Точно так же, если цена облигации снизится до 90$, а цена акции останется прежней, стоимость портфеля по-прежнему составит 100$, что больше, чем 50 или 90$, но все же ниже общей суммы в 140$. В целом копроизведения обеспечивают консервативный, менее изменчивый подход к оценке, в меньшей степени привязанный к колебаниям рыночных цен. Поэтому мы можем моделировать инвестиционные портфели как выбор между различными активами и анализировать их поведение более гибким и общим способом. Это может привести к более точным и эффективным долгосрочным стратегиям оценки портфеля и позволяет лучше учитывать совместный риск, связанный с владением несколькими активами.

 

Копроизведения и универсальное свойство

Концепция универсального свойства, как в случае с произведениями выше, является мощным инструментом теории категорий, который также можно использовать для дальнейшего улучшения анализа сопутствующих продуктов в финансах. Она обеспечивает формальный способ характеристики уникальности копроизведения для определенного вида изоморфизма, что может привести к более эффективному и точному анализу инвестиционных портфелей. В качестве примера рассмотрим портфель, состоящий из трех активов: акции, облигации и инвестиционного фонда недвижимости (real estate investment trust, REIT). Мы можем смоделировать этот портфель, используя копроизведение акций, облигаций и REIT в категории инвестиционных активов. Копроизведение этих трех активов можно рассматривать как выбор между владением акцией, облигацией или REIT. Мы можем использовать универсальное свойство копроизведений, чтобы понять, насколько этот выбор уникален для изоморфизма. В частности, универсальное свойство копроизведения гласит, что для любого другого домена Z и морфизмов из трех активов в Z существует уникальный морфизм из копроизведения в Z, что приводит к замене некоторых диаграмм.

Используя универсальное свойство, мы можем точнее и эффективнее рассуждать о поведении копроизведения. Например, предположим, что мы хотим рассчитать совместный риск, связанный с владением акциями, облигациями и REIT. Мы можем использовать универсальное свойство копроизведения, чтобы показать, что любая оценка, которая удовлетворяет диаграммам, требуемым универсальным свойством, должна также удовлетворять определенным свойствам, таким как субаддитивность риска. В качестве иллюстрации предположим, что стоимость акции составляет 50$, облигации — 100$, а REIT — 150$. Используя копроизведение, мы можем смоделировать портфель как выбор между этими тремя активами и рассчитать совместный риск, связанный с их владением.

В частности, общий риск может быть рассчитан как максимум индивидуальных рисков, связанных с каждым активом. Предположим, что риск, связанный с акциями, составляет 10%, риск, связанный с облигациями, составляет 5%, а риск, связанный с REIT, составляет 8%. Используя копроизведение, мы можем рассчитать совместный риск как максимальный из этих трех рисков, что составляет 10%. Это риск, связанный с портфелем, при условии, что риски, связанные с каждым активом, независимы. Используя универсальное свойство копроизведения, мы можем рассуждать о поведении портфеля при различных предположениях о корреляции между рисками, связанными с каждым активом. Например, мы можем использовать универсальное свойство, чтобы показать, что если риски, связанные с акциями и REIT, положительно коррелированы, то общий риск, связанный с их владением, будет выше, чем максимум их индивидуальных рисков.

Таким образом, использование универсального свойства в сочетании с копроизведениями может обеспечить более точный и эффективный способ анализа инвестиционных портфелей. Это позволяет нам понять уникальные свойства копроизведения применительно к изоморфизму и рассуждать о поведении портфеля при различных предположениях о корреляции и риске.


Заключение

Теория категорий предоставляет мощный набор инструментов для анализа сложных систем, а ее концепции произведений, копроизведений и универсального свойства имеют важное практическое применение в финансах, особенно в области алгоритмической торговли. Реализуя эти концепции в MQL5, трейдеры могут получить более глубокое представление о поведении финансовых рынков и разработать более эффективные торговые стратегии. Использование произведений и копроизведений позволяет трейдерам рассуждать о совместном или разном поведении финансовых инструментов и создавать более сложные портфели, учитывающие взаимосвязь между активами.

Универсальное свойство гарантирует, что эти конструкции уникальны и удовлетворяют определенным желаемым свойствам. Пределы и копределы обеспечивают более абстрактный и широкий способ рассуждения о поведении последовательностей доменов и позволяют трейдерам разрабатывать более сложные стратегии управления рисками. В целом, применение теории категорий в финансах может далеко продвинуть наши представления о финансовых рынках и позволить трейдерам принимать более обоснованные решения. Включив эти концепции в MQL5, трейдеры могут воспользоваться всеми преимуществами теории категорий и разработать более эффективные торговые стратегии, основанные на более глубоком понимании базовой структуры финансовых рынков.

Перевод с английского произведен MetaQuotes Ltd.
Оригинальная статья: https://www.mql5.com/en/articles/12085

Прикрепленные файлы |
SignalCT3.mqh (10.76 KB)
ct_3_1.mq5 (96.41 KB)
Последние комментарии | Перейти к обсуждению на форуме трейдеров (2)
Yevgeniy Koshtenko
Yevgeniy Koshtenko | 8 мая 2023 в 08:16
Очень заинтересовала статья. Но не получается создать советник по сигналу в Мастере. Просит это: <Expert\Signal\My\Cct.mqh>
Stephen Njuki
Stephen Njuki | 25 мая 2023 в 17:36
Pse see attachment.
Нейросети — это просто (Часть 38): Исследование с самоконтролем через несогласие (Self-Supervised Exploration via Disagreement) Нейросети — это просто (Часть 38): Исследование с самоконтролем через несогласие (Self-Supervised Exploration via Disagreement)
Одной из основных проблем обучения с подкреплением является исследование окружающей среды. Ранее мы уже познакомились с методом исследования на базе внутреннего любопытства. Сегодня я предлагаю посмотреть на ещё один алгоритм — исследование через несогласие.
Разработка торговой системы на основе Индекса облегчения рынка MFI от Билла Вильямса Разработка торговой системы на основе Индекса облегчения рынка MFI от Билла Вильямса
Это новая статья из серии, в которой мы учимся создавать торговые системы на основе популярных технических индикаторов. В этой новой статье мы рассмотрим Индекс облегчения рынка (Market Facilitation Index, MFI), разработанный Биллом Вильямсом.
Как построить советник, работающий автоматически (Часть 09): Автоматизация (I) Как построить советник, работающий автоматически (Часть 09): Автоматизация (I)
Хотя создание автоматического советника не является очень сложной задачей, однако без необходимых знаний может быть допущено много ошибок. В этой статье мы рассмотрим, как построить первый уровень автоматизации: он заключается в создании триггера для активации безубытка и трейлинг-стопа.
Машинное обучение и Data Science (Часть 11): Наивный байесовский классификатор и теория вероятностей в трейдинге Машинное обучение и Data Science (Часть 11): Наивный байесовский классификатор и теория вероятностей в трейдинге
Торговлю по вероятностям можно сравнить с ходьбой по канату — она требует точности, баланса и четкого понимания риска. В мире трейдинга вероятность решает все. Именно от нее зависит результат — успех или неудача, прибыль или убыток. Используя возможности вероятности, трейдеры могут принимать более обоснованные решения, эффективнее управлять рисками и достигать своих финансовых целей. Неважно, опытный вы инвестор или начинающий трейдер, понимание вероятности может стать ключом к раскрытию вашего торгового потенциала. В этой статье мы познакомимся с увлекательным миром вероятностного трейдинга и покажем, как вывести игру в торговлю на новый уровень.