PureBytes Links
Trading Reference Links
|
After running the built in individual optimization and exporting to a
file, you can refer to the following thread for ways to read in the
results and sort by any column:
http://finance.groups.yahoo.com/group/amibroker/message/128531
Mike
--- In amibroker@xxxxxxxxxxxxxxx, "Steve Dugas" <sjdugas@xxx> wrote:
>
> Hi TJ - I sent a couple of messages to support on this topic maybe
3-4 weeks ago and never received any reply. Sorry, I have deleted them
now so can't give you a ticket number. The only problem with this
method is that I don't see any way to sort the results by ticker. The
first column shows the ticker symbol but it is preceded by the opt
step and so won't sort by ticker. I tried to get around this by using
the CBT to add a column with *only* the ticker name but that doesn't
sort properly either. Could you please give me your thoughts on this,
whether it is a sorting bug or whether there is any way to work around
it, etc? Thank you very much.
>
> Steve
> ----- Original Message -----
> From: Tomasz Janeczko
> To: amibroker@xxxxxxxxxxxxxxx
> Sent: Wednesday, October 29, 2008 5:22 AM
> Subject: Re: [amibroker] Re: Auto optimize all stocks
>
>
> If you are using JScript inside AFL (by the way I don't see the
reason to use JScript anymore since
> looping, functions and all that stuff is in AFL), and call any
external ActiveX - they may change
> the current working directory for current process.
>
> Also individual optimization for each symbol is built in feature -
don't see the reason to make it hard way as
> you do. It is called individual optimization and available via
Optimize( 1 )
>
> see http://www.amibroker.com/guide/objects.html#Analysis
>
> Analysis.Optimize(Type = 2 ); - runs optimization
> Type parameter can be one of the following values:
> 0 : portfolio backtest/optimize
> 1 : individual backtest/optimize
> 2 : old backtest/optimize
> 3 : walk-forward test (AmiBroker version 5.11.0 or higher)
>
> Best regards,
> Tomasz Janeczko
> amibroker.com
> ----- Original Message -----
> From: liberte721
> To: amibroker@xxxxxxxxxxxxxxx
> Sent: Wednesday, October 29, 2008 6:11 AM
> Subject: [amibroker] Re: Auto optimize all stocks
>
>
> Thanks for the feedback. I did a full symantec virus scan
today, and
> three different rootkit scans, and all came up with nothing
(except for
> some supposedly innocuous entries and cookies). This computer
is only
> a couple months old, and not used for much on the internet
(behind
> firewalls), so I doubt I have a virus or rootkit, but I'll keep
> checking.
>
> I use #include_once for all includes, all relative to the
> "Standard include path", which is just "Formulas\Include".
> Nothing in my script is trying to change the current working
directory
> for AmiBroker, so it must be some external program. But if
programs
> are running outside of AmiBroker, could any of them change the
current
> working directory for AmiBroker without being a virus or
rootkit? I
> don't know how windows (XP) works well enough to know, but that
would
> be a bad situation if it were possible.
>
> Over a couple years of using AmiBroker, on three different
computers,
> I have frequently seen script error messages reported relative
to the wrong
> files. But these are legitimate errors, just reported
incorrectly, which I
> deal with just by editing carefully in only making modest code
changes
> so I have a chance of figuring out what has gone wrong.
>
> I wonder if using EnableScript("jscript"); has something to do
with these
> file mixups. I am not doing any file manipulation in the
jscript code, but
> I am doing AFL file operations. I can send you my code if you
want to take
> a closer look.
>
> I will try running my script with minimal other external
programs to see
> if that helps. Thanks again.
>
> dan
>
>
> --- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <groups@>
wrote:
> >
> > The error message you get is clearly because the include can
no longer be found. Apparently you are using relative
> > paths, and something in your script or some external program
(virus?) has changed current working directory for AmiBroker.
> > I suggest deep virus and rootkit scan using different
scanners, as rootkits can hide so ordinary scanners don't detect
anything.
> >
> > Best regards,
> > Tomasz Janeczko
> > amibroker.com
> > ----- Original Message -----
> > From: liberte721
> > To: amibroker@xxxxxxxxxxxxxxx
> > Sent: Tuesday, October 28, 2008 5:18 AM
> > Subject: [amibroker] Re: Auto optimize all stocks
> >
> >
> > I've made some progress figuring out the crashes in my auto
automize jscript.
> >
> > First, I tried using the Commentary window like this:
> >
> > AB.Commentary.LoadFormula(saverFormula);
> > AB.Commentary.Apply();
> > AB.Commentary.close();
> >
> > But this had an undesirable side effect in that the
saverFormula was executed 4 times. (The first time appeared to be
using a cache of the previous version of the saverFormula, in fact.)
Why there are 4 executions, I don't know (I don't have AmiBroker open
in another window, and I start my auto-optimize script with no
AmiBroker running), and I don't see any easy way to detect when a
particular execution is one of the extras. So I gave up on that.
> >
> > So using the Backtest call as before, I added another Sleep
call after loading the formula and before the backtest, like so:
> >
> > AA.LoadFormula( saverFormula );
> > WScript.Sleep( 1000 );
> > AA.Backtest();
> > WScript.Sleep( 1000 );
> >
> > And this seems to work much more reliably. I made it through
one whole run without incident.
> >
> > On to the next crash... Gaining confidence, I was
simultaneously running a few browser windows (Firefox and IE) but I
was not using the computer otherwise, when, after 40 minutes of
running, I got the following interesting error.
> >
> > DBVOn = ParamToggle("DebugView","OFF|ON", 0);
> >
> > function T
> > ---------^
> >
> > Error 31.
> > Syntax error, expecting IDENTIFIER
> >
> > This is bizarre because this same bit of script has been
executing many thousands of times without problem. This is in my
debug.afl that is the first #include in my main afl. Here it is:
> >
> >
> >
> > ClearDBV = ParamTrigger("Clear DebugView","CLEAR DBV");
> > if( ClearDBV ) _TRACE("# DBGVIEWCLEAR");
> >
> > //traceIfScanning = Status("action") == actionBacktest;
> >
> > DBVOn = ParamToggle("DebugView","OFF|ON", 0);
> >
> > function TRACE( DBVString )
> > {
> > global DBVOn;
> > global symbol;
> > statusActionList =
"ZERO,INDICATOR,COMMENTARY,SCAN,EXPLORATION,BACKTEST / OPTIMIZE";
> > statusAction = StrExtract( statusActionList, Status( "action"
) );
> >
> > if ( DBVOn )
> > _TRACE( "# " + symbol +
> > " " + statusAction +
> > " " + DBVString
> > );
> > }
> >
> >
> > So is AmiBroker totally confused at this point? Why does it
think there is a syntax error? It's pointing at what looks like a
perfectly fine identifier even. Is it maybe looking in the wrong file?
> >
> > I believe this AB OLE interface needs to be made much more
robust before we can expect mere mortals to use it. It needs a lot
more detailed documentation as well. I find I am guessing half the
time what things are supposed to be doing.
> >
> > Thanks for any help.
> >
> >
> >
> > dan
> >
> >
> > --- In amibroker@xxxxxxxxxxxxxxx, "Daniel LaLiberte"
daniel.laliberte@ wrote:
> > >
> > > Thanks for your reply and ideas.
> > >
> > > 1. I'm not sure the delays are necessary, but adding the
first delay before
> > > the AB.documents.open call appeared to help. The second
delay was in the
> > > code that I had copied to start with, and I didn't see any
explanation why
> > > it was there. It is disturbing to think that the delays
would help,
> > > actually, because there is no amount of delay time that
would be correct all
> > > the time. There should be a way to call things safely. I
would be happy to
> > > add a busy wait loop if necessary, or a call to some
function that doesn't
> > > return until it is safe to proceed.
> > >
> > > 2. Making the problem worse might be a good strategy to
figure it out.
> > > There are many more ways things could go wrong than right,
however, so I
> > > could easily get distracted pursing the wrong things. Is
there a list of
> > > known causes of backtester failure? I doubt I have any
obscure corner
> > > cases in my afl script that cause runtime errors, e.g.
divide by zero and
> > > such, but it is possible. An "internal application error"
doesn't sound
> > > like that anyway.
> > >
> > > 3. I saw that use of the Commentary mode previously. Thanks
for reminding
> > > me. I'll try it. It would be handy if the optimizer would
run one more
> > > time after completing a run and set Status("ActionEx") ==
> > > actionExOptimizeShutdown.
> > >
> > > dan
> > >
> > > On Sat, Oct 25, 2008 at 10:27 PM, Steve Davis <_sdavis@
wrote:
> > >
> > > > Thanks for posting this. I intended to write something
like this
> > > > myself and never got around to it. Some thoughts:
> > > >
> > > > 1. Are you sure the delays are needed? I've had good luck
using AutoIt
> > > > to watch for windows to open or close.
> > > >
> > >
> > >
> > > > 2. Instead of trying to fix the problem, try to make it
happen more
> > > > often. What would happen if you never set the buy/sell
arrays? Would
> > > > this cause the backtester to fail?
> > > >
> > > > 3. The parameter save script is invoking the backtester.
There is
> > > > another way to execute general purpose afl from a script
without using
> > > > the backtester. See this message:
> > > >
http://finance.groups.yahoo.com/group/amibroker/message/131038
> > > >
> > > > Cheers,
> > > > Steve
> > > >
> > > > --- In amibroker@xxxxxxxxxxxxxxx
<amibroker%40yahoogroups.com>,
> > > > "liberte721" daniel.laliberte@
> > > > wrote:
> > > >
> > > > >
> > > > > I have been using a JScript to run the AA optimizer for
each stock in a
> > > > > list and store the optimum parameters in a file. The
script is below. I
> > > > > use a custom backtester that records the parameters that
perform the
> > > > > best so far, and after each optimization run, then I run
another script
> > > > > that saves the best parameters.
> > > > >
> > > > > This works fine in some cases and it runs through all of
a 100 stocks,
> > > > > but sometimes the application gets an error in one of a
couple different
> > > > > places. I'd like to find out why this fails sometimes
and how I can
> > > > > avoid it. More details on the failures below.
> > > > >
> > > > > Here is the custom backtester code, embedded in my afl
script.
> > > > >
> > > > >
> > > > > isOptimizeSetup = Status("ActionEx") ==
actionExOptimizeSetup;
> > > > >
> > > > > if (isOptimizeSetup)
> > > > > {
> > > > > maxObjective = -999999999;
> > > > > StaticVarSet("maxObjective", maxObjective);
> > > > > }
> > > > > else
> > > > > {
> > > > > maxObjective = StaticVarGet("maxObjective");
> > > > > }
> > > > >
> > > > >
> > > > > SetOption("UseCustomBacktestProc", True );
> > > > >
> > > > > if ( Status( "action" ) == actionPortfolio )
> > > > > {
> > > > > bo = GetBacktesterObject( );
> > > > > bo.Backtest( ); // run default backtest procedure
> > > > >
> > > > > st = bo.GetPerformanceStats(0); // get stats for all
trades
> > > > >
> > > > > // Compute Objective value to be maximized.
> > > > >
> > > > > // To minimize, maximize the negative.
> > > > > // e.g. Objective = - ( abs( 100 - X * Y ) + abs( X - Y
) );
> > > > >
> > > > > NP = st.GetValue("NetProfit");
> > > > > LTL = st.GetValue("LosersTotalLoss");
> > > > > objective = NP - sqrt(-LTL);
> > > > >
> > > > > // defaultParams is a string with all the parameter
values assigned
> > > > > by Optimize calls.
> > > > > _Trace( "max: " + maxObjective + " objective: " +
objective + "
> > > > > params: " + defaultParams);
> > > > >
> > > > > if ( objective > maxObjective )
> > > > > {
> > > > > maxObjective = objective;
> > > > > _Trace("new max: " + maxObjective + " params: " +
> > > > defaultParams );
> > > > > StaticVarSet("maxObjective", maxObjective );
> > > > > StaticVarSetText("maxParams", defaultParams);
> > > > > }
> > > > >
> > > > > // Add "objective" column.
> > > > > // REMEMBER - Set the Optimization target to "objective"
in AA
> > > > > Settings / Walk-Forward
> > > > >
> > > > > bo.AddCustomMetric( "objective", objective );
> > > > > }
> > > > >
> > > > >
> > > > > In my afl script for saving the optimum parameters I do
the following:
> > > > >
> > > > > maxParams = StaticVarGetText("maxParams");
> > > > > _Trace("Save params " + maxParams);
> > > > > saveParams(maxParams);
> > > > >
> > > > > I am leaving out a few details which should be
irrelevant. The
> > > > > saveParams function ultimately calls fputs to write the
parameters.
> > > > >
> > > > > And here is my script for running the AA Optimize and
calling the save
> > > > > script for each stock:
> > > > >
> > > > >
> > > > > // Loop through all stocks in a watchlist, or (if
negative) all stocks.
> > > > > // For each one, run the optimizer, and then run the
saverFormula, which
> > > > > should do the right thing to save parameters.
> > > > > // I use a custom backtester that remembers the optimum
set of
> > > > > parameters.
> > > > >
> > > > > database = "C:\\Program Files\\Amibroker\\IB";
> > > > > iWatchList = -1; // negative means all symbols - see
below
> > > > >
> > > > > formula = "Formulas\\Systems\\Mine\\HLMA.afl";
> > > > > saverFormula = "Formulas\\Utilities\\SaveOptParams.afl";
> > > > > settingsFile = "path to settings file";
> > > > >
> > > > > AB = new ActiveXObject( "Broker.Application" );
> > > > > AB.LoadDatabase( database );
> > > > > AB.Visible = false; // Maybe visible mode causes
problems?
> > > > > AA = AB.Analysis;
> > > > >
> > > > > Qty = AB.Stocks.Count;
> > > > > //WScript.echo("Total number of stocks: " + Qty);
> > > > >
> > > > > for ( i = 0; i < Qty; i++ )
> > > > > {
> > > > > Stk = AB.Stocks( i );
> > > > >
> > > > > if ( iWatchList < 0 ||
> > > > > ( iWatchList < 32
> > > > > ? ( Stk.WatchListBits & ( 1 << iWatchList ) )
> > > > > : ( Stk.WatchListBits2 & ( 1 << ( iWatchList - 32 ) ) )
)
> > > > > )
> > > > > {
> > > > > //WScript.echo("Optimize Stock: " + Stk.Ticker);
> > > > > WScript.Sleep( 4000 ); // without this, the script will
crash
> > > > > occasionally.
> > > > >
> > > > > try
> > > > > {
> > > > > Doc = AB.Documents.Open( Stk.Ticker );
> > > > > WScript.Sleep( 4000 ); // 4 seconds delay. Why?
> > > > >
> > > > > /* load formula from external file */
> > > > > AA.LoadFormula( formula );
> > > > >
> > > > > /* optional: load settings */
> > > > > // AA.LoadSettings( settingsFile );
> > > > >
> > > > > /* set apply to and range */
> > > > > AA.ApplyTo = 1; // use current stock
> > > > > AA.RangeMode = 2; // use last n days of quotes
> > > > > AA.RangeN = 100;
> > > > >
> > > > > /* run optimize for the portfolio, which is just one
stock
> > > > > */
> > > > > AA.Optimize( 0 ); // 0 == portfolio opt
> > > > > //AA.Export( "C:\\" + Stk.Ticker + ".csv" );
> > > > >
> > > > > AA.LoadFormula( saverFormula );
> > > > > AA.Backtest();
> > > > > }
> > > > > catch ( err )
> > > > > {
> > > > >
> > > > > }
> > > > >
> > > > > finally
> > > > >
> > > > > {
> > > > > Doc.Close();
> > > > > }
> > > > > WScript.Sleep( 1000 );
> > > > > }
> > > > > }
> > > > >
> > > > >
> > > > > Regarding the failures, the lastest failure is inside
the custom
> > > > > backtester code, on the line that says bo.Backtest().
The error message
> > > > > alert says:
> > > > >
> > > > > Error 19.
> > > > > COM method/function 'Backtest' call failed.
> > > > >
> > > > > Internal application error.
> > > > >
> > > > > Earlier, I was getting occasional errors in the jscript
on the line that
> > > > > says Doc = AB.Documents.Open( Stk.Ticker ); .
> > > > > I don't recall the error message. My stocks have not
changed and I was
> > > > > running the same script with errors occurring at
different times. I
> > > > > added the Sleep calls to maybe avoid the problem, but it
kept happening.
> > > > > I wrapped a try ... catch around the whole body of the
loop to hopefully
> > > > > continue even if an error occurs, but now I am getting
the error
> > > > > described above inside.
> > > > >
> > > > > Any suggestions appreciated.
> > > > >
> > > > > dan
> > > > > daniel.laliberte@
> > > > >
> > > >
> > > >
> > > >
> > >
> > >
> > >
> > > --
> > > Daniel LaLiberte
> > > liberte@
> > > daniel.laliberte@
> > >
> >
>
------------------------------------
**** IMPORTANT ****
This group is for the discussion between users only.
This is *NOT* technical support channel.
*********************
TO GET TECHNICAL SUPPORT from AmiBroker please send an e-mail directly to
SUPPORT {at} amibroker.com
*********************
For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/
For other support material please check also:
http://www.amibroker.com/support.html
*********************************
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/amibroker/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/amibroker/join
(Yahoo! ID required)
<*> To change settings via email:
mailto:amibroker-digest@xxxxxxxxxxxxxxx
mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx
<*> To unsubscribe from this group, send an email to:
amibroker-unsubscribe@xxxxxxxxxxxxxxx
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
|