Consolidate inputs required to monitor the spread into an option order
This commit is contained in:
parent
a9023f8594
commit
2ca34e4004
@ -7,7 +7,7 @@ from datetime import datetime
|
|||||||
from dotenv import load_dotenv
|
from dotenv import load_dotenv
|
||||||
from os import getenv
|
from os import getenv
|
||||||
|
|
||||||
from ibkr import Client, OptionLeg
|
from ibkr import Client, OptionLeg, OptionOrder
|
||||||
from ibkr.option_type import CALL, PUT
|
from ibkr.option_type import CALL, PUT
|
||||||
from ibkr.order_action import BUY, SELL
|
from ibkr.order_action import BUY, SELL
|
||||||
|
|
||||||
@ -22,13 +22,17 @@ load_dotenv()
|
|||||||
# Necessary for monitoring spread prices asynchronously while interacting with the IBKR client.
|
# Necessary for monitoring spread prices asynchronously while interacting with the IBKR client.
|
||||||
nest_asyncio.apply()
|
nest_asyncio.apply()
|
||||||
|
|
||||||
def monitor_spread_price(trade: IronCondorTrade, short_leg: OptionLeg, long_leg: OptionLeg, stop_price: float, client: Client):
|
def monitor_spread_price(trade: IronCondorTrade, spread_order: OptionOrder, client: Client):
|
||||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
Stop loss orders will not execute if trying to sell back a contract with no bid while paper trading.
|
Stop loss orders will not execute if trying to sell back a contract with no bid while paper trading.
|
||||||
Therefore, the spread price must be monitored and the spread manually exited if the stop price is reached.
|
Therefore, the spread price must be monitored and the spread manually exited if the stop price is reached.
|
||||||
If there is no bid for the long leg, only the short leg will be exited.
|
If there is no bid for the long leg, only the short leg will be exited.
|
||||||
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
|
||||||
|
stop_price = spread_order.fill_price * trade.stop_multiple
|
||||||
stopped_out = False
|
stopped_out = False
|
||||||
|
|
||||||
|
short_leg = spread_order.legs[0]
|
||||||
|
long_leg = spread_order.legs[1]
|
||||||
market_data = {} # Stores real-time market data for each leg.
|
market_data = {} # Stores real-time market data for each leg.
|
||||||
|
|
||||||
def on_market_data_update(update_event):
|
def on_market_data_update(update_event):
|
||||||
@ -137,13 +141,7 @@ def _enter_iron_condor(entry_time: datetime):
|
|||||||
logging.info(f'Call Spread Slippage: {call_spread_order.mid_price - call_spread_order.fill_price}')
|
logging.info(f'Call Spread Slippage: {call_spread_order.mid_price - call_spread_order.fill_price}')
|
||||||
logging.info(f'Options Chain Call Spread Slippage: {call_spread_price - call_spread_order.fill_price}')
|
logging.info(f'Options Chain Call Spread Slippage: {call_spread_price - call_spread_order.fill_price}')
|
||||||
|
|
||||||
monitor_spread_price(
|
monitor_spread_price(trade, call_spread_order, ibkr_client)
|
||||||
trade = trade,
|
|
||||||
short_leg = short_call_leg,
|
|
||||||
long_leg = long_call_leg,
|
|
||||||
stop_price = call_spread_order.fill_price * 2,
|
|
||||||
client = ibkr_client
|
|
||||||
)
|
|
||||||
|
|
||||||
short_put_leg = OptionLeg(symbol, expiration, short_put_strike, PUT, SELL, sub_symbol)
|
short_put_leg = OptionLeg(symbol, expiration, short_put_strike, PUT, SELL, sub_symbol)
|
||||||
long_put_leg = OptionLeg(symbol, expiration, long_put_strike, PUT, BUY, sub_symbol)
|
long_put_leg = OptionLeg(symbol, expiration, long_put_strike, PUT, BUY, sub_symbol)
|
||||||
@ -154,13 +152,7 @@ def _enter_iron_condor(entry_time: datetime):
|
|||||||
logging.info(f'Put Spread Slippage: {put_spread_order.mid_price - put_spread_order.fill_price}')
|
logging.info(f'Put Spread Slippage: {put_spread_order.mid_price - put_spread_order.fill_price}')
|
||||||
logging.info(f'Options Chain Put Spread Slippage: {put_spread_price - put_spread_order.fill_price}')
|
logging.info(f'Options Chain Put Spread Slippage: {put_spread_price - put_spread_order.fill_price}')
|
||||||
|
|
||||||
monitor_spread_price(
|
monitor_spread_price(trade, put_spread_order, ibkr_client)
|
||||||
trade = trade,
|
|
||||||
short_leg = short_put_leg,
|
|
||||||
long_leg = long_put_leg,
|
|
||||||
stop_price = put_spread_order.fill_price * 2,
|
|
||||||
client = ibkr_client
|
|
||||||
)
|
|
||||||
|
|
||||||
insert_trade(trade, call_spread_order, put_spread_order)
|
insert_trade(trade, call_spread_order, put_spread_order)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user