Fix bug/syntax in python examples (#8658)
* CustomDataRegressionAlgorithm * DescendingCustomDataObjectStoreRegressionAlgorithm * CustomDataPropertiesRegressionAlgorithm * DateTime -> should be datetime * KerasNeuralNetworkAlgorithm * OptionIndicatorsMirrorContractsRegressionAlgorithm * BybitCustomDataCryptoRegressionAlgorithm * DropboxBaseDataUniverseSelectionAlgorithm * UserDefinedUniverseAlgorithm * CompleteOrderTagUpdateAlgorithm * BasicTemplateOptionEquityStrategyAlgorithm hint * ETFConstituentUniverseFrameworkRegressionAlgorithm * FutureStopMarketOrderOnExtendedHoursRegressionAlgorithm * SecurityDynamicPropertyPythonClassAlgorithm * hint * hinting * CallbackCommandRegressionAlgorithm * CustomWarmUpPeriodIndicatorAlgorithm * CrunchDAOSignalExportDemonstrationAlgorithm * ExpiryHelperAlphaModelFrameworkAlgorithm * ClassicRenkoConsolidatorAlgorithm * SmaCrossUniverseSelectionAlgorithm * PEP8 Fix: Assigning to a Method * SliceGetByTypeRegressionAlgorithm * MarketOnCloseOrderBufferExtendedMarketHoursRegressionAlgorithm * MarketOnCloseOrderBufferRegressionAlgorithm * CustomIndicatorAlgorithm * ScheduledQueuingAlgorithm * ComboOrdersFillModelAlgorithm * CustomIndicatorWithExtensionAlgorithm * IndicatorWithRenkoBarsRegressionAlgorithm * CoarseFineOptionUniverseChainRegressionAlgorithm * NumeraiSignalExportDemonstrationAlgorithm * DropboxUniverseSelectionAlgorithm * WeeklyUniverseSelectionRegressionAlgorithm * AutoRegressiveIntegratedMovingAverageRegressionAlgorithm * DropboxBaseDataUniverseSelectionAlgorithm * IronCondorStrategyAlgorithm * LongAndShortButterflyPutStrategiesAlgorithm * FutureStopMarketOrderOnExtendedHoursRegressionAlgorithm * LongAndShortCallCalendarSpreadStrategiesAlgorithm * KerasNeuralNetworkAlgorithm * LongAndShortPutCalendarSpreadStrategiesAlgorithm * OptionPriceModelForOptionStylesBaseRegressionAlgorithm * TensorFlowNeuralNetworkAlgorithm * MarketOnCloseOrderBufferRegressionAlgorithm * MarketOnCloseOrderBufferExtendedMarketHoursRegressionAlgorithm * typing * ComboOrderTicketDemoAlgorithm * PytorchNeuralNetworkAlgorithm * MultipleSymbolConsolidationAlgorithm * fixes * revert getattr mypy syntax * address peer review * Addresses Peer-Review --------- Co-authored-by: Alexandre Catarino <AlexCatarino@users.noreply.github.com>
This commit is contained in:
@@ -26,18 +26,21 @@ class IronCondorStrategyAlgorithm(OptionStrategyFactoryMethodsBaseAlgorithm):
|
||||
def expected_orders_count(self) -> int:
|
||||
return 8
|
||||
|
||||
def trade_strategy(self, chain: OptionChain, option_symbol: Symbol):
|
||||
def trade_strategy(self, chain: OptionChain, option_symbol: Symbol) -> None:
|
||||
for expiry, group in itertools.groupby(chain, lambda x: x.expiry):
|
||||
contracts = sorted(group, key=lambda x: x.strike)
|
||||
if len(contracts) < 4:continue
|
||||
if len(contracts) < 4:
|
||||
continue
|
||||
|
||||
put_contracts = [x for x in contracts if x.right == OptionRight.PUT]
|
||||
if len(put_contracts) < 2: continue
|
||||
if len(put_contracts) < 2:
|
||||
continue
|
||||
long_put_strike = put_contracts[0].strike
|
||||
short_put_strike = put_contracts[1].strike
|
||||
|
||||
call_contracts = [x for x in contracts if x.right == OptionRight.CALL and x.strike > short_put_strike]
|
||||
if len(call_contracts) < 2: continue
|
||||
if len(call_contracts) < 2:
|
||||
continue
|
||||
short_call_strike = call_contracts[0].strike
|
||||
long_call_strike = call_contracts[1].strike
|
||||
|
||||
@@ -45,7 +48,7 @@ class IronCondorStrategyAlgorithm(OptionStrategyFactoryMethodsBaseAlgorithm):
|
||||
self.buy(self._iron_condor, 2)
|
||||
return
|
||||
|
||||
def assert_strategy_position_group(self, position_group: IPositionGroup, option_symbol: Symbol):
|
||||
def assert_strategy_position_group(self, position_group: IPositionGroup, option_symbol: Symbol) -> None:
|
||||
positions = list(position_group.positions)
|
||||
if len(positions) != 4:
|
||||
raise AssertionError(f"Expected position group to have 4 positions. Actual: {len(positions)}")
|
||||
@@ -56,30 +59,30 @@ class IronCondorStrategyAlgorithm(OptionStrategyFactoryMethodsBaseAlgorithm):
|
||||
long_put_position = next((x for x in position_group.positions
|
||||
if x.symbol.id.option_right == OptionRight.PUT and x.symbol.id.strike_price == long_put_strike),
|
||||
None)
|
||||
if long_put_position is None or long_put_position.quantity != 2:
|
||||
if not long_put_position or long_put_position.quantity != 2:
|
||||
raise AssertionError(f"Expected long put position quantity to be 2. Actual: {long_put_position.quantity}")
|
||||
|
||||
short_put_strike = ordered_strikes[1]
|
||||
short_put_position = next((x for x in position_group.positions
|
||||
if x.symbol.id.option_right == OptionRight.PUT and x.symbol.id.strike_price == short_put_strike),
|
||||
None)
|
||||
if short_put_position is None or short_put_position.quantity != -2:
|
||||
if not short_put_position or short_put_position.quantity != -2:
|
||||
raise AssertionError(f"Expected short put position quantity to be -2. Actual: {short_put_position.quantity}")
|
||||
|
||||
short_call_strike = ordered_strikes[2]
|
||||
short_call_position = next((x for x in position_group.positions
|
||||
if x.symbol.id.option_right == OptionRight.CALL and x.symbol.id.strike_price == short_call_strike),
|
||||
None)
|
||||
if short_call_position is None or short_call_position.quantity != -2:
|
||||
if not short_call_position or short_call_position.quantity != -2:
|
||||
raise AssertionError(f"Expected short call position quantity to be -2. Actual: {short_call_position.quantity}")
|
||||
|
||||
long_call_strike = ordered_strikes[3]
|
||||
long_call_position = next((x for x in position_group.positions
|
||||
if x.symbol.id.option_right == OptionRight.CALL and x.symbol.id.strike_price == long_call_strike),
|
||||
None)
|
||||
if long_call_position is None or long_call_position.quantity != 2:
|
||||
if not long_call_position or long_call_position.quantity != 2:
|
||||
raise AssertionError(f"Expected long call position quantity to be 2. Actual: {long_call_position.quantity}")
|
||||
|
||||
def liquidate_strategy(self):
|
||||
def liquidate_strategy(self) -> None:
|
||||
# We should be able to close the position by selling the strategy
|
||||
self.sell(self._iron_condor, 2)
|
||||
|
||||
Reference in New Issue
Block a user