Skip to content

Tutorial 116 | Restarting a program at specific intervals

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:

Throw elsystem.RecalculateException.Create("Refresh");

Tutorial 116 applied to multiple charts
Tutorial 116 applied to multiple charts

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 initialization 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 re-fires, I explain this in the video below.

The EasyLanguage DateTime class used in this tutorial defines the structure for an object that provides information about the system date and time. It is not be confused with the EasyLanguage datetime, a double precision decimal value that represents the combination of a Julian Date and time using the standard Window Date format (i.e. day.time).

The program is ‘hard coded’ to issue the RecalculateException 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 );

Other methods of the DateTime class include:
  • AddDays(nDays)
  • AddHours(nHours)
  • AddMinutes(nMinutes)
  • AddMonths(nMonths)
  • AddSeconds(nSeconds)
  • AddWeeks(nWeeks)
  • AddYears(nYears)

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:

pl
When the tutorial program is initially applied to a chart

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:

pl2
After the program has fired for the for the first time

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:

pl3
After the program has fired for the second time

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:

pl4
After the program has fired for the third time

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.

tutorial116-eurusd-9s-1day-interval
Tutorial 116 applied to a 9s EURUSD chart. The interval is set at one day.

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 

Downloads

The program has been modified from that which was demonstrated in the video. The initialization section has been changed from the method override void InitializeComponent( ) to use a once statement. The functionality remains the same.

Download for Gold Pass members

If you are a Gold Pass member you can download the tutorial ELD file below, please make sure that you are logged in with your Gold Pass user name and password.
This content is for members only.

Tutorial 116 download

Tutorial 116 is available for IMMEDIATE download for $19.95 by clicking the ‘add to cart’ button. After download the program can be opened, you will be able to see the program code and modify it if you wish. After purchase you will be redirected to a download page, so don’t close the browser.

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 higher (including version 10), 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.