Skip to content

Commit

Permalink
Features:
Browse files Browse the repository at this point in the history
	- Position Group Funding Segment Shell (1)
	- Position Group Funding Segment Set (2)
	- Position Holdings Group Set #1 (3, 4)
	- Position Holdings Group Set #2 (5, 6)
	- Position Group Segment Constructor Annotation (7, 8)
	- Position Group Instance Segment Addition (9, 10)
	- Position Group Container Netting Segments (11, 12)
	- Position Group Container Funding Segments (13, 14)
	- Position Collateral Group Path Array (15, 16)
	- Position Collateral Group Path Setting (17, 18)
	- Position Group Container Collateral Path (20)
	- Path Simulator Collateral Group Vertex (23)
	- Netting Group Collateral Paths #1 (24, 25)
	- Netting Group Collateral Paths #2 (26, 27)
	- Netting Group Collateral Paths #3 (28, 29)
	- Position Group Segment Collateral Path (30, 31)
	- Funding Group Collateral Vertex Paths (34)
	- Funding Collateral Group Path Array (35, 36)
	- Netting Collateral Group Path Array (37, 38)
	- Credit Debt Funding Netting Path (41)
	- Position Single Trajectory Path Simulator (43, 44)
	- Position Group Netting Segment Paths (45, 46)
	- Position Group Funding Segment Paths (47, 48)
	- Credit Debt Funding Group #1 (49, 50)
	- Credit Debt Funding Group #2 (51, 52)
	- Netting Aggregation Group Position Array (57, 58, 59)
	- Collateral Group Path Simulator Array (62, 63)


Bug Fixes/Clean-up:

	- Eliminate Collateral Group Path Array (19)
	- Path Simulator Single Trajectory Fix (42)


Samples:

	- Albanese Andersen Basel Proxy #1 (21, 22)
	- Albanese Andersen Basel Proxy #2 (32, 33)
	- Albanese Andersen Basel Proxy #3 (39, 40)
	- Albanese Andersen Basel Proxy #4 (53, 54)
	- Albanese Andersen Basel Proxy #5 (55, 56)
	- Albanese Andersen Basel Proxy #6 (60, 61)
  • Loading branch information
lakshmiDRIP committed Jan 23, 2018
1 parent 9d2bee9 commit 3da6707
Show file tree
Hide file tree
Showing 5 changed files with 411 additions and 40 deletions.
46 changes: 46 additions & 0 deletions ReleaseNotes/01_31_2018.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@

Features:

- Position Group Funding Segment Shell (1)
- Position Group Funding Segment Set (2)
- Position Holdings Group Set #1 (3, 4)
- Position Holdings Group Set #2 (5, 6)
- Position Group Segment Constructor Annotation (7, 8)
- Position Group Instance Segment Addition (9, 10)
- Position Group Container Netting Segments (11, 12)
- Position Group Container Funding Segments (13, 14)
- Position Collateral Group Path Array (15, 16)
- Position Collateral Group Path Setting (17, 18)
- Position Group Container Collateral Path (20)
- Path Simulator Collateral Group Vertex (23)
- Netting Group Collateral Paths #1 (24, 25)
- Netting Group Collateral Paths #2 (26, 27)
- Netting Group Collateral Paths #3 (28, 29)
- Position Group Segment Collateral Path (30, 31)
- Funding Group Collateral Vertex Paths (34)
- Funding Collateral Group Path Array (35, 36)
- Netting Collateral Group Path Array (37, 38)
- Credit Debt Funding Netting Path (41)
- Position Single Trajectory Path Simulator (43, 44)
- Position Group Netting Segment Paths (45, 46)
- Position Group Funding Segment Paths (47, 48)
- Credit Debt Funding Group #1 (49, 50)
- Credit Debt Funding Group #2 (51, 52)
- Netting Aggregation Group Position Array (57, 58, 59)
- Collateral Group Path Simulator Array (62, 63)


Bug Fixes/Clean-up:

- Eliminate Collateral Group Path Array (19)
- Path Simulator Single Trajectory Fix (42)


Samples:

- Albanese Andersen Basel Proxy #1 (21, 22)
- Albanese Andersen Basel Proxy #2 (32, 33)
- Albanese Andersen Basel Proxy #3 (39, 40)
- Albanese Andersen Basel Proxy #4 (53, 54)
- Albanese Andersen Basel Proxy #5 (55, 56)
- Albanese Andersen Basel Proxy #6 (60, 61)
73 changes: 51 additions & 22 deletions src/main/java/org/drip/xva/dynamics/PathSimulator.java
Original file line number Diff line number Diff line change
Expand Up @@ -355,7 +355,7 @@ private org.drip.xva.hypothecation.CollateralGroupVertex[][] collateralGroupVert
return collateralGroupVertexArray;
}

private org.drip.xva.hypothecation.CollateralGroupPath[] collateralGroupPathArray (
private boolean collateralGroupPathArray (
final org.drip.xva.universe.MarketPath marketPath)
{
org.drip.xva.universe.MarketVertex[] marketVertexArray = marketPath.vertexes();
Expand All @@ -368,7 +368,7 @@ private org.drip.xva.hypothecation.CollateralGroupPath[] collateralGroupPathArra

if (null == collateralGroupVertexArray)
{
return null;
return false;
}

int positionGroupCount = collateralGroupVertexArray.length;
Expand All @@ -379,17 +379,23 @@ private org.drip.xva.hypothecation.CollateralGroupPath[] collateralGroupPathArra
{
for (int positionGroupIndex = 0; positionGroupIndex < positionGroupCount; ++positionGroupIndex)
{
collateralGroupPathArray[positionGroupIndex] = new
org.drip.xva.hypothecation.CollateralGroupPath
(collateralGroupVertexArray[positionGroupIndex]);
if (!_positionGroupContainer.setCollateralGroupPath (
positionGroupIndex,
collateralGroupPathArray[positionGroupIndex] = new
org.drip.xva.hypothecation.CollateralGroupPath
(collateralGroupVertexArray[positionGroupIndex])
))
return false;
}

return true;
}
catch (java.lang.Exception e)
{
e.printStackTrace();
}

return collateralGroupPathArray;
return false;
}

/**
Expand Down Expand Up @@ -517,29 +523,52 @@ public org.drip.xva.cpty.PathExposureAdjustment singleTrajectory (
)
);

org.drip.xva.hypothecation.CollateralGroupPath[] collateralGroupPathArray =
collateralGroupPathArray (marketPath);
if (!collateralGroupPathArray (marketPath))
{
return null;
}

org.drip.xva.hypothecation.CollateralGroupPath[][] positionFundingGroupPath =
_positionGroupContainer.fundingSegmentPaths();

org.drip.xva.hypothecation.CollateralGroupPath[][] positionCreditDebtGroupPath =
_positionGroupContainer.nettingSegmentPaths();

int positionFundingGroupCount = positionFundingGroupPath.length;
int positionCreditDebtGroupCount = positionCreditDebtGroupPath.length;
org.drip.xva.netting.FundingGroupPath[] fundingGroupPathArray = new
org.drip.xva.strategy.AlbaneseAndersenFundingGroupPath[positionFundingGroupCount];
org.drip.xva.netting.CreditDebtGroupPath[] creditDebtGroupPathArray = new
org.drip.xva.strategy.AlbaneseAndersenNettingGroupPath[positionCreditDebtGroupCount];

if (org.drip.xva.dynamics.AdjustmentDigestScheme.ALBANESE_ANDERSEN_METRICS_POINTER ==
_simulatorScheme.adjustmentDigestScheme())
{
return new org.drip.xva.cpty.MonoPathExposureAdjustment (
new org.drip.xva.strategy.AlbaneseAndersenNettingGroupPath[]
{
new org.drip.xva.strategy.AlbaneseAndersenNettingGroupPath (
collateralGroupPathArray,
marketPath
)
},
new org.drip.xva.strategy.AlbaneseAndersenFundingGroupPath[]
{
for (int positionFundingGroupIndex = 0; positionFundingGroupIndex <
positionFundingGroupCount; ++positionFundingGroupIndex)
{
fundingGroupPathArray[positionFundingGroupIndex] =
new org.drip.xva.strategy.AlbaneseAndersenFundingGroupPath (
collateralGroupPathArray,
positionFundingGroupPath[positionFundingGroupIndex],
marketPath
)
}
);
);
}

for (int positionCreditDebtGroupIndex = 0; positionCreditDebtGroupIndex <
positionCreditDebtGroupCount; ++positionCreditDebtGroupIndex)
{
creditDebtGroupPathArray[positionCreditDebtGroupIndex] =
new org.drip.xva.strategy.AlbaneseAndersenNettingGroupPath (
positionCreditDebtGroupPath[positionCreditDebtGroupIndex],
marketPath
);
}
}

return new org.drip.xva.cpty.MonoPathExposureAdjustment (
creditDebtGroupPathArray,
fundingGroupPathArray
);
}
catch (java.lang.Exception e)
{
Expand Down
32 changes: 32 additions & 0 deletions src/main/java/org/drip/xva/holdings/PositionGroup.java
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@
public class PositionGroup
{
private org.drip.function.definition.R1ToR1 _r1ToR1ValueGenerator = null;
private org.drip.xva.hypothecation.CollateralGroupPath _collateralGroupPath = null;
private org.drip.xva.set.PositionGroupSpecification _positionGroupSpecification = null;

/**
Expand Down Expand Up @@ -114,6 +115,37 @@ public org.drip.function.definition.R1ToR1 valueGenerator()
return _r1ToR1ValueGenerator;
}

/**
* Set the Collateral Group Path
*
* @param collateralGroupPath The Collateral Group Path
*
* @return TRUE - The Collateral Group Path Successfully Set
*/

public boolean setCollateralGroupPath (
final org.drip.xva.hypothecation.CollateralGroupPath collateralGroupPath)
{
if (null == collateralGroupPath)
{
return false;
}

_collateralGroupPath = collateralGroupPath;
return true;
}

/**
* Retrieve the Collateral Group Path
*
* @return The Collateral Group Path
*/

public org.drip.xva.hypothecation.CollateralGroupPath collateralGroupPath()
{
return _collateralGroupPath;
}

/**
* Generate the Position Group Value Array at the specified Vertexes
*
Expand Down
133 changes: 115 additions & 18 deletions src/main/java/org/drip/xva/holdings/PositionGroupContainer.java
Original file line number Diff line number Diff line change
Expand Up @@ -153,31 +153,88 @@ public int count()
return _positionGroupArray.length;
}

/**
* Set the Specific Position Group's Collateral Group Path
*
* @param positionGroupIndex The Index in the Position Group
* @param collateralGroupPath Collateral Group Path
*
* @return TRUE - The Collateral Group Path successfully set
*/

public boolean setCollateralGroupPath (
final int positionGroupIndex,
final org.drip.xva.hypothecation.CollateralGroupPath collateralGroupPath)
{
return positionGroupIndex >= count() ? false :
_positionGroupArray[positionGroupIndex].setCollateralGroupPath (collateralGroupPath);
}

/**
* Retrieve the Position Groups Sorted into Netting Group Segments
*
* @return Map of the Position Groups Sorted into Netting Group Segments
*/

public java.util.Map<java.lang.String, org.drip.xva.holdings.PositionGroup> nettingSegments()
public java.util.Map<java.lang.String, org.drip.xva.holdings.PositionGroupSegment> nettingSegments()
{
org.drip.analytics.support.CaseInsensitiveHashMap<org.drip.xva.holdings.PositionGroup>
nettingSegmentPositionGroup = new
org.drip.analytics.support.CaseInsensitiveHashMap<org.drip.xva.holdings.PositionGroup>();
org.drip.analytics.support.CaseInsensitiveHashMap<org.drip.xva.holdings.PositionGroupSegment>
nettingPositionGroupSegment = new
org.drip.analytics.support.CaseInsensitiveHashMap<org.drip.xva.holdings.PositionGroupSegment>();

int positionGroupCount = _positionGroupArray.length;

for (int positionGroupIndex = 0; positionGroupIndex < positionGroupCount; ++positionGroupIndex)
{
org.drip.xva.holdings.PositionGroup positionGroup = _positionGroupArray[positionGroupIndex];

nettingSegmentPositionGroup.put (
positionGroup.positionGroupSpecification().nettingGroupSpecification().id(),
positionGroup
);
java.lang.String groupID =
positionGroup.positionGroupSpecification().nettingGroupSpecification().id();

boolean segmentPresent = nettingPositionGroupSegment.containsKey (groupID);

org.drip.xva.holdings.PositionGroupSegment positionGroupSegment = segmentPresent ?
nettingPositionGroupSegment.get (groupID) : new org.drip.xva.holdings.PositionGroupSegment();

positionGroupSegment.add (positionGroup);

if (!segmentPresent)
{
nettingPositionGroupSegment.put (
groupID,
positionGroupSegment
);
}
}

return nettingPositionGroupSegment;
}

/**
* Retrieve the Array of Position Groups Collected into Netting Group Collateral Vertex Paths
*
* @return Array of the Position Groups Collected into Netting Group Collateral Vertex Paths
*/

public org.drip.xva.hypothecation.CollateralGroupPath[][] nettingSegmentPaths()
{
java.util.Map<java.lang.String, org.drip.xva.holdings.PositionGroupSegment>
nettingPositionGroupSegment = nettingSegments();

int nettingPositionGroupSegmentCount = nettingPositionGroupSegment.size();

int nettingPositionGroupSegmentIndex = 0;
org.drip.xva.hypothecation.CollateralGroupPath[][] nettingSegmentPathArray = new
org.drip.xva.hypothecation.CollateralGroupPath[nettingPositionGroupSegmentCount][];

for (java.util.Map.Entry<java.lang.String, org.drip.xva.holdings.PositionGroupSegment>
nettingPositionGroupSegmentEntry : nettingPositionGroupSegment.entrySet())
{
nettingSegmentPathArray[nettingPositionGroupSegmentIndex++] =
nettingPositionGroupSegmentEntry.getValue().collateralGroupPathArray();
}

return nettingSegmentPositionGroup;
return nettingSegmentPathArray;
}

/**
Expand All @@ -186,24 +243,64 @@ public java.util.Map<java.lang.String, org.drip.xva.holdings.PositionGroup> nett
* @return Map of the Position Groups Sorted into Funding Group Segments
*/

public java.util.Map<java.lang.String, org.drip.xva.holdings.PositionGroup> fundingSegments()
public java.util.Map<java.lang.String, org.drip.xva.holdings.PositionGroupSegment> fundingSegments()
{
org.drip.analytics.support.CaseInsensitiveHashMap<org.drip.xva.holdings.PositionGroup>
fundingSegmentPositionGroup = new
org.drip.analytics.support.CaseInsensitiveHashMap<org.drip.xva.holdings.PositionGroup>();
org.drip.analytics.support.CaseInsensitiveHashMap<org.drip.xva.holdings.PositionGroupSegment>
fundingPositionGroupSegment = new
org.drip.analytics.support.CaseInsensitiveHashMap<org.drip.xva.holdings.PositionGroupSegment>();

int positionGroupCount = _positionGroupArray.length;

for (int positionGroupIndex = 0; positionGroupIndex < positionGroupCount; ++positionGroupIndex)
{
org.drip.xva.holdings.PositionGroup positionGroup = _positionGroupArray[positionGroupIndex];

fundingSegmentPositionGroup.put (
positionGroup.positionGroupSpecification().fundingGroupSpecification().id(),
positionGroup
);
java.lang.String groupID =
positionGroup.positionGroupSpecification().fundingGroupSpecification().id();

boolean segmentPresent = fundingPositionGroupSegment.containsKey (groupID);

org.drip.xva.holdings.PositionGroupSegment positionGroupSegment = segmentPresent ?
fundingPositionGroupSegment.get (groupID) : new org.drip.xva.holdings.PositionGroupSegment();

positionGroupSegment.add (positionGroup);

if (!segmentPresent)
{
fundingPositionGroupSegment.put (
groupID,
positionGroupSegment
);
}
}

return fundingPositionGroupSegment;
}

/**
* Retrieve the Array of Position Groups Collected into Funding Group Collateral Vertex Paths
*
* @return Array of the Position Groups Collected into Funding Group Collateral Vertex Paths
*/

public org.drip.xva.hypothecation.CollateralGroupPath[][] fundingSegmentPaths()
{
java.util.Map<java.lang.String, org.drip.xva.holdings.PositionGroupSegment>
fundingPositionGroupSegment = nettingSegments();

int fundingPositionGroupSegmentCount = fundingPositionGroupSegment.size();

int fundingPositionGroupSegmentIndex = 0;
org.drip.xva.hypothecation.CollateralGroupPath[][] fundingSegmentPathArray = new
org.drip.xva.hypothecation.CollateralGroupPath[fundingPositionGroupSegmentCount][];

for (java.util.Map.Entry<java.lang.String, org.drip.xva.holdings.PositionGroupSegment>
fundingPositionGroupSegmentEntry : fundingPositionGroupSegment.entrySet())
{
fundingSegmentPathArray[fundingPositionGroupSegmentIndex++] =
fundingPositionGroupSegmentEntry.getValue().collateralGroupPathArray();
}

return fundingSegmentPositionGroup;
return fundingSegmentPathArray;
}
}
Loading

0 comments on commit 3da6707

Please sign in to comment.