diff --git a/trades_table.py b/trades_table.py new file mode 100644 index 0000000..31af586 --- /dev/null +++ b/trades_table.py @@ -0,0 +1,58 @@ +from datetime import datetime +from pandas import DataFrame + +from backtesting.credit_targeting import iron_condor_strategy +from database.trades import get_leg, get_spread, upsert +from database.trades.action import Action +from database.trades.option_type import OptionType +from ibkr import option_type as IBKROptionType +from ibkr.option_order import OptionOrder + +def translate_action(action_string: str) -> Action: + for action in Action: + if action_string == action.value: + return action + +def translate_option_type(option_type_string: str) -> OptionType: + if option_type_string == IBKROptionType.CALL: + return OptionType.CALL + else: + return OptionType.PUT + +def spread(spread_order: OptionOrder) -> dict: + near_leg = spread_order.legs[0] + far_leg = spread_order.legs[1] + return get_spread( + near_leg = get_leg( + action = translate_action(near_leg.action), + strike = near_leg.strike, + option_type = translate_option_type(near_leg.option_type) + ), + far_leg = get_leg( + action = translate_action(far_leg.action), + strike = far_leg.strike, + option_type = translate_option_type(far_leg.option_type) + ), + open_price = spread_order.fill_price, + entry_slippage = round(spread_order.mid_price - spread_order.fill_price, 3) + ) + +def insert_trade( + symbol: str, + target: float, + entry_time: datetime, + call_spread_order: OptionOrder, + put_spread_order: OptionOrder + ): + + upsert( + DataFrame([{ + 'Date': datetime.now().date(), + 'Symbol': symbol, + 'Strategy': iron_condor_strategy(target), + 'Entry Time': entry_time.replace(tzinfo = None), + 'Exit Time': None, # Required. + 'Spreads': [spread(call_spread_order), spread(put_spread_order)], + 'Profit': None # Required. + }]) + ) \ No newline at end of file