Skip to content

Commit 00d8959

Browse files
committed
TEST
1 parent eb8043e commit 00d8959

1 file changed

Lines changed: 20 additions & 11 deletions

File tree

Common/Securities/Option/DefaultOptionAssignmentModel.cs

Lines changed: 20 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -54,21 +54,30 @@ public virtual OptionAssignmentResult GetAssignment(OptionAssignmentParameters p
5454
var option = parameters.Option;
5555
var underlying = parameters.Option.Underlying;
5656

57-
// we take only options that expire soon
58-
if ((option.Symbol.ID.OptionStyle == OptionStyle.American && option.Symbol.ID.Date - option.LocalTime <= _priorExpiration ||
59-
option.Symbol.ID.OptionStyle == OptionStyle.European && option.Symbol.ID.Date.Date == option.LocalTime.Date)
60-
// we take only deep ITM strikes
61-
&& IsDeepInTheMoney(option))
57+
try
6258
{
63-
// we estimate P/L
64-
var potentialPnL = EstimateArbitragePnL(option, (OptionHolding)option.Holdings, underlying);
65-
if (potentialPnL > 0)
59+
// we take only options that expire soon
60+
if ((option.Symbol.ID.OptionStyle == OptionStyle.American && option.Symbol.ID.Date - option.LocalTime <= _priorExpiration ||
61+
option.Symbol.ID.OptionStyle == OptionStyle.European && option.Symbol.ID.Date.Date == option.LocalTime.Date)
62+
// we take only deep ITM strikes
63+
&& IsDeepInTheMoney(option))
6664
{
67-
return new OptionAssignmentResult(option.Holdings.AbsoluteQuantity, "Simulated option assignment before expiration");
65+
// we estimate P/L
66+
var potentialPnL = EstimateArbitragePnL(option, (OptionHolding)option.Holdings, underlying);
67+
if (potentialPnL > 0)
68+
{
69+
return new OptionAssignmentResult(option.Holdings.AbsoluteQuantity, "Simulated option assignment before expiration");
70+
}
6871
}
69-
}
7072

71-
return OptionAssignmentResult.Null;
73+
return OptionAssignmentResult.Null;
74+
}
75+
catch (DivideByZeroException e)
76+
{
77+
throw new DivideByZeroException(
78+
$"The option {option.Symbol} | {option.Underlying.Symbol.ID} | {option.Underlying.Symbol.Value} has a zero underlying price. This is not a valid state for an option. " +
79+
$"Please check the underlying security data. Exception: {e.Message}", e);
80+
}
7281
}
7382

7483
private bool IsDeepInTheMoney(Option option)

0 commit comments

Comments
 (0)