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 [email protected], "ozzyapeman" <zoopf...@...> wrote:
>
> Typo correction in the If block:
>
> YearStr2 = NumToStr(YearNum2);
>
> But it still does not work.
>
>
> --- In [email protected], "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 [email protected], "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: [email protected]
> > >   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!
> > >
> >
>

Reply via email to