private void CreateOrUpdateUnlOption(TransactionData transactionData) { try { UnlOptions unlOptions; //If the list was not load yet, load it. if (UnlOptionsList == null) { LoadUnlOptionsList(); } if (transactionData.Order.OrderAction == OrderAction.BUY) { if (UnlOptionsList.Any(uo => uo.Id == 0)) { //Reload the list to refresh the IDs: LoadUnlOptionsList(); } //Update an exsisting one with the max IV (Maximum profit) and remove it from the list unlOptions = UnlOptionsList.Where(uo => uo.OptionKey.Equals(transactionData.OptionKey)) .OrderByDescending(uo => uo.OptionData.ImpliedVolatility).First(); if (unlOptions != null) { unlOptions.CloseTransaction = transactionData; unlOptions.LastUpdate = DateTime.Now; UnlOptionsList.Remove(unlOptions); } } else { //Create new one unlOptions = new UnlOptions { OpenTransaction = transactionData, Symbol = Symbol, OptionKey = transactionData.OptionKey, Account = AccountSummaryData.MainAccount, }; UnlOptionsList.Add(unlOptions); } //Save UNLManager.Distributer.Enqueue(unlOptions); } catch (Exception ex) { Logger.Error(ex.Message, ex); } }
protected void HandleUnlOptions(UnlOptions unlOptions) { try { SaveContractDetailsIfNeeded <OptionContract>(unlOptions.CloseTransaction == null ? unlOptions.OpenTransaction.OptionData.OptionContract : unlOptions.CloseTransaction.OptionData.OptionContract); } catch (Exception ex) { Logger.Error("Could not save OptionContract", ex); //transaction.Rollback(); } using (ITransaction transaction = _session.BeginTransaction()) { int uniOpID = 0; string action = string.Empty; try { if (_session.Get <UnlOptions>(unlOptions.Id) == null) { action = "!@#$%^&* - Try save new UnlOptions (Id=0) ==>'{data.OptionKey}'."; uniOpID = (int)_session.Save(unlOptions); } else { action = "!@#$%^&* - Merge UnlOptions (Id={tdId}) ==>'{data.OptionKey}'."; _session.Merge(unlOptions); } } catch (Exception ex) { Logger.Error($"!@#$%^&* - Could not {action} {unlOptions.OptionKey}", ex); //transaction.Rollback(); return; } try { transaction.Commit(); } catch (Exception exception) { Logger.Error($"!@#$%^&* - Could not write (commit) id:{unlOptions.Id} {unlOptions.OptionKey} to DB", exception); } } }