Identify which strikes to use for entering an iron condor based on a target delta

This commit is contained in:
moshferatu 2023-09-18 09:15:51 -07:00
parent 13b7919377
commit 8bc4b296a8

View File

@ -1,6 +1,7 @@
from datetime import datetime
from dotenv import load_dotenv
from ibkr import Client
from ibkr.option_type import CALL, PUT
from os import getenv
from tastytrade import Tastytrade
@ -29,3 +30,32 @@ def contract_filter(contract):
# The weekly symbol for SPX (SPXW) is required in order to distinguish from monthly options.
option_chain = ibkr_client.get_option_chain('SPX', datetime.now(), sub_symbol = 'SPXW', contract_filter = contract_filter)
print(option_chain)
target_delta = 0.10
def closest_strike_by_delta(target_delta, option_chain, option_type):
options = option_chain[option_chain['Type'] == option_type].copy()
options['Delta Distance'] = abs(options['Delta'] - (target_delta * (1 if option_type == CALL else -1)))
return options.loc[options['Delta Distance'].idxmin()]
# Find the strikes that minimize the distance to the target delta.
closest_call_strike = closest_strike_by_delta(target_delta, option_chain, CALL)
closest_put_strike = closest_strike_by_delta(target_delta, option_chain, PUT)
# Do the same for the long strikes.
target_long_call_strike = closest_call_strike['Strike'] + 50
target_long_put_strike = closest_put_strike['Strike'] - 50
def closest_strike_by_strike(target_strike, option_chain, option_type):
options = option_chain[option_chain['Type'] == option_type].copy()
options['Strike Distance'] = abs(options['Strike'] - target_strike)
return options.loc[options['Strike Distance'].idxmin()]
closest_long_call_strike = closest_strike_by_strike(target_long_call_strike, option_chain, CALL)
closest_long_put_strike = closest_strike_by_strike(target_long_put_strike, option_chain, PUT)
# The requested iron condor.
print('Short Call Strike:', closest_call_strike['Strike'])
print('Long Call Strike:', closest_long_call_strike['Strike'])
print("Short Put Strike:", closest_put_strike['Strike'])
print('Long Put Strike:', closest_long_put_strike['Strike'])