Tag Archive: APX


After Labor Day, summer is effectively over for investment professionals. Most executives and senior staff of financial services firms return to the office from vacations recharged and ready to go. Next week, they may need to tap that extra energy if they have to cope with the conversion of TD Ameritrade accounts to Schwab accounts. Schwab Advisor Center will be temporarily unavailable from September 2nd at 2am ET through September 5th at 5am ET while they complete the integration between Schwab and TD Ameritrade.

Earlier this summer, Schwab stopped generating transactions and positions, as well as other files that were scheduled to be sunset. Schwab gave customers over a year of warning that this change was coming. However, I cannot help wondering how difficult it would have been to keep generating those files, or better yet, refer those customers to me directly for assistance. Schwab wasn’t interested in doing either. As a result, customers that were impacted may still need to update or change systems that were dependent on those data feeds for daily workflows in order to process the transactions and positions data received after 07/11/23.

 

 

Creating Price Files Compatible with Advent Products

When I blogged about Schwab ending support for legacy price and transaction files around this same time last year, I didn’t know if I would be willing to create a translation utility to take Schwab CRS transaction files and convert them to Advent’s CS transaction files.  Writing the utility for prices was relatively simple by comparison.  I collected a one-time service fee from customers, and in turn facilitated their ability to keep their pricing workflow intact through the use of that utility. The utility processes CRS security files (CRSyyyymmdd.SEC) to create CS price files (CSmmddyy.PRI). Once the CS files have been created, they show up in Dataport as they always have in the past.

I felt good about the fact that I was able to help those customers in very tangible way with little effort on my part.  If you haven’t read the blog, you can find it here.  In short, the blog details the issue at the time, some possible solutions, and warns users that the conversion of transactions will be a larger and more costly issue to address.  At that time, I was not committed to writing a transaction conversion utility.

I have included a rudimentary VB code sample below to translate Schwab’s newer CRS SEC file to the legacy CS PRI Advent format required by some users:

 

VB
Sub CreatePriceFile(Folder As String, FileDate As Date)

'This subroutine converts Schwab CRS files to Advent's
'naming convention (CSmmddyy.PRI) and file format to be
'compatible with Axys and Dataport.  This is the same format
'that was provided via the Schwab Point-to-Point interface.

'Once this routine has been run on a CRSyyyymmdd.SEC file, 
'Dataport will recognize and be able to convert these files
'as it did prior to Schwab turning off the feed. 

' written in VBA by Kevin Shea (aka AdventGuru) & updated 08/30/2023

' Disclaimer: This routine works fine for the specific instance it was
' created for, but could need additional modifications for different
' circumstances.

On Error GoTo CPErrorHandler

dim Fields() as string
Dim Spaces, OutfileFH, IngestFH As Integer
Dim Record, Price, RawPrice, CUSIP, SType, Ticker, AssetIs As String
Dim SourceFilename, DestinationFilename As String

SourceFilename = "CRS" + Format(FileDate, "YYYYMMDD") + ".SEC"
DestinationFilename = "CS" + Format(FileDate, "MMDDYY") + ".PRI"

OutfileFH = FreeFile
Open Folder + DestinationFilename For Output As #OutfileFH

IngestFH = FreeFile
Open Folder + SourceFilename For Input As #IngestFH

Do While Not EOF(IngestFH)

  Line Input #IngestFH, Record

  If Left$(Record, 2) = "D1" Then
  'Only process the detail records.
  'Ignore header "H1" and summary "T1" records.
 
    Fields = Split(Record, "|")
    'This is a great VB command that splits the contents of the record and puts
    'it into an array.  For example, fields(0) contains the value of first field
    'in the record, fields(1) contains the value of the second field and so on.
     
    'Assign the fields to named variables we need to build the price file, which
    'makes the code easier to read later.

    Ticker = Trim$(Fields(9))
    AssetIs = Trim$(Fields(6))
    CUSIP = Trim$(Fields(11))
    SType = Trim(Fields(8))
    Spaces = 9 - (Len(SType) + Len(Ticker))

    'Remove the leading zeros from the price field value.
    'May not be absolutely necessary, but we do it anyway.
    'You might be tempted to use the replace statement here
    'instead, but that would have unattended consequences.
    'We are only removing the leading zeros.

    For x = 2 To Len(Fields(34))
      If Mid$(Fields(34), x, 1) <> "0" Then
        Price = Right$(Fields(34), Len(Fields(34)) - (x - 1))
        Exit For
      End If
    Next x
  
    'Ignore securities if they are derivatives.
    'If a ticker exists use that.
    'Otherwise, assume we need to use the CUSIP.

    If AssetIs <> "DERV" Then
      If Trim$(Ticker) = "" Then
        Spaces = 12 - (Len(SType) + Len(CUSIP))
        Print #OutfileFH, SType + Left$(CUSIP, 8) + Space(Spaces) + Price
      Else
        Spaces = 11 - (Len(SType) + Len(Ticker))
        Print #OutfileFH, SType + Trim$(Ticker) + Space(Spaces) + Price
      End If
    End If
  
  End If
Loop

Close #IngestFH
Close #OutfileFH

Debug.Print "Price file " + DestinationFilename + " built from " + SourceFilename + "."
Log ("Price file " + DestinationFilename + " built from " + SourceFilename + ".")

Exit Sub

CPErrorHandler:

'Nothing happens here, but some logging.
Log "An error occurred in the sub (CreatePriceFile)"

End Sub

Sub Log(LogMessage As String)

Dim LF As Integer
LF = FreeFile
Open Application.ActiveWorkbook.Path + "\SPTP_Price_File_Translator_Log_" + Format(Date$, "MMDDYYYY") + ".txt" For Append As #LF
Print #LF, Format(Date$, "MM/DD/YYYY") + " " + Format(Time$, "HH:MM:SS") + " " + LogMessage

Close #LF

End Sub

 

CRS Transaction File Translation

As the July 2023 deadline imposed by Schwab approached, some of the users I assisted with the CRS Price File Translator reached out to me to see if I was going to create a tool to address it. Eventually, I agreed to do it in July.  Working from samples of the first customer’s historic CS transaction files (CSmmddyy.TRN) and the newer Schwab CRS transaction files (CRSyyyyddmm.TRN), I was able to map over fifty different types of transactions and build a tool to convert the CRS files provided by Schwab into the format compatible with Advent and Dataport. 

There is some redundancy in Schwab’s transaction mappings.  Schwab seems to create a distinct transaction code and mapping for more transactions than necessary. For example, there are at least six different types of dividend mappings and similarly at least three different ways that they categorize a check that was written.  My goal in writing the translator was to preserve the information and create a file nearly identical to what Schwab has been generating for several years.

 

The CRS Position File

When I agreed to create the conversion utility for transaction files, I failed to realize that I would also have convert the position files so that users can continue to utilize the Schwab Reconciliation Report in Advent. So I created the position translator gratis.  While analyzing the file I found that Schwab has two different record types encoded in their CRS RPS files. The first block of records appears to be non-cash assets.  The second block of records are cash-only. Those records start with “D1” and “D2” respectively.

Those familiar with Schwab’s cash types may already know that they have nearly twenty different types of “cash” that get baked into the position files.  The CRS RPS file has the asset value for these various cash types for each account stored in a single record, which means that we needed to read the cash records from the CRS file and create multiple records in the CS file.  Conversely, the non-cash records are translated into a single record in the CS file we created.

The tool has been used to convert the transactions and positions from 07/12/23 forward.  It is now being used in day-to-day operations at that firm.  There have been a small number of mapping issues we needed to fix, but overall, the CRS Translator – which now creates CS PRI, TRN and RPS files – is working well.  In the past week, I signed up a few additional customers for the service and expect to hear from more potential customers due to the upcoming Schwab/TD Ameritrade (TDA) work scheduled for Labor Day weekend.

 

What is going to happen to AD files currently generated by TD Ameritrade?

Apparently, Schwab will stop providing similarly constructed legacy files to the TDA advisors.  My understanding is that those Schwab customers will receive CRS files populated with their data for the first time on 09/05/23.  They have been receiving empty files with headers alone to date. If their workflows have any dependencies on the old file formats, they will need to convert those files ASAP or make other changes to their systems to implement new workflows, such as ACD, so they can continue to download prices and transactions and reconcile positions in a timely manner.

 


About the Author: Kevin Shea is the Founder and Principal Consultant of Quartare; Quartare provides a wide variety of technology solutions to investment advisors nationwide.

For details, please visit Quartare.com, contact Kevin Shea via phone at 617-720-3400 x202 or e-mail at kshea@quartare.com.

 

Schwab is no longer providing price file downloads that some Axys users have relied on for decades.

When I set out to write this, I had some trouble deciding on the title.  At first, I considered “Schwab Hamstrings Pricing for Advent Users”, but that’s inflammatory and not entirely accurate, so I couldn’t do that.

I could just as easily have titled this blog “Stubborn Axys Users Refuse to Embrace Benefits of ACD Interface” or “Axys Users Slow to Hire Consultants to Address Schwab Point-to-Point Interface Changes”, but in truth Schwab is discontinuing their support for Axys in the data they provide directly to their customers via the Schwab download, so I had to go with “Schwab Discontinuing Support of Axys Point-to-Point Interface – Again?”  Besides, picking one of those other titles would have made me write a blog with a different message.  In advance, I’d like to clarify that this issue only impacts the Schwab point-to-point interface and has no effect on those that receive their Charles Schwab data from Advent’s ACD interface. 

I need to apologize to those who have read my blog regularly in the past.  First, I am sorry I haven’t posted anything in a while.  Additionally, I must apologize that this blog may not seem particularly newsworthy for some.  You may even be thinking, Didn’t this happen eons ago.  The answer is yes and no.

About twenty years ago, there was some drama about the point-to-point interface that Charles Schwab provided to its customers and Advent, being Advent, may have been perceived as attempting to screw Charles Schwab and its customers to make more money.  Schwab, being Schwab, sued Advent – to paraphrase the judge told Advent, “You can’t do that.”

According to what I can dig up now, the firms quit wasting each other’s time and money nearly seven months after that preliminary injunction, coming to a compromise that allowed Schwab to continue to provide their point-to-point data for a period of time.  In my recollection of the events, it seemed much more drawn out.  Fast forward twenty years, and now everyone that is still relying on this particular set of data directly from Schwab’s download is back to square one.

Back in 2002, the underlying issue was that Advent didn’t want Schwab to continue providing the data without going through ACD and Schwab wanted to continue providing the data to satisfy their existing customers, who had grown dependent on getting that data via the point-to-point interface.  From the perspective of those Axys customers, it is easy to understand their position then and now…  it is pretty much free, and it works.  Why would we want to change that?

Somehow, for more years than I would have thought possible these holdouts that either saw no reason to fix something that wasn’t broken or were too cheap to move to ACD continued to do what they had been doing for decades.  I never thought this would have gone on as long as it did.  Alas, as they say, all good things must come to an end.  That is apparently what is happening now.

Schwab is in the process of stopping production of the files that feed Dataport for this subset of Axys users.  Last month, they stopped producing the price (CSMMDDYY.pri) files; they are also planning to stop producing other key files, such as transactions, sometime in 2023.  The sudden inability to create a price file no doubt caused some difficulties for those still dependent on them.  As a result, a couple firms reached out to me.

After a brief discussion with the first firm, I agreed to automate the creation of the missing price file.  According to my customers, both Advent and Schwab were unwilling to assist them with the issue.  Advent’s not planning to make changes to their interface to take in the new Schwab files, and Schwab’s not planning to help clients transform the files into something that can be ingested directly into Dataport.

It sounded way too easy for someone with my experience, and I thought it would only take a “few” minutes.  Somewhat embarrassingly, I spent a few hours creating the automation necessary to do the translation.  However, in a subsequent implementation for another customer, I was able to have a meet-and-greet call with them and a follow-up call to implement and test the solution in their environment very quickly.  All of it was accomplished in a couple hours, and on the very same day the prospective customer contacted me, leading me to believe that future implementation may be performed in a matter of minutes.

Those dealing with what is currently limited to a pricing issue have a handful of choices, none of which are fun to deal with when you need yesterday’s prices now:

  1. The most obvious choice: consider implementing the Schwab Interface via ACD.  It might be worth it.  I am not kidding.  I have plenty of clients that use ACD.
  2. Use a third-party pricing service like IDC/ICE or Telemet.
  3. Key the prices in manually.  I am not recommending this, but it is certainly an option.
  4. Utilize automation to recreate the missing price file (CSMMDDYY.pri) from the security file (CRSYYYYMMDD.SEC) now provided by Schwab.  This isn’t very difficult, and that is what I have done for those who have asked me to resolve the issue for them.

Addressing the pricing issue alone is a stop-gap solution at best.  The larger issue down the road is translating the transaction files, which will need to be done in 2023.  At my clients’ request, I have agreed to look into doing this for them as well, and I will most likely do it.  With my experience building Axys interfaces and doing the requisite transaction mapping et cetera it probably won’t be that big a deal, but it will certainly be more complicated and time-consuming than the Price File Translator was to create.

As always, if this issue is something your firm needs assistance with, please feel free to contact me directly.


Kevin Shea Impact 2010

About the Author: Kevin Shea is the Founder and Principal Consultant of Quartare; Quartare provides a wide variety of technology solutions to investment advisors nationwide.

For details, please visit Quartare.com, contact Kevin Shea via phone at 617-720-3400 x202 or e-mail at kshea@quartare.com.

iStock_000021815840XSmallAll things change – even things at the SEC.   Previously, investment managers could upload text (aka ASCII) files detailing their holdings to Edgar.  This quarter, a change was made, requiring the file to be formatted in XML.  Investors have 45 days from the end of the quarter to file their 13F reports, so Q2 reports are due today.

Some users that attempted to get these reports done earlier in Q3 expressed frustration with the XML issue and their ability to get more proactive assistance from Advent to address it.  Last week, as the filing deadline approached, Advent reached out to clients, alerting them of the change and directing them to an ASCII to XML conversion tool to facilitate the process.  In my own experience with Advent’s support team, I found them both helpful and knowledgeable in regard to the 13F reporting issues.

Though Advent’s documentation states that the 13F report and conversion tool requires Axys 3.8.5 or higher, the report from Axys 3.8.5 worked fine when we used it on Axys 3.7 with a client.  APX users can use the same utility.  The utility was simple to use and worked well;  the biggest challenge for users is finding the file they need to convert.

The 13F reporting mechanism is functional, but the setup seems cryptic and disjointed.  First-time users expecting a turn-key, intuitive solution will be disappointed.  Fortunately, the details of what is required to produce 13F reports are well-documented in Advent’s help file.

How 13F Reporting Works…

By default, the 13F report only includes the equity asset class.   It is possible to exclude individual securities through the use of the 13F.est file, but it is not possible to include individual securities.  Additional asset classes may be added.  Report-specific labels must be added to the 13F portfolio file to make the report work properly.

When the supporting files are properly configured, the report produces detailed holdings and simultaneously generates an inftable.txt file with the same information.  This file is placed in the specific user folder (i.g. f:\axys3\users\amy) of the person running the report on the network version of Axys or the root folder of Axys on the single-user version of Axys.  When users have generated a 13F report without missing data or error messages, they are ready run to the conversion utility to produce the inftable.xml file and upload the information to the Edgar site.

This quarter, running and filing 13F reports was more challenging than it has been in the past, since users were forced to correctly implement the 13F report in order to successfully generate an XML file.  Based on my experience with users, this was something they had not been doing in the past.  Most users would run the report to get something close to what they needed and then manually modify the text file, rather than keep all of the information updated in the 13F portfolio and 13F.est files.  Going forward, the process will still require that new securities and relevant asset classes be classified specifically for the 13F report, but future report runs should be simpler.

For more info on 13F reporting, refer to the SEC’s document detailing Frequently Asked Questions (FAQ).

About the Author: Kevin Shea is President of InfoSystems Integrated, Inc. (ISI); ISI provides a wide variety of outsourced IT solutions to investment advisors nationwide.

For details, please visit isitc.com, contact Kevin Shea via phone at 617-720-3400 x202 or e-mail at kshea@isitc.com.

iStock_000011255731XSmallWhen Advent first introduced The Professional Portfolio (aka Proport) 25 years ago, one feature that contributed  largely to its long-term success was the ability to get data in and out of the program easily.  Advent software has continued to make this feature a priority throughout every iteration of their original portfolio management product line.

In contrast competing products like Centerpiece, which would eventually be purchased by Schwab and rebranded Portfolio Center, appeared to be a black box.  You could see what was being calculated, but could not see the components of the calculation.

Proport files were stored in an open text format and could be easily read and written as necessary.  Axys v1.x, Advent’s premier Windows product at the time, maintained a similar open file structure.  Axys v2.x was the first version to implement a binary file format.  At the time, some users were concerned that the format change would complicate maintenance of existing customized solutions and inhibit their ability to continue to create solutions that exchanged data with Advent’s portfolio management system.

Firms were slow to embrace Axys v2.x and some never upgraded to it.  Perhaps it was concern over the new file formats.  Instead, most firms eventually upgraded to Axys v3.x. Concerns about the format change were moot since Advent also introduced IMEX, which allowed users to import and export files in CSV, tab, and fixed formats.

Exceptions apply, but the IMEX tool facilitates the ability to move data in and out of Axys with relative ease.  The features of IMEX combined with the ability to import transaction and label data through the trade blotter provide a comprehensive means to get fundemental data in and out of Advent Axys and APX.  Additional methods of importing and exporting data follow:

Axys users may write or read data directly to data files if they have knowledge of the underlying data format.  However, this is not a best practice due to changing file formats between versions.  For example, upgrading from Axys v3.7 to v3.8 requires a file conversion process.  Some of the resulting Axys v3.8 files have a different file format, so any process directly writing or reading these files would need to be updated to take the new file formats into account.

APX users may

  1. query the APX database via Excel (and other software programs).
  2. write SSRS or Crystal reports to extract data.
  3. use many other SQL based tools to export and import selected data.

Axys and APX users can

  1. export reports directly to Excel with the push of a button or create a macro that stores report output in XLS and other file formats.
  2. create custom reports via Report Writer Pro, which can easily be changed to CSV format.
  3. modify existing replang reports to build CSV, other text formats, and various Advent file formats.
  4. use third-party Extract, Transform and Load (ETL) products like xPort.

APX (v1.x to v4.x) maintains the functionality of IMEX, but the ability to generate files in a fixed format has been eliminated.  In addition, you can export data to an Axys v3 format.

Due to these capabilities and a host of other Advent features that facilitate automation and integration, Axys and APX users as well as third-party vendors like ISITC.com have developed many custom solutions utilizing Advent Software’s infrastructure to address day-to-day investment operations workflow and reporting requirements.  The building blocks of these solutions faciliate subsequent projects and allow investment firms to further enhance Advent’s portfolio management systems to meet their evolving needs with less effort and cost.

Here is a sample of some VB code we use to integrate and automate data handling of exported Axys and APX data.  The code can be used in Excel with VBA and User-Defined Functions (UDFs) to pull data from Axys and APX like Bloomberg BLP functions are used in Excel. This function is just one of the routines in our library of code that enable us to seemlessly integrate our solutions with Advent’s infrastructure.  I wrote the original source code for this routine twenty years ago and have updated it as necessary to support later releases of Axys and APX.

Using similar resources, integrators can move quickly from prototype to production when developing solutions for Advent users.  In fact, Advent’s most recent annual report continues to cite customers building their own solutions as one of their largest sources of competition.  For instance, a number of firms have created their own Order Management Systems – not that I’d recommend it.

Advisors abhor inefficiency and are typically willing to make a reasonable investment to reduce it.  Automation not only increases efficiency, but lowers risk by eliminating manual processes that may rely on individuals and their exclusive knowledge of manual or semi-automatic procedures.  Some financial services firms have customized their systems to a degree that makes staying on the Advent platform for twenty plus years possible and the thought of switching to another platform regrettable.

Thanks to the way Advent handles getting data in and out of their systems, users can continue using Axys to meet their ever-changing system requirements and leverage most solutions created for Axys on the APX platform.   Similar and potentially better tech options may exist on other competing platforms, but most of those systems lack the maturity, depth of resources, third-party relationships, and corresponding reliability of Advent’s platform choices.  Knowledge and acceptance of these competing products among advisors, employees, and third-party solution providers won’t match Advent for a long time.

As a result, even though technologically superior portfolio management platforms may emerge, many firms will continue using Advent’s best known portfolio management systems for the foreseeable future.

About the Author: Kevin Shea is President of InfoSystems Integrated, Inc. (ISI); ISI provides a wide variety of outsourced IT solutions to investment advisors nationwide.

For details, please visit isitc.com, contact Kevin Shea via phone at 617-720-3400 x202 or e-mail at kshea@isitc.com.