Value of X at certain time (easy language)

belflan

Experienced member
Messages
1,477
Likes
27
I'm trying to capture the value of instrument at a certain time of day, and then compare it to its current value. I was thinking;

IF ( VALUEofX) < ( VALUEofX at time 1400) then begin;

but the computer said no..
 
I'm trying to capture the value of instrument at a certain time of day, and then compare it to its current value. I was thinking;

IF ( VALUEofX) < ( VALUEofX at time 1400) then begin;

but the computer said no..

Belflan
I would advise you to use Global Variables (GV). They are extremely powerful and allow you to store and pass values across windows and radar screens, including between symbols and timeframes. You can find a document on global variables on the TS support sites.

The pre-requisite is to have a copy of globalvariable.dll sitting in the program directory where you have installed Tradestation. Again copies of this file are available on the TS support site and I believe there are copies floating around T2W.

The code below is a simple example to illustrate how you can pick up the value (in this case the closing price) from 1200 and compare it to the current bar. This example was created after the market closed, so I also included yesterday's date as a filter. The first if statement is creating a global variable called 1200_close and storing the closing price when the time is 1200.

The second if statement compares for each bar (provided we have passed 1200 hours, the close of that bar and the contents of the GV. If the current close is larger it plots the result on the chart and also sends a print statement out to the Easylanguage Output bar, which is useful when you are developing code.

Now you could replace the date filter with current date and you could also make the name of the GV dynamic. For example you can include the symbol name automatically, which is useful if you want to do calculations based on data from several symbols or indicators.

Anyway this should start you off

Charlton



Vars:
initialise_GV(0);

if time = 1200 and date = ELDate(10,29,2009) then
initialise_GV =gvsetnamedint("1200_close", close) ;

if close > gvgetnamedint("1200_close",2) and date = ELDate(10,29,2009) and time > 1200 then begin
plot1(close - gvgetnamedint("1200_close",0));
print(time, " Time 1200 value ", gvgetnamedint("1200_close",2 ), " current value ", close, " Diff ",(close - gvgetnamedint("1200_close",0)) );
end


//replace ELDate(10,29,2009) with ELDate(CurrentDate) - to do the test for the current date

//Could replace the name of the GV by one which contains the symbol being processed e.g. gvsetnamedint(getsymbolname + "_1200_close) would create
//If the symbol was, say IBM, the GV would then be called IBM_1200_close


Here is what the print output looks like (this is running on symbol $INDU):

1230.00 Time 1200 value 9872.00 current value 9898.80 Diff 26.80
1300.00 Time 1200 value 9872.00 current value 9914.74 Diff 42.74
1330.00 Time 1200 value 9872.00 current value 9919.28 Diff 47.28
1400.00 Time 1200 value 9872.00 current value 9928.57 Diff 56.57
1430.00 Time 1200 value 9872.00 current value 9928.27 Diff 56.27
1500.00 Time 1200 value 9872.00 current value 9957.29 Diff 85.29
1530.00 Time 1200 value 9872.00 current value 9950.64 Diff 78.64
1600.00 Time 1200 value 9872.00 current value 9962.88 Diff 90.88
 
thanks for taking the time to do this

I didn't think it would be this complicated,
really appreciate this

belflan
 
Charlton,

I've adapted the above code and it looks like it will do what I need it to do on a going forward bases.

Could it be adapted in some way so that the idea could be back tested? Do you require more information on what I'm trying to do to give advice on this?

Thanks again
belflan

To try it out in back-test mode you should be able to remove the part that says

and date = ELDate(10,29,2009)

I put that in there so I could limit it to looking at yesterday's data. If that was removed then the code should go through each day in your back-test data range and first pick up the value at 1200 hours. In the second if statement it will look at each bar (provided it is after 1200 hours) and check its value against the 1200 hrs value and then do whatever you want it to do if it is larger.

I guess that you will want to place an order if the condition is met, so in the second if statement you would have a line something like:

Buy ("condition A") value2 contracts next bar at value3 limit;

Here "condition A" is text that you attach to the order so you can identify what caused it. You can also refer to the same order e.g. if you wanted to create an equivalent sell order.

Value2 and value3 are simply variables that you could calculate so the number of contracts or the limit price or stop price etc were dynamically calculated. If you wanted fixed values then just put those in.

When you want to back-test and actually generate orders in your SIM account then this code needs to be saved as a strategy rather than an indicator. If you don't want to generate orders but merely show on a chart where you would buy/sell then you can incorproate the code in an indicator and use a plot statement to put the buy/sell points on a chart, or you could save it as a paintbar so that it colours the bars where the transactions would take place.

Or you can use my example of print statements to show where transactions would take place. The advantage of a strategy is that TS will give you strategy reports that show the performance of the strategy in back-test.

Charlton
 
Top