Issuing a RecalculateException at specific intervals
A Gold Pass member asked me how to force a re-calculation of a number of charts at specific intervals. This tutorial uses some of the techniques from tutorial 115, in particular the use of the Timer to issue a RecalculateException at a specific time and then at set intervals after that.
One way to restart a program is to issue a RecalculateException using the following syntax:
One of the issues to address is that after the RecalculateException the program is reloaded with the alarm datetime that was a original input. Since this alarm has been fired, we know that this datetime is now in the past. I address this problem in the InitializeComponent part of the program by testing whether the alarm time is in the future or the past. If it is in the past I add the interval (i.e. the time interval that we want the alarm to re-fire the RecalculateException) and test the alarm time again. If it is still in the past I add the interval again and retest, I keep doing this until the alarm is in the future. The program then waits until this datetime is reached and then refires, I explain this in the video below.
The program is ‘hard coded’to issue the RecalcException every day, however the syntax can be easily modified. Line 37 for the program is as follows:
NewAlarmDT.AddDays( 1 );
if, for example, you wanted to issue the recalculation every 5 minutes, you would change line 37 to:
NewAlarmDT.AddMinutes( 5 );
If we modify the program so it is set to a 2 minute interval using: NewAlarmDT.AddMinutes( 1 ); and the alarm is set to. When it first applied to the chart we get:
i.e. the program was applied to the chart at 3:25:27 and the first alarm was set at 3:30:45.
After the first alarm is fired at 3:30:45, the print log is as follows:
The alarm input remains at 3:30:45 BUT we add two minutes to the alarm object which is now set to go off at 3:32:45.
After the second alarm is fired at 3:32:45, the print log is as follows:
The alarm input remains at 3:30:45 BUT we add two minutes to the alarm object so it becomes 3:32:45. However this is still earlier than the current time to we add another 2 minutes so the alarm is set to go off at 3:34:45.
After the third alarm at 3:34:45, the print log reads:
This time the program adds 2 minutes to the NewAlarmDT object so that the alarm time becomes 3:36:45.
The program continues in this manner.
The program is available FREE to Gold Pass members and for download for a small fee for others.
TradeStation EasyLanguage coding lessons
In the tutorial videos and the program comments you will learn:
- How to issue a RecalculateException
- How to create a Timer object
- Working with DateTime objects
- Finding the number of milliseconds in a timespan
- Setting up recurring alarms with the timer
- The use of a namespace (Using Elsystem; ) so that classes, methods, properties, and events can be referenced without the namespace.name as an explicit qualifier
Please see the video below for more information.
Inputs for _Tutorial116-TimerDevRestart
Input: String AlarmDT( “10/04/2016 03:05:45 PM” ); // The date and time of the first alarm as a string
This string is ‘parsed’ into a DateTime object using the following syntax:
NewAlarmDT = DateTime.Parse( AlarmDT ); // Parses the string stored in AlarmDT to create NewAlarmDT, a datetime object
Code for Gold Pass members
Tutorial 116 download
The download ELD includes _Tutorial116-timerdevrestart an EasyLanguage show me study
Note: The program name begin with an underscore, so it will be towards the start of the list if you sort alphabetically.
Tutorial 116 was developed for TradeStation 9.5 (update 15) and, unfortunately, will not work with MultiCharts.
Video demonstration of tutorial 116
If you notice any errors or have comments or questions about the tutorial, please email me.
THESE INDICATORS, SHOW ME STUDIES, STRATEGIES AND OTHER PROGRAMS HAVE BEEN INCLUDED SOLELY FOR EDUCATIONAL PURPOSES.
TO THE BEST OF MARKPLEX CORPORATION’S KNOWLEDGE, ALL OF THE INFORMATION ON THIS PAGE IS CORRECT, AND IT IS PROVIDED IN THE HOPE THAT IT WILL BE USEFUL. HOWEVER, MARKPLEX CORPORATION ASSUMES NO LIABILITY FOR ANY DAMAGES, DIRECT OR OTHERWISE, RESULTING FROM THE USE OF THIS INFORMATION AND/OR PROGRAM(S) DESCRIBED, AND NO WARRANTY IS MADE REGARDING ITS ACCURACY OR COMPLETENESS. USE OF THIS INFORMATION AND/OR PROGRAMS DESCRIBED IS AT YOUR OWN RISK.
ANY EASYLANGUAGE OR POWERLANGUAGE TRADING STRATEGIES, SIGNALS, STUDIES, INDICATORS, SHOWME STUDIES, PAINTBAR STUDIES, PROBABILITYMAP STUDIES, ACTIVITYBAR STUDIES, FUNCTIONS (AND PARTS THEREOF) AND ASSOCIATED TECHNIQUES REFERRED TO, INCLUDED IN OR ATTACHED TO THIS TUTORIAL OR PROGRAM DESCRIPTION ARE EXAMPLES ONLY, AND HAVE BEEN INCLUDED SOLELY FOR EDUCATIONAL PURPOSES. MARKPLEX CORPORATION. DOES NOT RECOMMEND THAT YOU USE ANY SUCH TRADING STRATEGIES, SIGNALS, STUDIES, INDICATORS, SHOWME STUDIES, PAINTBAR STUDIES, PROBABILITYMAP STUDIES, ACTIVITYBAR STUDIES, FUNCTIONS (OR ANY PARTS THEREOF) OR TECHNIQUES. THE USE OF ANY SUCH TRADING STRATEGIES, SIGNALS, STUDIES, INDICATORS, SHOWME STUDIES, PAINTBAR STUDIES, PROBABILITYMAP STUDIES, ACTIVITYBAR STUDIES, FUNCTIONS AND TECHNIQUES DOES NOT GUARANTEE THAT YOU WILL MAKE PROFITS, INCREASE PROFITS, OR MINIMIZE LOSSES.