예제 #1
0
        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);
            }
        }
예제 #2
0
 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);
         }
     }
 }