Building the system
Now it is time to start planning what functions the automated trading software will perform. Is the automated trader going to generate market or limit orders? How will the software handle partial fills? How long should the software wait for execution before the order is cancelled or a human trader is alerted? The easy part is to design software that can send an instruction to the FCM and then receive a response for the full trade. The hard part is to design software that can handle the variety of responses or non-responses that can happen. Every step of the process should be recorded in the database so that if there are issues, the trade instructions and execution can be reconstructed to see what happened.
During the design phase of the software, policies should be established on how to control the source code. How often is the code going to be backed up? Where is it going to be stored? Once a version is put into production, a complete copy of the source code for that version should be saved permanently. How are versions going to be numbered and controlled? How is the software going to be documented? A full-blown user manual is probably not necessary, but some documentation will be essential in understanding the evolution of the software and help with resolving design issues once you get into production. Some thought should be given to the release process as well. Once the code is in a production environment, how are future versions going to be implemented?
The coding phase of the software development is fairly straightforward. During the coding phase, the users should work to develop a comprehensive testing plan. Testing should include basic straightforward tests of the functionality as well as testing corner cases even if there is a very low probability of the corner case actually happening in production. Discovering how the software handles the corner cases often can lead to fixes and improvements that help even the most straightforward of processes. The software should be able to trap communication and network errors to provide alerts when things go bump.
Software bugs or errors are preventable with a good testing plan, but even the best testing plan may miss unanticipated events. Manually monitoring the software, particularly in the early stages of production, is essential for the user to get comfortable that the software is working as expected. Also, manual monitoring can lead to process improvements or enhancements that take care of the unanticipated events. If possible, run in production against the FCM’s test or demo system for a period of time to get comfortable with the process. Once comfortable with the test or demo system, switch to live trading with a small account to make sure the live system behaves like the test system. Once live, a combination of manual monitoring and a good alert process should enable a smooth operating environment freeing the trader up for more important tasks.
Now that a production version of the system is running, there needs to be a process for implementing changes and enhancements. Changes and enhancements to the software should be released first to the quality assurance environment, thoroughly tested by the users and then formally "accepted" by the users prior to being placed into production. Users should create a document of their testing scenarios and screen print or otherwise document the results of their testing. If possible, the quality assurance environment should be linked to the FCM’s demo system so that a complete production-like test can be undertaken by the users. The developer and users should work together to come up with "release notes" that are additions to the documentation and contain information on what is being updated or changed with each release. The testing plan should be modified with each release to make sure the new versions of the software are tested completely.
This entire process will take careful planning, quite a bit of time and a dedication to making the software work. But, in the end, the entire organization will be stronger because of this ability to automatically execute trades without human intervention. The traders can focus more energy on creating systems that produce profits and less time worrying about the task of executing trades with the FCM. Also, if designed properly, additional FCMs could easily be supported giving the organization a greater ability to service their clients.