public List <PriceHistory> GetPriceHistory(string reference, DateTime startDate, DateTime endDate)
        {
            //Find the instrumentId
            int instrumentId = 0;

            _context.Send(state => {
                instrumentId = CSMInstrument.GetCode(reference);
            }, null);

            return(GetPriceHistory(instrumentId, startDate, endDate));
        }
        public List <PriceHistory> GetPriceHistory(int instrumentId, DateTime startDate, DateTime endDate)
        {
            var       results = new List <PriceHistory>();
            Exception ex      = null;

            _context.Send(state => {
                using (var instrument = CSMInstrument.GetInstance(instrumentId))
                {
                    if (instrument is null)
                    {
                        ex = new InstrumentNotFoundException();
                        return;
                    }

                    int refCount = 0;
                    var history  = instrument.NEW_HistoryList(DataTypeExtensions.ConvertDateTime(startDate), DataTypeExtensions.ConvertDateTime(endDate), ref refCount, null);

                    for (var i = 0; i < refCount; i++)
                    {
                        using (SSMHistory price = history.GetNthElement(i))
                        {
                            if (price.day != DataTypeExtensions.SophisNull)
                            {
                                var ph = new PriceHistory()
                                {
                                    Ask         = (double?)DataTypeExtensions.ConvertDouble(price.ask, eMNullValueType.M_nvUndefined),
                                    Bid         = (double?)DataTypeExtensions.ConvertDouble(price.bid, eMNullValueType.M_nvUndefined),
                                    First       = (double?)DataTypeExtensions.ConvertDouble(price.first, eMNullValueType.M_nvUndefined),
                                    High        = (double?)DataTypeExtensions.ConvertDouble(price.high, eMNullValueType.M_nvUndefined),
                                    Low         = (double?)DataTypeExtensions.ConvertDouble(price.low, eMNullValueType.M_nvUndefined),
                                    Last        = (double?)DataTypeExtensions.ConvertDouble(price.last, eMNullValueType.M_nvUndefined),
                                    Theoretical = (double?)DataTypeExtensions.ConvertDouble(price.theorical, eMNullValueType.M_nvUndefined),
                                    Volume      = (double?)DataTypeExtensions.ConvertDouble(price.volume, eMNullValueType.M_nvUndefined),
                                    Date        = (DateTime)price.day.GetDateTime()
                                };

                                results.Add(ph);
                            }
                        }
                    }
                }
            }, null);

            if (ex is null)
            {
                return(results);
            }
            else
            {
                throw ex;
            }
        }
Exemplo n.º 3
0
        public override void GetCell(CSMAccPostingData data, ref SSMCellValue value, SSMCellStyle style)
        {
            using (var log = LogHelper.GetLogger(GetType().Name, MethodBase.GetCurrentMethod().Name))
            {
                style.kind = eMDataType.M_dNullTerminatedString;

                var accountData = data.GetAccPosting();
                var tradeId     = accountData.fTradeID;
                var accountId   = 0;



                SSMFinalPosting _fPosting = data.GetAccPosting();
                if (_fPosting != null)
                {
                    accountId = _fPosting.fAccountNameID;
                    if (_fPosting.fPostingType == 11)
                    {
                        CSMPosition pos = CSMPosition.GetCSRPosition(_fPosting.fPositionID);
                        if (pos != null)
                        {
                            CSMPortfolio port = pos.GetPortfolio();
                            if (port != null)
                            {
                                CSMAmFund fund = CSMAmFund.GetFundFromFolio(port);
                                if (fund != null)
                                {
                                    string accountBookName = GetAccountBookNameForFund(fund);
                                    value.SetString(accountBookName);
                                    return;
                                }
                            }
                        }
                        return;
                    }
                }

                if (tradeId == 0 || accountId == 0)
                {
                    return;
                }

                CSMTransaction trade = CSMTransaction.newCSRTransaction(tradeId);
                if (trade == null)
                {
                    return;
                }

                //Business Event
                int type = (int)trade.GetTransactionType();

                //Any Posting linked to the IDB Group should have account book 1000
                if (_fPosting.fAccountNameID == 33528)
                {
                    value.SetString(GetNostroIDBAccountBook(_fPosting.fID));
                    return;
                }
                int PostingId = _fPosting.fID;
                int NostroId  = _fPosting.fNostroAccountID;
                if (NostroId > 0)
                {
                    int EntityId = 0;
                    if (fDataLoaded == false)
                    {
                        LoadAccountEntities();
                    }
                    fNostroAndEntity.TryGetValue(NostroId, out EntityId);
                    if (IsIDBGroupEntity(EntityId))
                    {
                        value.SetString("1000");
                        return;
                    }
                }

                var cacheKey = string.Format("AccountBook_{0}", accountData.fID);
                var strValue = CacheManager.GetItem <string>(cacheKey);

                try
                {
                    if (!string.IsNullOrEmpty(strValue))
                    {
                        value.SetString(strValue);
                        return;
                    }

                    //if value is not cached already we loaded it
                    strValue = CSxDataFacade.GetAccountBookName(accountData.fAccountingBookID);



                    //Filter on the account defined in the config file
                    if (CSxIslamicInstrumentsHelperCLI.IsForbiddenAccountId(accountId))
                    {
                        var parentId = 0;
                        try
                        {
                            //parentId = CSxIslamicInstrumentsHelperCLI.GetParentTrade(tradeId);

                            //couponS and redemption sukuk are not taken in account in this function
                            parentId = CSxIdbTradeId.GetParentIDBMergingAllocatedTrade(type, tradeId);
                        }
                        catch (Exception)
                        {
                            log.WriteSystemError("Failed to check if tarde is merged");
                        }
                        // AccountExceptions.Contains(accountData.fAccountingBookID)
                        //FILTER on merged trades
                        if (parentId != 0)
                        {
                            try
                            {
                                var t = CSMTransaction.newCSRTransaction(tradeId);
                                if (t == null)
                                {
                                    throw new Exception("Failed to open trade");
                                }

                                var fid = 0;
                                //if(CSxIslamicInstrumentsHelperCLI.IsInterFundCashTransferBusinessEvent(type))
                                //{
                                //    var tr = CSMTransaction.newCSRTransaction(parentId);
                                //    if (tr == null)
                                //        throw new Exception("Failed to open trade");

                                //    fid = CSxIslamicInstrumentsHelperCLI.GetFundForEntity(tr.GetEntity());
                                //}
                                //else
                                //{
                                fid = CSxIslamicInstrumentsHelperCLI.GetFundForEntity(t.GetEntity());
                                //}


                                CSMAmFund f = CSMInstrument.GetInstance(fid);
                                if (f == null)
                                {
                                    throw new Exception("Failed to find fund for settlement entity");
                                }
                                strValue = CSxDataFacade.GetAccountBookIdForFolio(f.GetTradingPortfolio());
                            }
                            catch (Exception e)
                            {
                                log.WriteSystemError("Failed to get Account Book Id from Settlement Entity for merged trade {0} : {1}", tradeId, e.Message);
                            }
                        }
                        //if (strValue != null)
                        //{
                        //    //strValue = strValue.Substring(0, Math.Min(4, strValue.Length));
                        //    //we cache the value for next time
                        //    CacheManager.SetItem(cacheKey, strValue);

                        //}
                    }

                    if (strValue != null)
                    {
                        strValue = strValue.Substring(0, Math.Min(4, strValue.Length));
                        value.SetString(strValue);
                    }
                }
                catch (Exception e)
                {
                    log.WriteSystemError("Failed to get Account Book Name for trade {0} : {1}", tradeId, e.Message);

                    if (IDB.IslamicInstruments.CSxIslamicInstrumentsHelperCLI.IsInGUIMode())
                    {
                        MessageBox.Show("Failed to get Account Book Name for trade " + tradeId + " Error:" + e.Message);
                    }
                }
            }
        }