PureBytes Links
Trading Reference Links
|
Okay. This finally works!
Sorry for thinking out loud on the group, but maybe someone else can use this, if you ever want a simple way to increment dates:
BegISdate = 1031201;
EndISdate = 1090201;
StepIS = 100;
for ( X = BegISDate; X <= EndISdate; X = X + StepIS )
{
Xstr = NumToStr( X,1.0 );
YearStr = StrLeft( Xstr, 3 );
YearNum = StrToNum(YearStr);
MonthDayStr = StrRight( Xstr, 4 );
if ( MonthDayStr == "1301" )
{
YearNum2 = YearNum + 1;
YearStr2 = NumToStr(YearNum2,1.0);
X = StrToNum(YearStr2 + "0101");
Xstr = NumToStr(X,1.0);
}
printf(Xstr + "\n");
}
--- In amibroker@xxxxxxxxxxxxxxx, "ozzyapeman" <zoopfree@xxx> wrote: > > Typo correction in the If block: > > YearStr2 = NumToStr(YearNum2); > > But it still does not work. > > > --- In amibroker@xxxxxxxxxxxxxxx, "ozzyapeman" zoopfree@ wrote: > > > > Thanks Steve and Herman. I have been looking at BarIndex wrt your > > suggestions, and don't seem to understand it. Maybe I'm just retarded > > (...very possible. Heh). > > > > So instead, I've gone down the string conversion/parser route. This > > route makes sense to me. The below simplified code should do the > trick. > > But of course it doesn't. It's rare that my first crack at coding > > something ever works. > > > > This is a very simple parser to roll over the month-day of "1301" to > > "0101" and increment the Year by one. I output to the interpretation > > window for debugging. > > > > For some reason, I am getting some mysterious decimal places in the > > output, despite my formatting of the string. And I think it is the > > decimals that are screwing up the parser. > > > > Anyone have any insights as to why the below code does not work > > correctly? > > > > > > BegISdate = 1031201; > > EndISdate = 1090201; > > StepIS = 100; > > > > > > for ( X = BegISDate; X <= EndISdate; X = X + StepIS ) > > { > > > > Xstr = NumToStr( round(X) ); > > > > YearStr = StrLeft( Xstr, 3 ); > > YearNum = StrToNum(YearStr); > > > > MonthDayStr = StrRight( Xstr, 4 ); > > > > > > if ( MonthDayStr == "1301" ) > > { > > YearNum2 = YearNum + 1; > > > > YearStr2 = StrToNum(YearNum2); > > > > Xstr = StrReplace(Xstr,"1301", "0101"); > > Xstr = StrReplace(Xstr,YearStr, YearStr2); > > } > > > > printf(Xstr+"%.0f\n"); > > > > } > > > > > > > > > > > > --- In amibroker@xxxxxxxxxxxxxxx, "Steve Dugas" sjdugas@ wrote: > > > > > > I would think you could associate your dates to BarIndex() and > > increment that by 100, something like... > > > > > > BegISbar = Valuewhen( DateNum() == BegISdate, BarIndex() ); > > > EndISbar = Valuewhen( DateNum() == EndISdate, BarIndex() ); > > > ... > > > for (FromISbarNum = BegISbar; FromISbarNum <= EndISbar; FromISbarNum > = > > FromISbarNum + StepIS) > > > > > > ----- Original Message ----- > > > From: ozzyapeman > > > To: amibroker@xxxxxxxxxxxxxxx > > > Sent: Tuesday, May 12, 2009 8:18 PM > > > Subject: [amibroker] How to increment dates in a for loop? > > > > > > > > > > > > > > > Hello, hoping someone can point out a good method for incrementing > > dates. I am currently trying to build a basic Walk-Forward engine that > > does an Optimization on In-Sample (IS) data using one formula, > followed > > by an Optimization on Out-Of-Sample (OOS) data using a second formula. > > > > > > This is different than AB's built-in WF engine, which performs an > > Optimization, followed by a Backtest using only one formula. > > > > > > Anyway, I am currently stuck right at the beginning, trying to > > figure out a sensible way to increment dates. This is what I have so > > far: > > > > > > // datenum format: 10000 * (year - 1900) + 100 * month + day, > > > // so 2001-12-31 becomes 1011231 and 1995-12-31 becomes 951231 > > > > > > BegISdate = 1031201; > > > EndISdate = 1090201; > > > StepIS = 100; > > > > > > BegOOSdate = 1050101; > > > EndOOSdate = 1090301; > > > StepOOS = 100; > > > > > > Formula1 = "F:\\formula1.afl"; > > > Formula2 = "F:\\formula2.afl"; > > > Database = "F:\\AB Databases\\MyDB"; > > > Settings = "F:\\My Settings.ABS"; > > > > > > > > > for (FromISdateNum = BegISDate; FromISdateNum <= EndISdate; > > FromISdateNum = FromISdateNum + StepIS) > > > { > > > > > > AB = CreateObject("Broker.Application"); > > > > > > // Etc. ......... > > > > > > Now the above won't exactly work because simply adding 100 to a > > datenum will not allow the datenum to correctly roll over from > December > > to January. For example, incrementing 1031201 by 100 yields 1031301 > > instead of 1040101. > > > > > > I know I can first convert the datenum to a string, then build a > > parser that splits the datenum apart and analyzes the last four > digits, > > converting 1301 to 0101, then reconstitute the string and reconvert to > a > > datenum again. But that all feels rather convoluted. > > > > > > Is there an easier way to increment dates in AFL? I've searched > the > > help manual and can't seem to find anything. What if I first converted > > to DateTime format? Is there an easy way to step through that format > > month by month? > > > > > > Any pointers much appreciated. > > > > > > And when I complete the WF Opt-Opt engine, I will be happy to post > > it here, in case anyone else has a need for it. > > > > > > Thanks! > > > > > >
__._,_.___
**** IMPORTANT PLEASE READ ****
This group is for the discussion between users only.
This is *NOT* technical support channel.
TO GET TECHNICAL SUPPORT send an e-mail directly to
SUPPORT {at} amibroker.com
TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
http://www.amibroker.com/feedback/
(submissions sent via other channels won't be considered)
For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/
__,_._,___
|