protected override ValidatedInstrument[] getValidatedInstruments(SymmetryEntities dc_, ExtractionServiceClient dsClient_, CredentialsHeader credentials_)
		{
			var allEDs = dc_.FIs.Where(x =>
				x.InstrumentType == InstrumentType.IRFuture
				&& x.Maturity >= DateTime.Today
				&& x.SymmetryCode.StartsWith("ED"))
				.Where(x => x.Maturity.Value.Month % 3 == 0)
				.OrderBy(x => x.Maturity)
				.Take(12);

			var listOfInstruments = new List<InstrumentIdentifier>();

			// find the market snap to which 
			var marketSnap = QuoteHelpers.GetMarketSnap("CLOSE", m_markDate, dc_, ThrowBehavior.DontThrow);
			if (marketSnap == null) return null;

			var source = QuoteHelpers.GetQuoteSource("SYM", dc_, ThrowBehavior.DontThrow);
			if (source == null) return null;

			foreach (var ed in allEDs)
			{
				EDItem item = new EDItem(ed, dc_, marketSnap, source);

				if (item.CanRequestPrice)
				{
					m_items.Add(item);
					m_ricToOptionItem[item.OptionAbovePrice.ReutersTicker] = item.OptionAbovePrice;
					m_ricToOptionItem[item.OptionBelowPrice.ReutersTicker] = item.OptionBelowPrice;

					listOfInstruments.Add(new InstrumentIdentifier()
					{
						IdentifierValue = item.OptionBelowPrice.ReutersTicker,
						IdentifierType="RIC"
					});

					listOfInstruments.Add(new InstrumentIdentifier()
					{
						IdentifierValue = item.OptionAbovePrice.ReutersTicker,
						IdentifierType="RIC"
					});
				}
			}

			if (listOfInstruments.Count() > 0)
			{
				var v = ServiceHelpers.ValidateInstruments_FindUnValidated(listOfInstruments.ToArray(), dsClient_, ref credentials_);
				m_notValidatedIdentifiers = v.Item2;
				return v.Item1;
			}
			else
				return null;
		}
    protected override ValidatedInstrument[] getValidatedInstruments(SymmetryEntities dc_, ExtractionServiceClient dsClient_, CredentialsHeader credentials_)
    {
      var allFixings = getAllSwaps(dc_);

      m_ric_to_FIs = new Dictionary<string, FI>();

      var listOfInstruments = new List<InstrumentIdentifier>();


      foreach (var fi in allFixings)
      {
        string[] rics = FIHelpers.GetFIIdentifiers(fi.SymmetryCode, IdentifierType.RIC, dc_, ThrowBehavior.DontThrow);

        if (rics == null || rics.Length==0)
        {
          SLog.log.WarnFormat("Cannot locate RIC for SymmetryCode:{0}", fi.SymmetryCode);
          continue;
        }
        Array.ForEach(rics, x =>  {
            m_ric_to_FIs.Add(x, fi);
            listOfInstruments.Add(new InstrumentIdentifier()
            {
              IdentifierType="RIC",
              IdentifierValue=x
            });
          }
          );
      }

      var t = ServiceHelpers.ValidateInstruments_FindUnValidated(listOfInstruments.ToArray(), dsClient_, ref credentials_);

      m_notValidatedIdentifiers = t.Item2;

      return t.Item1;

    }
    public static void Go()
    {
      var dict_fiidToAuctionID = new Dictionary<int, int>();
      {
        string sql = "select * from FIBondAuction";

        DataSet ds = Singleton<ConnMngr>.Instance.Execute(DBNames.SQLSERVER_SYMMETRYTS, sql);

        foreach (DataRow row in ds.Tables[0].Rows)
          if(!dict_fiidToAuctionID.ContainsKey(Convert.ToInt32(row["FIID"])))
            dict_fiidToAuctionID.Add(Convert.ToInt32(row["FIID"]), Convert.ToInt32(row["FIBondAuctionID"]));
      }

      var dict_isinToMissingBond = new Dictionary<string, Bond>();
      var rss_identifiers = new List<InstrumentIdentifier>();

      foreach (var bond in Singleton<Bonds>.Instance.Where(x => x.SymmetryCode.StartsWith("US912828")))
      {
        if (!dict_fiidToAuctionID.ContainsKey(bond.FIID))
        {
          dict_isinToMissingBond.Add(bond.SymmetryCode, bond);
          rss_identifiers.Add(new InstrumentIdentifier { IdentifierType = "ISN", IdentifierValue = bond.SymmetryCode, Source="TWB"});
          Logger.Debug(string.Format("{0}/{1} is missing auction information", bond.SymmetryCode, bond.DisplayName), typeof(UpdateBondAuctionData));
        }
      }


      System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3;

      if (rss_identifiers.Count() == 0)
        return; // nothing to do

      try
      {
        var cred = ServiceHelpers.GetCredentials();

        {
          using (var dsClient = new ExtractionServiceClient())
          {
            var validatedInstruments = ServiceHelpers.ValidateInstruments(rss_identifiers.ToArray(), dsClient, ref cred);

            {
              var request = new ExtractRequest
              {
                CredentialsHeader = cred,
                request = new InstrumentExtractionRequestTermsAndConditions
                {
                  Instruments = validatedInstruments,
                  OutputFields = Enum.GetNames(typeof(FieldsToReturn))
                    .Select(x => typeof(FieldsToReturn).GetField(x.ToString()))
                    .Select(x => x.GetCustomAttribute<RSSFieldAttribute>().FieldName).ToArray()
                }
              };

              var response = dsClient.Extract(request);

              var pivoted = ExtractionUtility.PivotExtractionResult(response.ExtractResult.Columns, response.ExtractResult.RowCount, response.ExtractResult.Messages);

              StringBuilder b = new StringBuilder();
              b.AppendLine(ServiceHelpers.ToCsvLine(pivoted.ColumnNames.Concat(new [] {"FIID"})));
              foreach (var row in pivoted.Rows)
              {
                string isin = row[(int)FieldsToReturn.InstrumentID] as string;

                b.AppendLine(ServiceHelpers.ToCsvLine(row.Concat(new string[] { dict_isinToMissingBond[isin].FIID.ToString() })));
              }

              var path = @"e:\temp\missingAuctions.csv";
              FileInfo i = new FileInfo(path);

              StreamWriter writer = i.CreateText();
              writer.Write(b.ToString());
              writer.Close();
            }

          }
        }
      }
      catch (Exception ex_)
      {
        Logger.Error("blast", typeof(UpdateCTBondData), ex_);
      }
    }
 public override ReutersDSS.FTP.InputList BuildFTPInputList(SymmetryEntities dc_, ExtractionServiceClient dsClient_)
 {
   return new ReutersDSS.FTP.InputList()
   {
     InputListAction="Replace",
     Name=ftpInstrumentList.ToString(),
     Instrument=getAllSwaps(dc_)
     .Select(x=>FIHelpers.GetFIIdentifiers(x.SymmetryCode,IdentifierType.RIC,dc_,ThrowBehavior.DontThrow))
     .Where(x=>x!=null && x.Length>0)
     .SelectMany(x=>x)
     .Select(x=>new ReutersDSS.FTP.Instrument()
     {
       IdentifierType="RIC",
       Identifier=x,
     }).ToList()
   };
 }
    protected override ValidatedInstrument[] getValidatedInstruments(SymmetryEntities dc_, ExtractionServiceClient dsClient_, CredentialsHeader credentials_)
    {
      m_ric_to_FIs = new Dictionary<string, FI>();

      var listOfInstruments = new List<InstrumentIdentifier>();

      foreach (var fi in getAllFixings(dc_))
      {
        string ric = FIHelpers.GetFIIdentifier(fi.SymmetryCode, IdentifierType.RIC, dc_, ThrowBehavior.DontThrow);

        if (ric == null)
        {
          SLog.log.WarnFormat("Cannot locate RIC for SymmetryCode:{0}", fi.SymmetryCode);
          continue;
        }
        m_ric_to_FIs.Add(ric, fi);

        listOfInstruments.Add(new InstrumentIdentifier()
          {
            IdentifierValue = ric,
            IdentifierType = "RIC"
          });

      }
      ValidatedInstrument[] ret = ServiceHelpers.ValidateInstruments(listOfInstruments.ToArray(), dsClient_, ref credentials_);

      return ret;
    }
示例#6
0
 public abstract ReutersDSS.FTP.InputList BuildFTPInputList(SymmetryEntities dc_, ExtractionServiceClient dsClient_);
示例#7
0
 public abstract void MakeRequestsToDataScope(ExtractionServiceClient dsClient_, CredentialsHeader dsHeader_);
示例#8
0
 public abstract void PrepareInstruments(SymmetryEntities dc_, ExtractionServiceClient dsClient_, CredentialsHeader dsHeader_);
    public static void Go()
    {
      var ctList = SI.Strategy.CTDs.Generator.Go();

      var listOfMissing = new List<MonthYear>();

      foreach (var v in ctList)
      {
        if (v.CT2 == null || v.CT3 == null || v.CT5 == null || v.CT7 == null || v.CT10 == null || v.CT30 == null)
          if (!listOfMissing.Contains(v.RefundingMonth))
          {
            Logger.Debug(string.Format("Missing bonds for {0}", v.RefundingMonth), typeof(UpdateCTBondData));
            listOfMissing.Add(v.RefundingMonth);
          }
      }
      System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Ssl3;

      try
      {
        var cred = ServiceHelpers.GetCredentials();

        using (var dc = SymmetryDataSource.ReadOnly())
        {
          using (var dsClient = new ExtractionServiceClient())
          {
            var isins = new Dictionary<string, ValidatedInstrument>();

            foreach (var v in listOfMissing)
            {
              var request = new SearchInstrumentsRequest
              {
                CredentialsHeader = cred,
                request = new InstrumentSearchRequestGovCorp
                {
                  IdentifierType = "ISN",
                  IdentifierSearchValue = "US9128*",
                  PreferredIdentifierType = "ISN",
                  IsGovernmentGroup = true,
                  IssueDatePrimaryValue = new DateTime(v.Year, v.Month, 3),
                  IssueDateSecondaryValue = new DateTime(v.Year, v.Month, 25),
                  IssueDateComparisonOperator = "FROM",
                }
              };

              var response = dsClient.SearchInstruments(request);

              Array.ForEach(response.SearchInstrumentsResult.Instruments.Select(x => x.IdentifierValue).Distinct().ToArray(), (x) => Logger.Debug(x, typeof(UpdateCTBondData)));

              foreach (var validatedInstrument in response.SearchInstrumentsResult.Instruments)
              {
                var isin = validatedInstrument.IdentifierValue;

                if (isins.ContainsKey(isin))
                {
                  if (validatedInstrument.Source.Equals("TWB"))
                    isins[isin] = validatedInstrument;
                  continue;
                }

                var fi = FIHelpers.GetFIBySymmetryCode(isin, dc, Symmetry.Core.ThrowBehavior.DontThrow);

                if (fi == null)
                  isins.Add(isin, validatedInstrument);
              }
            }

            if (isins.Count == 0)
              return;

            {
              var request = new ExtractRequest
              {
                CredentialsHeader = cred,
                request = new InstrumentExtractionRequestTermsAndConditions
                {
                  Instruments = isins.ToList().Select(x => x.Value).ToArray(),
                  OutputFields = Enum.GetNames(typeof(FieldsToReturn))
                    .Select(x => typeof(FieldsToReturn).GetField(x.ToString()))
                    .Select(x => x.GetCustomAttribute<RSSFieldAttribute>().FieldName).ToArray()
                }
              };

              var response = dsClient.Extract(request);

              var pivoted = ExtractionUtility.PivotExtractionResult(response.ExtractResult.Columns, response.ExtractResult.RowCount, response.ExtractResult.Messages);

              StringBuilder b = new StringBuilder();
              b.AppendLine(ServiceHelpers.ToCsvLine(pivoted.ColumnNames));
              foreach (var row in pivoted.Rows)
              {
                b.AppendLine(ServiceHelpers.ToCsvLine(row));
              }

              var path = @"e:\temp\missingBonds.csv";
              FileInfo i = new FileInfo(path);

              StreamWriter writer = i.CreateText();
              writer.Write(b.ToString());
              writer.Close();
            }

          }
        }
      }
      catch (Exception ex_)
      {
        Logger.Error("blast", typeof(UpdateCTBondData), ex_);
      }
    }
		public override ReutersDSS.FTP.InputList BuildFTPInputList(SymmetryEntities dc_, ExtractionServiceClient dsClient_)
		{
			throw new NotImplementedException();
		}
    public override ReutersDSS.FTP.InputList BuildFTPInputList(SymmetryEntities dc_, ExtractionServiceClient dsClient_)
    {
      var futs = getValidFuturesChains();

      return
        new ReutersDSS.FTP.InputList()
        {
          InputListAction = "Replace",
          Name = ftpInstrumentList.ToString(),
          Instrument =
            futs.Select(
              fut =>
                new ReutersDSS.FTP.Instrument
                {
                  IdentifierType = "CHR",
                  Identifier = string.Format("0#{0}:", fut.RICStart)
                }).ToList()
        };
    }
    protected override ValidatedInstrument[] getValidatedInstruments(SymmetryEntities dc_, ExtractionServiceClient dsClient_, CredentialsHeader credentials_)
    {
      var ints =
        getValidFuturesChains()
          .Select(
            x =>
              new InstrumentIdentifier {IdentifierValue = string.Format("0#{0}:}", x.RICStart), IdentifierType = "CHR"});

      if (!ints.Any())
        return null;

      // keep mapping for return from datascope
      m_ric_to_FIs = new Dictionary<string, FI>();

      var listOfInstruments = new List<InstrumentIdentifier>();

      var tp = ServiceHelpers.ValidateInstruments(ints.ToArray(), dsClient_, ref credentials_);

      return tp;
    }
    private void validateUsingMethod(
      Func<FI,string,SymmetryEntities,InstrumentIdentifier> identifierformer_, 
      int configIndex_,
      ICollection<FI> fromThese_, 
      ICollection<ValidatedInstrument> validated_, 
      ExtractionServiceClient dsClient_, 
      CredentialsHeader credentials_, 
      SymmetryEntities dc_
      )
    {
      var identifiers = new List<InstrumentIdentifier>();

      var dict = new Dictionary<string, FI>();

      foreach (var f in fromThese_)
      {
        var config = RICHelper.GetMappingForBond(f.SymmetryCode);

        string exch = null;

        switch (configIndex_)
        {
          case 0:
            {
              exch = config == null || config.ExchangeList == null || !config.ExchangeList.Any()
                ? PRIMARY_BOND_SOURCE
                : config.ExchangeList[0];
            }
            break;
          case 1:
          {
            exch = config == null || config.ExchangeList == null || config.ExchangeList.Count() < 2
              ? SECONDARY_BOND_SOURCE
              : config.ExchangeList[1];
          }
            break;
        }

        var identifer = identifierformer_(f, exch, dc_);

        if (identifer == null) continue;

        dict[identifer.IdentifierValue] = f;

        identifiers.Add(identifer);
      }

      if (!identifiers.Any()) return;

      var validated_unvalidated = ServiceHelpers.ValidateInstruments_FindUnValidated(identifiers.ToArray(), dsClient_, ref credentials_);

      foreach(var valid in validated_unvalidated.Item1)
      {
        validated_.Add(valid);
        fromThese_.Remove(dict[valid.IdentifierValue]);
      }

    }
    public override ReutersDSS.FTP.InputList BuildFTPInputList(SymmetryEntities dc_, ExtractionServiceClient dsClient_)
    {
      var valInstruments = getValidatedInstruments(dc_, dsClient_, ServiceHelpers.GetCredentials());

      return new ReutersDSS.FTP.InputList()
      {
        InputListAction = "Replace",
        Name = ftpInstrumentList.ToString(),
        Instrument = valInstruments.Select(x => new ReutersDSS.FTP.Instrument()
        {
          Identifier = x.IdentifierValue,
          IdentifierType = x.IdentifierType,
          Exchange = new[] {x.Source}.ToList()
        }).ToList()
      };
    }
    protected override ValidatedInstrument[] getValidatedInstruments(SymmetryEntities dc_, ExtractionServiceClient dsClient_, CredentialsHeader credentials_)
    {
      var allBondsToValidate = getAllBondsToPrice(dc_);
      var validated = new List<ValidatedInstrument>();

      // first try cusip=TWEB
      validateUsingMethod(
        configIndex_: 0,
        fromThese_: allBondsToValidate,
        validated_: validated,
        dsClient_: dsClient_,
        credentials_: credentials_,
        dc_: dc_,
        identifierformer_: (bond, exch, dc) =>
        {
          if (String.Compare(exch, "TWB", StringComparison.OrdinalIgnoreCase) != 0)
            return null;

          bool canUseCusipEqTWEB = false;
          /*
           * We know that actually tweb starts using cusip=tweb  after auction date, but we don't always have the auction data for the bond
           * 
           * If we can get the auction date, and it's before that date, then we can use cusip=tweb
           * 
           */

          if (bond.FIBond == null) return null;

          {
            DateTime? auctionDate = bond.FIBond.AuctionDate;

            if (bond.FIBond.FIBondAuctions != null && bond.FIBond.FIBondAuctions.Count>0)
              auctionDate = bond.FIBond.FIBondAuctions.ToArray().Select(x => x.AuctionDate).Min();

            if (auctionDate.HasValue && auctionDate.Value < DateTime.Today)
              canUseCusipEqTWEB = true;
          }

          // if we haven't already been able to validate using auction date, then, as a second best,
          // see if 'today' is past or equal to issuedate
          if (!canUseCusipEqTWEB && bond.FIBond.IssueDate.HasValue)
            canUseCusipEqTWEB = bond.FIBond.IssueDate.Value <= DateTime.Today;


          if (!canUseCusipEqTWEB)
            return null;

          var cusip = FIHelpers.GetFIIdentifier(bond.SymmetryCode, IdentifierType.CUSIP, dc, ThrowBehavior.DontThrow);

          if (string.IsNullOrEmpty(cusip))
            return null;

          return new InstrumentIdentifier
          {
            IdentifierType = "RIC",
            IdentifierValue = string.Format("{0}=TWEB", cusip)
          };
        });


      // then try ISIN with source=TWEB (or first config item)
      validateUsingMethod(
        configIndex_: 0,
        fromThese_: allBondsToValidate,
        validated_: validated,
        dsClient_: dsClient_,
        credentials_: credentials_,
        dc_: dc_,
        identifierformer_: (bond, exch, dc) => new InstrumentIdentifier
        {
          IdentifierType = "ISN",
          Source=exch,
          IdentifierValue = bond.SymmetryCode
        });

      // then try ISIN with source=TWEB (or first config item)
      validateUsingMethod(
        configIndex_: 1,
        fromThese_: allBondsToValidate,
        validated_: validated,
        dsClient_: dsClient_,
        credentials_: credentials_,
        dc_: dc_,
        identifierformer_: (bond, exch, dc) => new InstrumentIdentifier
        {
          IdentifierType = "ISN",
          Source = exch,
          IdentifierValue = bond.SymmetryCode
        });


      // log anything we couldn't get a validated intstrument for
      foreach (var remainingBond in allBondsToValidate)
      {
        SLog.log.DebugFormat("Could not discover validated instrument for [{0}]", remainingBond.SymmetryCode);
      }

      SLog.log.InfoFormat("Validated {0} bonds.", validated.Count);

      return validated.ToArray();
    }