A_TimeAddSub_s revisited.

Questions about MultiCharts and user contributed studies.
bowlesj3
Posts: 2134
Joined: 21 Jul 2007
Has thanked: 209 times
Been thanked: 422 times

A_TimeAddSub_s revisited.

Postby bowlesj3 » 06 Jul 2009

I had just posted a problem I was having with this command set.
NewTime_s = DateTime2ELTime_s(ELTimeToDateTime_s(Time_s) - 60);
It was not changing the NewTime_s at all. I deleted that prior post and replaced it with this one when I remembered the function I wrote below back in January. It has the proper use of the above command set. This function is a lot easier to remember and it is worth studying since it takes a while to figure out how the above command is to be used properly (at least it took me a while).

I just checked. It turns out the study I have that was using the above command instead of the function below is properly using the "OneMinute" value of OneMinute(1/1440), {1 divided by the number of minutes in a day}. That is the problem with the above command. It is too complex to remember for occasional use every 1 or 2 years. The function immediately below spells it out for you (for documentation purposes at least). Otherwise you can just extract what you need from the function below.

Code: Select all


{A_TimeAddSub_s - Written by John Bowles}

{
Sample Calls
Result_s = A_TimeAddSub_s(Time_s, "A", 1, "S"); {Time_s add 1 second}
Result_s = A_TimeAddSub_s(Time_s, "A", 5, "M"); {Time_s add 5 minutes}
Result_s = A_TimeAddSub_s(Time_s, "A", 3, "H"); {Time_s add 3 hours}
Result_s = A_TimeAddSub_s(Time_s, "S", 3, "S"); {Time_s subtract 3 seconds}
Result_s = A_TimeAddSub_s(Time_s, "S", 3, "M"); {Time_s subtract 3 minutes}
Result_s = A_TimeAddSub_s(Time_s, "S", 2, "H"); {Time_s subtract 2 hours}
}
{
This is a test caller you can use to learn to trust it. Just copy the actual code out to a study, compile it and test it on a seconds chart.
inputs: Units(3);
Print( File("C:\A_DateTimeLearningTests1.txt"),
" Time_s", " " ,
Time_s, " --- " ,

" add ", NumToStr(units,0), " Sec", " " ,
A_TimeAddSub_s(Time_s,"A", units, "S") , " -" ,

" add ", NumToStr(units,0), " min", " " ,
A_TimeAddSub_s(Time_s,"A", units, "M") , " -" ,

" add ", NumToStr(units,0), " hour", " " ,
A_TimeAddSub_s(Time_s,"A", units, "H") , " -" ,

" sub ", NumToStr(units,0), " Sec", " " ,
A_TimeAddSub_s(Time_s,"S", units, "S") , " -" ,

" sub ", NumToStr(units,0), " min", " " ,
A_TimeAddSub_s(Time_s,"S", units, "M") , " -" ,

" sub ", NumToStr(units,0), " hour", " " ,
A_TimeAddSub_s(Time_s,"S", units, "H") , " " ,

" ");
}



inputs:
TimeIn(NumericSimple),
AddSub(StringSimple),
UnitsIn(NumericSimple),
UnitsToAdd(StringSimple);

variables:
AddSubAmt(0),
OneHour(1/24), {1 divided by the number of hours in a day}
OneMinute(1/1440), {1 divided by the number of minutes in a day}
OneSecond(1/86400); {1 divided by the number of seconds in a day}

if AddSub = "A" then
AddSubAmt = 1;
if AddSub = "S" then
AddSubAmt = -1;

if AddSubAmt = 0 then
A_TimeAddSub_s = 0
else
begin
if UnitsToAdd = "S" then
A_TimeAddSub_s = DateTime2ELTime_s(ELTimeToDateTime_s(TimeIn) + ((UnitsIn * OneSecond) * AddSubAmt));
if UnitsToAdd = "M" then
A_TimeAddSub_s = DateTime2ELTime_s(ELTimeToDateTime_s(TimeIn) + ((UnitsIn * OneMinute) * AddSubAmt));
if UnitsToAdd = "H" then
A_TimeAddSub_s = DateTime2ELTime_s(ELTimeToDateTime_s(TimeIn) + ((UnitsIn * OneHour) * AddSubAmt));
end;



Last edited by bowlesj3 on 07 Jul 2009, edited 10 times in total.

User avatar
TJ
Posts: 7379
Joined: 29 Aug 2006
Location: Global Citizen
Has thanked: 996 times
Been thanked: 2108 times

Postby TJ » 06 Jul 2009

thanks for the useful function.

bowlesj3
Posts: 2134
Joined: 21 Jul 2007
Has thanked: 209 times
Been thanked: 422 times

Postby bowlesj3 » 06 Jul 2009

No problem TJ. This is the type of stuff that should be shared.


Return to “MultiCharts”