MQL5の圏論(第3回)
はじめに
圏の公理に焦点を当てることによって圏の定義について取り上げ、オントロジーログを紹介した前回の記事に続いて、圏論についての連載を続けます。極限と余極限について研究し、それぞれの積と余積タイプに焦点を当て、最後にそれぞれの普遍性 についての立場をカバーします。 しかし、MQL5でこれらの概念をどのように開発できるかを掘り下げる前に、この記事までに取り扱った内容に基づいて、圏論を取引システムでどのように適用して使用できるかについて、いくつかのアイデアを共有すると励みになるかもしれません。ここで共有されているシステムは非常に初歩的なものであり、トレーダーに対して対象の可能性を強調することのみを目的としています。これはプロローグで最初に説明されています。
プロローグ
この記事では積について見ていきます。これは、圏論において、以前の構成情報を失うことなく域の要素の組み合わせを列挙する方法です。これをMQL5ウィザードシグナルファイル内で使用して、エキスパートアドバイザー(EA)を作成します。積は2つの域、つまりDe-Markerの指標値とWilliamsPercentRangeの指標値の間にあることになります。これらの域のそれぞれは、「買いの条件」と「売りの条件」の域との射を持ちます。EAは、2つの域の出力を足した最終的な結果によって買うか売るかを決定します。これは、典型的なシグナルファイルの売買機能と同義です。以下はシグナルファイルのコードです。
//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ 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ペアのテスターレポートは、次の曲線を示しています。
レポートの詳細は次の通りです。
明らかに完璧なシステムではありませんが、さらにより総体的な何か発展させることができるいくつかのアイデアが提示されています。完全なソースコードについては、添付ファイルを参照してください。
ウィキペディアによると、極地と余極地は、普遍性の強く関連する概念と同様に高い抽象レベルで存在するもので、それらを理解するにはまず、それぞれ積や余積のように、これらの概念が一般化することを目的とした具体的な例を検討することが役立ちます。
積
2つの域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と同型
積の概念は、集合、群、環、ベクトル空間などのさまざまな数学的構造や、位相空間や圏自体などのより抽象的な構造に適用できます。いずれの場合も、積は2つの域または構造の「結合」または「複合」動作のアイデアを捉え、体系全体の動作を推論する方法を提供します。 金融における圏論の使用が、一般的に適用されるものよりも優れた代替手段を提供する例の1つは、リスク管理です。
圏論によって、より抽象的かつ一般的な方法で金融リスクをモデル化することができます。これは、幅広い金融商品や市場に適用できます。この方法は、商品や市場ごとに特定のモデルを使用する従来の方法と比較して、リスクを理解するためのより統一された柔軟な枠組みを提供できます。さらに、リスク管理における圏論の使用は、現代の金融市場の複雑で相互接続された性質により適した、より堅牢でスケーラブルなリスク管理戦略につながる可能性があります。
たとえば、従来のリスク管理では、金融商品や市場ごとに特定の数学的モデルを使用してリスクをモデル化することがよくあります。たとえば、ブラック-ショールズモデルがオプションのリスクをモデル化するためによく使用される一方、VaR(バリューアットリスク)モデルが資産ポートフォリオのリスクをモデル化するためによく使用されます。これらのモデルは効果的ですが、範囲が限定されており、新しい金融商品や市場に一般化するのが難しい場合があります。
対照的に、圏論は、リスクをモデル化するためのより抽象的で一般的な方法を提供します。たとえば、市場の金融商品は圏内の域として表すことができ、リスクはこれらの域からロングポジションとショートポジションの2つの要素のみを持つポジション域への射として表すことができます。これにより、リスクを理解するためのより統一された柔軟な枠組みが可能になり、幅広い金融商品や市場に適用できるようになります。プロローグのシグナルファイルでも同様の方法が使用されました。
たとえば、AとBの2つの金融商品があり、AからBに移動するリスクをモデル化するとします。AとBを域として表し、AからBに移動するリスクをそれぞれの射として表します。これらの射は、ボラティリティ、流動性、市況などの要因を考慮しながら、AからBへの移行に関連するリスクを捉えます。あるいは、プロローグに示されているように、1つの商品を持っていて、特定の時間にどのポジションを持つ必要があるかを知りたい場合もあります。この商品の金融指標を取り、加重積を見つけます。この値によって意思決定します。以下は、これらの指標値の組み合わせのみを示すリストの半分です。まず、積の域の情報を処理および保存するためのクラスが必要です。
//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ 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))}
複数の要因を考慮する機能は、たとえば、過去のパフォーマンスに対するリスク信頼区間のみを考慮するバリューアットリスクよりもマクロに敏感です。 複数の要因を射に埋め込むという概念は、従来の方法を使用してモデル化することが困難なデリバティブなどの複雑な金融商品に関連するリスクを特定および定量化するために、さらに一歩進めることができます。繰り返しますが、これはデータを域に分離し、完全性保存射によってリンクするという体系的な方法のおかげです。さらに、さまざまな金融商品と市場の間の相関関係を考慮する戦略など、現代の金融市場の複雑で相互接続された性質により適したリスク管理戦略を開発することができます。
圏論における積の概念は、例として複数の資産にわたるリスク管理のための金融にも役立ちます。圏内の2つの域の積は、それらを1つの域に結合する方法を提供します。これを使用して、両方の域(資産)に関連する共同リスクをモデル化できます。 たとえば、AとBの2つの金融商品があり、ポートフォリオで両方を保有することに関連する共同リスクをモデル化するとします。AとBを圏内の域として表し、それらの共同リスクを2つの域の積として表すことができます。この積の域は、AとBの両方に関連する複合リスクを捉え、個々のリスクとそれらの間の相互作用を考慮します。この方法は、モデルを訓練するときに、2つを1つに平均化するのではなく、精度と洞察を向上させるために、別々の入力の両方を考慮することができるように、各金融商品の入力リスクを保持します。本質的に、私たちはさまざまな金融商品に関連する共同リスクをよりよく理解しており、したがって、より効果的なリスク管理戦略を開発する立場にあります。たとえば、積を使用して、複数の原資産で構成される債務担保証券(CDO)などの複雑な金融構造に関連するリスクをモデル化することができます。
圏論の積は抽象化と一般的な枠組みに傾く傾向があり、たとえばリスクをモデル化する場合、金融商品や市場での幅広い適用につながる可能性があります。これにより、リスク管理に対するより統一された柔軟な方法が可能になり、VaR/ブラックショールズの特異性とは対照的に、さまざまな金融商品と市場の間の相互作用と依存関係をよりよく理解するのに役立ちます。さまざまな株式で構成されるS&P500ポートフォリオがあり、このポートフォリオのリスクをモデル化したいとします。これは、VaRによっておこなうことができます。VaRは、特定の確率レベルでのポートフォリオの最大潜在損失を推定します。
ただし、VaRには、実際には当てはまらない可能性がある正規分布の仮定、ポートフォリオ内の株式間の複雑なリスク関係を把握できないこと、VaR違反が発生した場合の損失の大きさを評価できないことなど、いくつかの制限があります。.一方、圏論は、ポートフォリオの個々の特性だけでなく、ポートフォリオのさまざまな要素間の構造と関係に焦点を当てることにより、リスクをモデル化するためのより抽象的で柔軟な方法を提供します。特に、圏論により、S&P500ポートフォリオを圏ーとして表すことができます。ここで、株式は圏ーの域であり、それらの間のリスク関係は圏ーの射または矢印によって捉えられます。
たとえば、2つの株式間の射を、それらの価格が同じ方向または反対方向(相関など)に移動する程度など、それらの間のリスク関係を表すものとして定義できます。このような射を定義することで、ポートフォリオ内の株式間のリスク関係をより詳細かつ微妙に把握することができ、VaRを使用するよりも正確になる可能性があります。 さらに、株式間のリスク関係を射として抽象化することにより、ポートフォリオのリスクを分析および管理するために、組成、双対性、および普遍性などの圏理論からの強力なツールと概念を適用できます。たとえば、射の構成を使用して、複数の株式間のリスク関係を組み合わせて、ポートフォリオの全体的なリスクを導き出すか、双対を使用して株式間の逆リスク関係を研究できます。
圏論の積を含む圏論を使用すると、前述の従来のリスク指標よりも利点が得られることをさらに説明するための数値例を次に示します。それぞれの現在価値が$100の2つの金融商品AとBで構成されるポートフォリオがあり、それらの両方を保有することに関連する共同リスクを推定したいとします。簡単にするために、AとBのリターンが正規分布しており、平均が10%、標準偏差が20%であると仮定します。VaRのような従来のモデルを使用して、AとBの個々のリスク、およびそれらの共同リスクを推定することができます。たとえば、信頼水準95%のVaRを使用すると、AとBの1日VaRは個別に約$25.46、共同VaRは約$36.03と推定されます。
VaR = ポートフォリオ値 x ボラティリティ x Zスコア
VaR = $100 x 20% x 1.645
VaR = $36.03
別の方法として、圏論と圏論の積を使用して、AとBの共同リスクをモデル化することもできます。この方法では、AとBを圏内の域として表し、それらの共同リスクを2つの域の積として表します。2つの正規分布確率変数の積の標準式を使用すると、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の共同リスクの1日VaRを推定できます。95%の信頼水準では、AとBの共同リスクの1日VaRは約$29.15になります。この例では、圏論と積モデルを使用して、AとBの共同リスクは、上記の従来のモデルとは異なる共同VaRの推定値を生成します。ただし、圏論は、リスク管理に対するより一般的で柔軟な方法を提供できます。これは、より幅広い金融商品と市場に適用でき、複数の金融商品に関連する共同リスクをより効果的に捉えることができます。この機能、域積の典型的な出力は、反復ごとにリスクの結果を列挙する行列になります。この一連のデータは、投資家の目的と目標に従って、平均と標準偏差を評価するための基礎として機能します。
積は極値の一種であるため、システム開発においてトレーダーにとって積全体がどのように役立つかについての一般的な注意事項を提供するのはおそらく有用でしょう。金融の文脈では、制限を使用すると、複雑な金融構造をより効果的に近似することができ、より正確なリスク管理戦略の開発に役立ちます。たとえば、制限の概念を使用して、多数の異なる金融商品を含むポートフォリオの価値を見積もることができます。ポートフォリオをより単純な域の制限として表すことにより、その価値をより正確かつ効率的に見積もることができます。
例として、それぞれの現在価値が$100の金融商品1000個のポートフォリオがあって、ポートフォリオ全体の価値と、すべての商品の保有に関連する共同リスクを推定したいとします。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))}
余積
代数学では、2つのグループ(GとH)の余積は、GとHの両方のすべての要素を含む域であり、域操作は次のように定義されます。結果として得られる構造は、GとHの両方を含む「最小」域です。これは、2つの域の積とは異なります。これは、要素(g,h)のすべてのペアを含む域であり、gはGにあり、hはH、域操作がコンポーネントごとに定義されています。余積は余極限です。これは、GとHの両方を含む他のドメインには余積も含まれている必要があるという意味で、GとHの「最小上限」であるためです。
2 つの域AとBの余積は、それぞれAとBからCへの2つの単射とともに、それぞれAとBからの2つの射を持つ他の域Dについて、特定の図形を可換にするCからDへの一意の射が存在するような、3番目の域Cでもあります。余積は、2つの異なる域間での選択のアイデアを捉えているため、AとBの「非交和」または「和」とも呼ばれます。直観的に、余積Cは、AとBの「代替」または「発散」動作を表します。
余積は通常、次の特性を満たします。
- 結合的:(A + B) + Cは A + (B + C)と同型
- 可換:A + BはB + Aと同型
- 域と始域の余積は、域自体と同型:A + 0はAと同型
- 域と終域の余積は、域自体と同型:A + 1は1と同型
余積の概念は、集合、群、環、ベクトル空間などのさまざまな数学的構造や、位相空間や圏自体などのより抽象的な構造にも適用できます。いずれの場合も、余積は2つの域または構造の間の「選択」または「代替」のアイデアを捉え、体系全体の動作について推論する方法を提供します。
トレーダーの観点から見ると、圏論における余積は、投資ポートフォリオのモデル化と分析に使用でき、ポートフォリオ評価の従来の方法よりも優れた代替手段を提供できます。これは、それらが圏内の域を結合する方法であり、結果の域が元の域間の選択を表すためです。たとえば、2つの数値の余積はその最大値です。この特性を使用して、投資ポートフォリオをさまざまな資産からの選択としてモデル化し、これらのポートフォリオの評価をより柔軟かつ一般的な方法で分析できます。
例として、株式と債券の2つの資産を含む投資ポートフォリオがあって、ポートフォリオの価値と、それがさまざまな市場状況でどのように変化するかを分析したいとします。従来、これは割引キャッシュフロー分析や資本資産価格モデル(CAPM)などの方法を使用しておこなわれていました。しかし、圏論の余積を使用すると、株式と債券のどちらかを選択するポートフォリオをモデル化できます。結果として得られる余積の域は、さまざまな市場条件下でのポートフォリオの価値を表し、両方の資産を保有することに関連する共同リスクを捉えます。
これを簡単に説明するために、株式の現在価値が$50、債券の現在価値が$100であると仮定します。株式と債券の余積を最大値として定義できます。これは$100です。これは、市況に関係なく、ポートフォリオの価値が少なくとも$100であることを意味します。 この方法を使用して、さまざまな市場シナリオの下でポートフォリオの動作を分析できます。たとえば、株価が$60に上昇し、債券価格が同じままである場合、ポートフォリオの値は$110になり、これは$60または$100よりも大きく、価格の上昇を捉えますが、全体の合計である$160よりも少ないままになります。同様に、債券価格が$90まで下がり、株価が同じままである場合、ポートフォリオの価値は$100と見なされます。これは$50または$90よりも大きくなりますが、全体の合計である$140よりは少なくなります。全体として、余積は、市場価格の変動に左右されない、保守的で変動の少ない評価方法を提供します。したがって、投資ポートフォリオをさまざまな資産間の選択としてモデル化し、より柔軟かつ一般的な方法でそれらの動作を分析できます。これは、より正確で効果的な長期ポートフォリオ評価戦略につながり、複数の資産を保有することに関連する共同リスクをより適切に捉えることができます。
余積と普遍性
普遍性の概念は、上記の積で示されているように、圏理論の強力なツールであり、金融における余積の分析をさらに強化するためにも使用できます。これは、余積が特定の種類の同型性まで一意である方法を特徴付ける正式な方法を提供ます。これは、投資ポートフォリオに関するより効率的で正確な推論につながる可能性があります。例として、株式、債券、不動産投資信託(REIT)の3つの資産で構成されるポートフォリオを考えてみましょう。このポートフォリオは、投資資産の圏で株式、債券、REITの余積を使用してモデル化できます。これら3つの資産の余積は、株式、債券、REITのいずれを所有するかの選択と考えることができます。余積の普遍性を使用して、この選択が同型性までどのように一意であるかを理解できます。具体的には、余積の普遍性は、他の域Zおよび3つの資産からZへの射に対して、特定の図形をを可換にする余積からZへの固有の射が存在することを示しています。
普遍性を使用すると、より正確かつ効率的な方法で余積の動作を推論できます。たとえば、株式、債券、REITの保有に関連する共同リスクを計算したいとします。余積の普遍性を使用して、普遍性によって必要とされる図形を満たす評価は、リスクの部分加法性などの特定の特性も満たさなければならないことを示すことができます。 例として、株式の価値が$50、債券の価値が$100、REITの価値が$150であるとします。余積を使用して、ポートフォリオをこれら3つの資産からの選択としてモデル化し、それらの保有に関連する共同リスクを計算できます。
具体的には、共同リスクは、各資産に関連する個々のリスクの最大値として計算できます。株式に関連するリスクが10%、債券に関連するリスクが5%、REITに関連するリスクが8%であるとします。余積を使用して、これら3つのリスクの最大値として共同リスクを計算できます。これは10%です。これは、各資産に関連するリスクが独立していると仮定した場合のポートフォリオに関連するリスクです。余積の普遍性を使用して、各資産に関連するリスク間の相関関係に関するさまざまな仮定の下で、ポートフォリオの動作について推論できます。たとえば、普遍性を使用して、株式とREITに関連するリスクが正の相関関係にある場合、それらを保有することに関連する共同リスクは、個々のリスクの最大値よりも高くなるということを示すことができます。
要約すると、余積と組み合わせて普遍性を使用すると、投資ポートフォリオについてより正確かつ効率的な推論方法を提供できます。同型性までの余積の固有の特性を理解し、相関とリスクに関するさまざまな仮定の下でポートフォリオの動作について推論することができます。
結論
結論として、圏論は複雑な体系について推論するための強力なツールのセットを提供し、その積、余積、普遍性の概念は、金融、特にアルゴリズム取引の領域で重要な用途を持っています。これらの概念をMQL5に実装することにより、トレーダーは金融市場の行動についてより深い洞察を得て、より効果的な取引戦略を開発することができます。 積と余積を使用することで、トレーダーは金融商品の共同または発散行動について推論し、資産間の相互依存を考慮したより洗練されたポートフォリオを構築することができます。
普遍性は、これらの構造が一意であること、および特定の望ましい特性を満たすことを保証します。極地と余極地は、一連の域の動作を推論するためのより抽象的で幅広い方法を提供し、トレーダーがより洗練されたリスク管理戦略を開発できるようにします。全体として、金融における圏論の適用は、金融市場に対する私たちの考え方に革命をもたらし、トレーダーがより多くの情報に基づいた意思決定をおこなえるようにする可能性を秘めています。これらの概念をMQL5に組み込むことにより、トレーダーは圏論の全能力を活用し、金融市場の基礎となる構造のより深い理解に基づいたより効果的な取引戦略を開発することができます。
MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/12085
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索