internal override void Run(string[] tokens)
    {
      if (tokens.Length < 7)
      {
        SLog.log.Info(Usage);
        return;
      }

      var env = tokens[1];
      var user = tokens[2];
      var pw = tokens[3].ConvertToSecureString();
      var snap = tokens[4];
      var targetQuoteSource = tokens[5];
      var startDate = GetDateTime(tokens[6]);
      var endDate = startDate;
      if (tokens.Length > 7)
        endDate = GetDateTime(tokens[7]);

      var valueDate = startDate;

      while (valueDate <= endDate)
      {
        using (Symmetry.Interop.Orchestrade.ClientProxy cp = new Interop.Orchestrade.ClientProxy(env, user, pw))
        {
          cp.Open();

          if (snap.ToUpper().Equals("ALL"))
          {
            Symmetry.Interop.Orchestrade.MarketData.PushQuoteSetToOrchestrade(cp, "LDN", "SYM", valueDate, targetQuoteSource);
            Symmetry.Interop.Orchestrade.MarketData.PushQuoteSetToOrchestrade(cp, "NYK", "SYM", valueDate, targetQuoteSource);
            Symmetry.Interop.Orchestrade.MarketData.PushQuoteSetToOrchestrade(cp, "CLOSE", "SYM", valueDate, targetQuoteSource);
          }
          else
            Symmetry.Interop.Orchestrade.MarketData.PushQuoteSetToOrchestrade(cp, snap, "SYM", valueDate, targetQuoteSource);

        }

        valueDate = valueDate.AddTenor(Tenor.BusinessDays(1));
      }
    }
Example #2
0
    static int Main(params string[] args)
    {
      int returnValue = 0; // default returnValue is 'success'

      try
      {
        using (var dc = Symmetry.Data.SymmetryDataSource.ReadOnly())
        {
          SLog.log.InfoFormat("Database connection: {0}/{1}", dc.Database.Connection.DataSource, dc.Database.Connection.Database);
        }
      }
      catch (Exception ex)
      {
        SLog.log.Error("Unable to connect to database", ex);
      }

      if (args.Length > 0 && !string.IsNullOrWhiteSpace(args[0]))
      {
        switch (args[0])
        {
          case "dailymlp":
            {
              var valueDate = GetValueDate(args, -1);
              if (valueDate.HasValue)
              {
                returnValue = (int)new DailyMLPBatch().Run(valueDate.Value);
                Symmetry.Interop.Carbon.OT.CarbonDataSource.ClearUp();
              }
            }
            return returnValue;
          case "dailynom":
            {
              var valueDate = GetValueDate(args, 0);
              if (valueDate.HasValue)
              {
                new DailyNOMBatch().Run(valueDate.Value);
              }
            }
            return returnValue;
          case "dailyrebuild":
            {
              var valueDate = GetValueDate(args, -1);
              if (valueDate.HasValue)
              {
                new DailyRebuild().Run(valueDate.Value);
              }
            }
            return returnValue;
          case "dailydatascopeconvexities":
            {
              returnValue = (int)Symmetry.Import.RDS.DSImportController.GetCloseSecondary().Go();
            }
            return returnValue;

          case "dailynewissuesearch":
            {
              returnValue=(int)Symmetry.Import.RDS.DSImportController.GetBondSearcher().Go();
            }
            return returnValue;
          case "addbondsfromisinlist":
          {
            if (args.Length > 1)
            {
              returnValue =
                (int)
                  Symmetry.Import.RDS.DSImportController.GetAddBondsFromIsins(args.Where((x, i) => i > 0).ToArray())
                    .Go();
            }
          }
            return returnValue;
          case "treasurydirectauctiondownload":
          {
            return  AuctionImporter.Go().Result ? 0 : 1;
          }
          case "dmogiltpricesdownload":
          {
            return DMOPriceImporter.DownloadAndWriteToCarbon().Result == null ? 1 : 0;
          }
          case "getdatascopefiles":
          {
            var valueDate = DateTime.Today;
            string snap = null;

            if (args.Length == 2)
              snap = args[1];
            else if (snap.Length==3)
            {
              snap = args[2];

              if(!DateTime.TryParseExact(args[1],"yyyy-MM-dd",CultureInfo.InvariantCulture,DateTimeStyles.None,out valueDate))
                return 1;
            }

            returnValue = (int) Symmetry.Import.RDS.DSImportController.GetFilesFromFTPServer(snap, valueDate);
          }
            return returnValue;
          case "generatedatascopeconfigs":
          {
            bool ftpOut = false;

            if (args.Length >= 2)
            {
              var marketSnap = args[1];

              if (args.Length > 2)
              {
                bool.TryParse(args[2], out ftpOut);
              }

              if (string.Compare("ALL", marketSnap, StringComparison.OrdinalIgnoreCase) == 0)
              {
                var intList = new List<int>
                {
                  (int)
                    Symmetry.Import.RDS.DSImportController.WriteFTPConfigs(snapCode_: "NYK", uploadToFTPServer_: ftpOut),
                  (int)
                    Symmetry.Import.RDS.DSImportController.WriteFTPConfigs(snapCode_: "LDN", uploadToFTPServer_: ftpOut),
                  (int)
                    Symmetry.Import.RDS.DSImportController.WriteFTPConfigs(snapCode_: "AUS", uploadToFTPServer_: ftpOut),
                  (int)
                    Symmetry.Import.RDS.DSImportController.WriteFTPConfigs(snapCode_: "JPY", uploadToFTPServer_: ftpOut),
                  (int)
                    Symmetry.Import.RDS.DSImportController.WriteFTPConfigs(snapCode_: "CLOSE", uploadToFTPServer_: ftpOut)
                };
                returnValue =  intList.Count==intList.Sum() ? 1 : 0;
              }
              else
              {
                returnValue = (int)Symmetry.Import.RDS.DSImportController.WriteFTPConfigs(snapCode_: marketSnap, uploadToFTPServer_: ftpOut);
              }
            }
          }
            return returnValue;
          case "processdatascopefiles":
          {
            var valueDate = DateTime.Today;
            string snap = null;

            if (args.Length == 2)
              snap = args[1];
            else if (snap.Length==3)
            {
              snap = args[2];

              if(!DateTime.TryParseExact(args[1],"yyyy-MM-dd",CultureInfo.InvariantCulture,DateTimeStyles.None,out valueDate))
                return 1;
            }

            returnValue = (int) Symmetry.Import.RDS.DSImportController.ProcessFTPFiles(snap, valueDate);
            CarbonDataSource.ClearUp();
          }
            return returnValue;
            case "orchestradeconnect":
                if (args.Length >= 3)
                {
                    string env = args[1];
                    string user = args[2];
                    SecureString pw = args[3].ConvertToSecureString();
                    using (Symmetry.Interop.Orchestrade.ClientProxy cp = new Interop.Orchestrade.ClientProxy(env, user, pw))
                    {
                        cp.Open();
                    }
                }

                return returnValue;
            case "orchestradeimporttradefile":
                if (args.Length >= 3)
                {
                    string env = args[1];
                    string user = args[2];
                    SecureString pw = args[3].ConvertToSecureString();
                    using (Symmetry.Interop.Orchestrade.ClientProxy cp = new Interop.Orchestrade.ClientProxy(env, user, pw))
                    {
                        cp.Open();
                        SwapTradeImport.Import(cp, "USD:LIBOR:3M:S"); 

                        
                    }
                }
                return returnValue;
          case "orchestradepushquotes":
            if (args.Length >= 2)
            {
                string env = args[1];
                string user = args[2];
                SecureString pw = args[3].ConvertToSecureString();
                string snap = args.Length == 4 ? "ALL" : args[4].ToUpper();
                DateTime refDate;
                string targetQuoteSource = args[5];
                if (args.Length == 7)
                {
                    refDate = DateTime.ParseExact(args[6], "yyyyMMdd", null, DateTimeStyles.None);
                    SLog.log.InfoFormat("Parsed date as : {0}", refDate.ToString("yyyy-MM-d"));
                }
                else
                {
                    using (var dc = SymmetryDataSource.ReadOnly())
                    {
                      switch (snap)
                      {
                        case "ALL":
                        case "SNAPS":
                          refDate = QuoteHelpers.GetLatestMarketSnapWithValues("LDN", DateTime.Today.AddDays(15d), dc).ValueDate;
                          break;
                        default:
                          refDate = QuoteHelpers.GetLatestMarketSnapWithValues(snap, DateTime.Today.AddDays(15d), dc).ValueDate;
                          break;
                      }
                      SLog.log.InfoFormat("Default used as latest close date as : {0}", refDate.ToString("yyyy-MM-d"));
                    }
                }
                
                
                using (Symmetry.Interop.Orchestrade.ClientProxy cp = new Interop.Orchestrade.ClientProxy(env, user, pw))
                {
                    cp.Open();
                    if (snap.ToUpper().Equals("ALL"))
                    {
                        Symmetry.Interop.Orchestrade.MarketData.PushQuoteSetToOrchestrade(cp, "LDN", "SYM", refDate, targetQuoteSource);
                        Symmetry.Interop.Orchestrade.MarketData.PushQuoteSetToOrchestrade(cp, "NYK", "SYM", refDate, targetQuoteSource);
                        Symmetry.Interop.Orchestrade.MarketData.PushQuoteSetToOrchestrade(cp, "CLOSE", "SYM", refDate, targetQuoteSource);
                    }
                    else if (snap.ToUpper().Equals("SNAPS"))
                    {
                      Symmetry.Interop.Orchestrade.MarketData.PushQuoteSetToOrchestrade(cp, "LDN", "SYM", refDate, targetQuoteSource);
                      Symmetry.Interop.Orchestrade.MarketData.PushQuoteSetToOrchestrade(cp, "NYK", "SYM", refDate, targetQuoteSource);
                    }
                    else
                        Symmetry.Interop.Orchestrade.MarketData.PushQuoteSetToOrchestrade(cp, snap, "SYM", refDate, targetQuoteSource);

                    // Maintain the security maps between SymmetryTS and Orchestrade
                    Symmetry.Interop.Orchestrade.MarketData.MaintainTSBondIdentifiers(cp, refDate);
                }
            }
            else
            {
                SLog.log.WarnFormat("Expected 3 arguments. orchestradepushquotes {env} {username} {password} [{snap}] [{CloseSource}] [{date yyyyMMDD}]");
            }
            return returnValue;
          case "dailymlpcashrec":
            {
                var valueDate = GetValueDate(args, -1);
                if (valueDate.HasValue)
                {
                    new MLPCashRec().Run(valueDate.Value);
                }
            }
            return returnValue;
          case "dailymlpfxrec":
            {
                var valueDate = GetValueDate(args, -1);
                if (valueDate.HasValue)
                {
                    new MLPFXExposureRec().Run(valueDate.Value);
                }
            }
            return returnValue;
          case "dailymlpfxrecdata":
            {
                var valueDate = GetValueDate(args, -1);   //Default is Today-1day
                if ((valueDate.HasValue) && (args.Length > 5))
                {
                    new GetRiskReportFXExposure().Run(args);   //ValuationDate in OT GUI
                }
                else
                {
                    SLog.log.InfoFormat("Expect 5 arguments in Input. dailymlpfxrecdata {ValuationDate} {runTime} {strFilter} {setupName} {env}. E.g. dailymlpfxrecdata msuat 2015-01-01 235959 \"All:SMF&MLP\" Symmetry");
                }
            }
            return returnValue;
          case "dailyotpnlreport":
            {
                var valueDate = GetValueDate(args, -1);
                if (valueDate.HasValue)
                {
                    new OTDailyPnLReport().Run(valueDate.Value);
                }
            }
            return returnValue;
          case "pnlemailnotification":
            {
                var valueDate = GetValueDate(args, -1);
                if (valueDate.HasValue)
                {
                    if (args.Length > 2)
                    {
                        new PnLEmailNotification().Run(valueDate.Value, args[2]);
                    }
                    else
                    {
                        new PnLEmailNotification().Run(valueDate.Value, null);
                    }
                    
                }
            }
            return returnValue;
          case "pnlhtmlemailnotification":
            {
                var valueDate = GetValueDate(args, -1);
                if (valueDate.HasValue)
                {
                    if (args.Length > 2)
                    {
                        new PnLHtmlEmailNotification().Run(valueDate.Value, args[2]);
                    }
                    else
                    {
                        new PnLHtmlEmailNotification().Run(valueDate.Value, null);
                    }

                }
            }
            return returnValue;
          case "pnlttmlemailgrouped":
            {
                var valueDate = GetValueDate(args, -1);
                if (valueDate.HasValue)
                {
                    if (args.Length > 2)
                    {
                        new PnlHtmlEmailGrouped().Run(valueDate.Value, args[2]);
                    }
                    else
                    {
                        new PnlHtmlEmailGrouped().Run(valueDate.Value, null);
                    }

                }
            }
            return returnValue;
          case "dailymlppnlrec":
            {
                var valueDate = GetValueDate(args, -2);
                if (valueDate.HasValue)
                {
                    new MLPPnLRec().Run(valueDate.Value);
                }
            }
            return returnValue;
          case "dailyuploadomegareport":
            {
                var valueDate = GetValueDate(args, -1);
                if (valueDate.HasValue)
                {
                    returnValue = new OmegaRateRiskLoader().Run(valueDate.Value);
                }
            }
            return returnValue;
          case "dailygetotstrategymapping":
            {
                if (args.Length != 4)
                {
                    string env = args[2];
                    string user = args[3];
                    SecureString pw = args[4].ConvertToSecureString();
                    var valueDate = GetValueDate(args, -1);
                    if (valueDate.HasValue)
                    {
                        new GetOtStrategyMapping().Run(valueDate.Value, env, user, pw);
                    }
                }
                else
                {
                    SLog.log.InfoFormat("Expect 4 arguments in Input. dailygetotstrategymapping {ValuationDate} {env} {user} {pw}. E.g. dailymlpfxrecdata 2015-01-01 msuat username pw");
                }
            }
            return returnValue;
          case "pnlderivedflash":
            {
                DateTime valueDate = DateTime.Today.AddDays(-1);
                if (args.Length > 1)
                {
                    if (DateTime.TryParseExact(args[1], "yyyy-MM-dd", CultureInfo.CurrentCulture, DateTimeStyles.AssumeLocal, out valueDate))
                    {
                        SLog.log.InfoFormat("Parsed fixed run date of {0}", valueDate.ToString("yyyy-MM-dd"));
                    }
                    else
                    {
                        SLog.log.ErrorFormat("Unable to parse input string as date, use yyyy-MM-dd format: '{0}'", args[1]);
                    }
                }
                else
                {
                    SLog.log.InfoFormat("Using default T{0} date of {1}", -1, valueDate.ToString("yyyy-MM-dd"));
                }
                new PnLDerived().Run(valueDate, "Flash");
            }
            return returnValue;
          case "pnlderivedfinal":
            {
                DateTime valueDate = DateTime.Today.AddDays(-2);
                if (args.Length > 1)
                {
                    if (DateTime.TryParseExact(args[1], "yyyy-MM-dd", CultureInfo.CurrentCulture, DateTimeStyles.AssumeLocal, out valueDate))
                    {
                        SLog.log.InfoFormat("Parsed fixed run date of {0}", valueDate.ToString("yyyy-MM-dd"));
                    }
                    else
                    {
                        SLog.log.ErrorFormat("Unable to parse input string as date, use yyyy-MM-dd format: '{0}'", args[1]);
                    }
                }
                else
                {
                    SLog.log.InfoFormat("Using default T{0} date of {1}", -1, valueDate.ToString("yyyy-MM-dd"));
                }
                new PnLDerived().Run(valueDate, "Final");
            }
            return returnValue;
          case "test":
          {
            var isins =
              "AU3TB0000192 AU000XCLWAF4 AU000XCLWAF4 AU000XCLWAM0 AU000XCLWAM0 AU000XCLWAG2 AU0000XCLWV6 AU0000XCLWV6 AU3TB0000150 AU3TB0000150 AU3TB0000135 AU3TB0000135 AU000XCLWAI8 AU000XCLWAI8 AU0000XCLWP8 AU0000XCLWP8 AU3TB0000168 AU3TB0000168 AU3TB0000143 AU3TB0000143 AU3TB0000101 AU3TB0000101 AU3TB0000051 AU3TB0000051 AU000XCLWAB3 AU000XCLWAB3 AU0000XCLWM5 AU0000XCLWM5 AU000XCLWAN8 AU0000XCLWE2 AU0000XCLWE2 AU3TB0000036 AU3TB0000036 AU3TB0000184 AU300TB01224 AU300TB01224 AU000XCLWAJ6 AU000XCLWAJ6 AU3TB0000176 AU3TB0000093 AU3TB0000093 AU3TB0000127 AU3TB0000127 AU300TB01208 AU3TB0000077 AU3TB0000077 AU3TB0000119 AU0000XCLWD4 AU0000XCLWI3 AU3TB0000085 AU3TB0000028 AU3TB0000069 AU0000XCLWH5 AU3TB0000044 AU3TB0000010 AU0000XCLWG7 AU0000XCLWA0 AU300TB01216 AU0000XCLWF9";
            Symmetry.Import.RDS.DSImportController.GetAddBondsFromIsins(isins.Split(' ')).Go();

          }
            return returnValue;
          case "buildcurves":
          {
            // expected arguments <int=offsetFromToday=valueDate> <string=quoteSourceToGenerate (sym|mlp)>

            var offset = int.Parse(args[1]);
            var quoteSource = args[2];

            Symmetry.Agent.CalculationTasks.BuildAll(
              quoteSource: quoteSource,
              valueDate: DateTime.Today.AddTenor(Tenor.BusinessDays(offset))
              );

            Symmetry.Interop.Carbon.OT.CarbonDataSource.ClearUp();
          }
            return returnValue;
          default:
            {

            }
            SLog.log.WarnFormat("Unrecognized argument '{0}'", args[0]);
            returnValue = 1;
            return returnValue;
        }
      }
      else
      {
        SLog.log.WarnFormat("Please supply batch name as argument.");
        return 1;
      }
    }