for t in session.query(OptionTrade).filter( OptionTrade.status_id==TradeStatus.CLOSED).filter( OptionTrade.num_closes>1): logger.debug("*** Adjusting exit price, %d closes for OPTION trade: %s %s", t.num_closes, t.symbol, t.description) q = session.query(OptionActivity).filter( OptionActivity.action_id==ActionType.SELL_TO_CLOSE).filter( OptionActivity.trade_id==t.id) l = q.all() if len(l) == 0: logger.error("*** No closing trades found!!! ******") continue if len(l) != t.num_closes: logger.error("*** Number of closing trades does not match " "num_closes value!!! ******") t.exit_price = decimal.Decimal(0) for a in l: t.exit_price += a.price t.exit_price /= t.num_closes session.commit() if __name__ == "__main__": loglevel = logging.DEBUG init_logging(loglevel) logger.info("ETO PROCESSING: " + str(datetime.datetime.now())) db_refresh_trades() gen_trades() logger.info("END (ETO PROCESSING) " + str(datetime.datetime.now()))
# - doesn't handle equities, or exercised options! # - correctly handles multiple closes for a trade (i.e. taking partial # profit/loss), but not multiple entries. # import sys import logging import datetime import csv import sqlalchemy from eto.util import init_logging from eto.models import OptionActivity, ModelsError, db_get_session init_logging(logging.DEBUG) logger = logging.getLogger(__file__) logger.info("IMPORTING ETO DATA: " + str(datetime.datetime.now())) if (len(sys.argv) > 1): input_filename = sys.argv[1] logger.info("Using input file: " + input_filename) else: sys.exit("Usage: import_activity.py <inputfile>") session = db_get_session() with open(input_filename, 'rb') as csvfile: reader = csv.reader(csvfile)