Sent: Thursday, May 14, 2009 12:36
AM
Subject: [amibroker] Re: How to pass
variables from AFL to embedded JScript?
Bumping thread.
Can anyone point out why the
ActiveDocument switch in the simple two lines below, generates a
syntax error? I've used it many times before in JScript. But now that I am
staying within AFL for OLE, that switch no longer works.
I can't
find anything in the manual that says the below should be any
different.
AB = CreateObject("Broker.Application");
AB.ActiveDocument.Name = "EURUSD";
--- In
amibroker@xxxxxxxxxxxxxxx, "ozzyapeman"
<zoopfree@xxx> wrote:
>
> I've eliminated JScript and am
instead calling objects from within AFL.
> But now I am running into
a syntax error on what used to be a routine
> call in JScript:
ActiveDocument.Name
>
> I get a non specific syntax error
when trying to set
> ActiveDocument.Name, as below. Anyone know why?
Is that object treated
> differently in AFL compared to JScript? I
can set it fine in JScript
> with the same code below, just
switching the AB object to an ActiveX.
>
>
> Database
= "F:\\AB Databases\\MyDB";
>
> AB =
CreateObject("Broker.Application");
>
> AA =
AB.Analysis;
>
> AB.LoadDatabase( Database );
>
>
AB.ActiveDocument.Name = "EURUSD";
>
>
>
>
> --- In
amibroker@xxxxxxxxxxxxxxx, "ozzyapeman" zoopfree@
wrote:
> >
> > Thanks for the detailed explanations
Tomasz. I will rethink my
> approach on this.
> >
>
> Herman - Bruce beat me to it. I indeed use his code to check status
of
> the WF engine. It has proven very useful.
> >
>
>
> > --- In
amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" groups@
wrote:
> > >
> > > Yes I agree, of course there
are always few things that make scripts
> handy, and
> >
> my approach is to leave doors open in the application, however,
I
> always
> > > verbally discourage certain techniques,
unless someone is very well
> aware of consequences
> >
> and issues behind them.
> > >
> > > Best
regards,
> > > Tomasz Janeczko
> > >
amibroker.com> >
> ----- Original Message -----
> > > From: bruce1r
>
> > To:
amibroker@xxxxxxxxxxxxxxx> > > Sent:
Tuesday, May 12, 2009 3:10 PM
> > > Subject: [amibroker] Re:
How to pass variables from AFL to
> embedded JScript?
> >
>
> > >
> > >
> > >
> >
> Tomasz -
> > >
> > > Just to make note of the
some exceptions to your note about lack
> of reasons to run
JScript/_vbscript_, there are still a few non-mainstream
> things that
it makes possible. Just to list a few -
> > >
> >
> 1.. Manipulation of COM arrays that allows a very fast way to
>
get AFL arrays into and out of Excel.
> > >
> > >
2.. Detecting the closing of a COM server via the On Error logic
>
in _vbscript_. Users have a bad habit of closing them and it can't
be
> detected and handled in AFL.
> > > 3.. Getting
lists of files and directories.
> > > 4.. Sorting CSV lists in
JScript.
> > > etc....
> > >
> > > I
don't like script much either, but I'm glad that you originally
>
did it. There are other ways of doing these and other tasks that I
>
usually prefer (DLL, COM DLL, etc.). But it is kind of like having
a
> carpenter having a hand plane in his toolbox. Power tools are
better,
> but on the rare occasion when a hand plane can be used,
you are glad
> that it is handy and that you have it.
> >
>
> > > -- BruceR
> > >
> >
>
> > > --- In
amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko"
<groups@>
> wrote:
> > > >
> > >
> I should add that embedding JScript/_vbscript_ in formula is
old
> technology and was intended
> > > > as a way to
support looping in very old and dark ages when there
> was no native
looping in
> > > > AFL. Now AFL allows everything that
JScript/_vbscript_ and more
> plus it is 10x faster
> > >
> and there is absolutely NO reason to use JScript/_vbscript_
>
anymore. It is left here ONLY
> > > > to allow run legacy
formulas.
> > > > No new code should use
JScript/_vbscript_.
> > > >
> > > > Second
thing is that OLE AUTOMATION is intended to be used only
> FROM
OUTSIDE
> > > > of AmiBroker. Using it within formulas from
inside AB, may
> inevitably lead to "chicken and egg" (circular
reference) problem
> > > > and is not supported.
>
> > > It is important that OLE automation was always thought
by
> Microsoft as a method of controlling ONE application
>
> > > from ANOTHER application.
> > > >
>
> > > Best regards,
> > > > Tomasz
Janeczko
> > > >
amibroker.com> > > > ----- Original
Message -----
> > > > From: Tomasz Janeczko
> >
> > To:
amibroker@xxxxxxxxxxxxxxx> > > > Sent:
Tuesday, May 12, 2009 9:41 AM
> > > > Subject: Re:
[amibroker] Re: How to pass variables from AFL to
> embedded
JScript?
> > > >
> > > >
> > >
>
> > > >
> > > >
> > > >
Hello,
> > > >
> > > > No you are not
allowed to run scripting host code within
> conditional
_expression_.
> > > >
> > > > The Microsoft
SCRIPTING host is INDEPENDENT, i.e. it executes on
> its
own,
> > > > in parallel and its "global" parts are simply
extracted from the
> formula and run unconditionally
> >
> > before actual AFL execution.
> > > >
> >
> > If you need to call something in script conditionally you
have
> two choices:
> > > > a) either write condition
in JScript/_vbscript_
> > > > OR
> > > > b)
write a FUNCTION in JScript/_vbscript_ and call that function
>
conditionally from AFL level
> > > > as shown
below:
> > > >
> > > >
> > >
> EnableScript( "jscript" );
> > > > <%
> >
> > // NO global code, only function definition
> > >
>
> > > > function DoTheJob()
> > > >
{
> > > > AB = new ActiveXObject( "Broker.Application"
);
> > > > AA = AB.Analysis;
> > > >
}
> > > >
> > > > %>
> > >
>
> > > > Test = 4;
> > > > if( Test == 4
)
> > > > {
> > > > scr =
GetScriptObject();
> > > > scr.DoTheJob();
> >
> > }
> > > >
> > > > Best
regards,
> > > > Tomasz Janeczko
> > > >
amibroker.com> >
> > ----- Original Message -----
> > > > From:
ozzyapeman
> > > > To:
amibroker@xxxxxxxxxxxxxxx> > > > Sent:
Tuesday, May 12, 2009 7:36 AM
> > > > Subject: [amibroker]
Re: How to pass variables from AFL to
> embedded JScript?
>
> > >
> > > >
> > > > Okay, this is
bizarre. I am testing out some embedded JScript
> for a related
application to what I posted earlier. This one is not
> happening
within the AA, but is nonetheless still inside an AFL.
> > >
>
> > > > The following simple code is fine, and does
not generate a
> syntax error:
> > > >
> >
> > //Test = 4;
> > > >
> > > > //if (
Test == 4 )
> > > > //{
> > > >
> >
> > EnableScript( "jscript" );
> > > > <%
>
> > >
> > > > AB = new ActiveXObject(
"Broker.Application" );
> > > > AA = AB.Analysis;
>
> > >
> > > > %>
> > > >
>
> > > //}
> > > >
> > > >
>
> > > However, if I uncomment all the "//" I get a syntax
error.
> > > >
> > > > Are we not allowed to
call a JScript inside an IF block? If not,
> why the heck not? And
if we are allowed, why would it be generating a
> syntax error in
this simple case?
> > > >
> > > > The error
I get is on the "<%" --> probably missing semi colon
> on
previous line.
> > > >
> > > > But the semi
colon is clearly there.
> > > >
> > > >
Anyone's two cents appreciated.
> > > >
> > >
>
> > > >
> > > > --- In
amibroker@xxxxxxxxxxxxxxx, "ozzyapeman" zoopfree@
wrote:
> > > > >
> > > > > Thanks for
that tip.
> > > > >
> > > > > Guess I
will have to write a WF type routine in JScript and
> call each
optimize individually, from outside AA.
> > > >
>
> > > > >
> > > > > --- In
amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko"
groups@
> wrote:
> > > > > >
> > >
> > > During any AA operation in progress, you must not
>
> > > > > use Analysis object to start another AA
operation
> > > > > > (because it is infinite
nesting)
> > > > > >
> > > > > >
Analysis object may only be used from OUTSIDE
> > > > >
> of AA.
> > > > > >
> > > > >
> To run "suboptimization" use THE ONLY supported
> > >
> > > way, i.e. Optimizer API (see optimizer.html file in the
ADK
> subfolder).
> > > > > >
> > >
> > > Best regards,
> > > > > > Tomasz
Janeczko
> > > > > >
amibroker.com> > > > > > -----
Original Message -----
> > > > > > From: "ozzyapeman"
zoopfree@
> > > > > > To:
amibroker@xxxxxxxxxxxxxxx> > > > >
> Sent: Tuesday, May 12, 2009 3:11 AM
> > > > > >
Subject: [amibroker] Re: How to pass variables from AFL to
>
embedded JScript?
> > > > > >
> > > >
> >
> > > > > > > And if there is no way to
pass variables directly from AFL
> to JScript,
> > >
> > > > can I first fput the AFL vars to some kind of log
file,
> and then is
> > > > > > > there a
command in JScript that can pull those vars to use
> for the
>
> > > > > > Dates?
> > > > > >
>
> > > > > > > I can also use _vbscript_, if
that makes any difference. I'm
> just not all
> > > >
> > > that knowledgeable about either J or _vbscript_s.
>
> > > > > >
> > > > > >
>
> > > > > > >
> > > > >
> > --- In
amibroker@xxxxxxxxxxxxxxx, "ozzyapeman"
<zoopfree@>
> wrote:
> > > > > >
>>
> > > > > > >> Hello, hoping someone
can help out here. During a
> Walk-Forward test, I
> > >
> > > >> am trying to pass From and To dates from the WF
engine
> into an
> > > > > > >
embedded
> > > > > > >> JScript. I essentially
want to do a "sub-optimization" as
> part of the
> > >
> > > >> backtest portion of the WF test. However, it seems
that I
> cannot pass
> > > > > > >>
variables from the AFL to the JScript.
> > > > > >
>>
> > > > > > >> Is there any way to
pass the From and To dates into the
> JScript? Below
> >
> > > > >> is what I have. It generates an 'undefined
source' error
> for these
> > > > > > >>
lines:
> > > > > > >>
> > > >
> > >>
> > > > > > >>
AA.RangeFromDate = FromDateStr;
> > > > > > >>
AA.RangeToDate = ToDateStr;
> > > > > >
>>
> > > > > > >>
> > > >
> > >> Here is the AFL with embedded JScript:
> >
> > > > >>
> > > > > > >>
FromDateNum = Status( "rangefromdate" );
> > > > > >
>> ToDateNum = Status( "rangetodate" );
> > > > >
> >>
> > > > > > >> FromDate =
DateTimeConvert( 2, FromDateNum );
> > > > > >
>> ToDate = DateTimeConvert( 2, ToDateNum );
> > > >
> > >>
> > > > > > >> FromDateStr =
DateTimeToStr( FromDate );
> > > > > > >>
ToDateStr = DateTimeToStr( ToDate );
> > > > > >
>>
> > > > > > >>
> > > >
> > >> EnableScript( "jscript" );
> > > > >
> >> <%
> > > > > > >>
> >
> > > > >> Formula = "F:\\SomeFormula.afl";
> >
> > > > >> Database = "F:\\AB Databases\\MyIB";
>
> > > > > >> Settings = "F:\\Some
Settings.ABS";
> > > > > > >>
> > >
> > > >> AB = new ActiveXObject( "Broker.Application"
);
> > > > > > >> AA = AB.Analysis;
>
> > > > > >>
> > > > > >
>> AB.LoadDatabase( Database );
> > > > > >
>>
AB.ActiveDocument.Name = "EURUSD";
> > >
> > > >> AA.LoadFormula( Formula );
> > > >
> > >> AA.LoadSettings( Settings);
> > > > >
> >> AA.ApplyTo = 1;
> > > > > > >>
AA.RangeMode = 3;
> > > > > > >>
AA.RangeFromDate = FromDateStr; // * ERROR *
> > > > >
> >> AA.RangeToDate = ToDateStr;
> > > > > >
>> AA.Optimize( 0 );
> > > > > >
>>
> > > > > > >> AA.Export (
"F:\\TestReport1.html" );
> > > > > >
>>
> > > > > > >> %>
> > >
> > > >>
> > > > > > >
> >
> > > > >
> > > > > > >
>
> > > > > >
> > > > > > >
------------------------------------
> > > > > >
>
> > > > > > > **** 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/> > > >
> > >
> > > > > > > Yahoo! Groups
Links
> > > > > > >
> > > > >
> >
> > > > > > >
> > > >
> >
> > > > >
> > > >
> >
>
> >
>