PureBytes Links
Trading Reference Links
|
Hmm, thanks. I also see "< %". These should of course be:
<%
... // jscript block
%>
Please fix those manually, since I can't attach the original script
from this computer.
I suspect it was the prettify operation I applied on a copy of the
file that added the spaces. That would be a bug, TJ.
dan
--- In amibroker@xxxxxxxxxxxxxxx, "J. Biran" <jbiran@xxx> wrote:
>
> There seems to be an error at
>
> % >
>
>
>
> You can always attach a file to your mail/
>
>
>
> Joseph Biran
> ____________________________________________
>
>
>
> From: amibroker@xxxxxxxxxxxxxxx
> [mailto:amibroker@xxxxxxxxxxxxxxx] On Behalf Of Daniel
> LaLiberte
> Sent: Monday, July 14, 2008 9:29 PM
> To: amibroker@xxxxxxxxxxxxxxx
> Subject: [amibroker] Visit each symbol, like a slide show
>
>
>
> Here is my script for stepping through each symbol in the
> list of all symbols. It could be modified in several
> different ways, and I would like to hear your suggestions.
> (email directly if you like).
>
>
>
> By the way, posting afl code to this yahoo group is
> difficult. I think it would work OK using Outlook (and
> maybe some other email programs), and maybe if I select
> "Copy as HTML" in the AmiBroker Editor Preferences. But I
> am forced to use gmail or yahoo's awful interface, and there
> doesn't appear to be any option to preserve the indentation,
> coloring, and without adding redundant new lines. I hope
> the following is at least indented correctly, as it appears
> to me now.
>
>
>
> dan
>
>
>
>
>
> // VisitEachSymbol.afl
>
>
>
> // Visit each symbol in the list of All symbols.
>
> // You can use this like a slide show.
>
>
>
> // Written by Daniel LaLiberte (daniel.laliberte@xxx),
> July 2008.
>
> // You are free to use this however you want.
>
>
>
>
>
> // Instructions for use:
>
> // Select a symbol in your list of all symbols.
>
> // Use the "Start" trigger parameter to begin stepping at
> the current symbol.
>
> // It will stop automatically at the end of the list, or you
> can "Stop" at any time,
>
> // and "Start" again to continue (not restart).
>
> // If you start in a watchlist, or switch charts while
> stepping, interesting things will happen.
>
>
>
> if ( ParamTrigger( "Start Stepping", "Step" ) )
>
> {
>
> StaticVarSetText( "gotoSymbol", "" );
>
> StaticVarSetText( "stepping", "yes" );
>
> }
>
>
>
> if ( ParamTrigger( "Stop Stepping", "Stop" ) )
>
> {
>
> StaticVarSetText( "gotoSymbol", "" );
>
> StaticVarSetText( "stepping", "" );
>
> }
>
>
>
> // Number of seconds to delay between each step.
>
> delaySeconds = 5;
>
>
>
>
>
>
>
> // Implementation note:
>
> // You can't use a loop over all symbols like the following
> within one script.
>
> // It would cause an infinite loop because the chart updates
> as a result of changing the symbol,
>
> // thus executing this script again and restarting the loop.
>
> /*
>
> for (i=0; i<numTickers; i++)
>
> {
>
> ticker = tickers.getKey(i);
>
> JS.setTicker(ticker);
>
> }
>
> */
>
>
>
> // Instead of a simple loop, we must use static vars,
> stepping to the next symbol
>
> // each time the script is executed. We add a delay using
> a refresh loop.
>
> // Jscript is used to get the list of all symbols, and to go
> to the next symbol.
>
>
>
>
>
>
>
> AB = CreateStaticObject( "Broker.Application" );
>
>
>
> EnableScript( "jscript" );
>
>
>
> < %
>
>
>
> var AB = AFL( "AB" );
>
> function setTicker( ticker )
>
> {
>
> AB.ActiveDocument.Name = ticker;
>
> }
>
>
>
> function KeyList ( keys )
>
> {
>
> this.keys = keys; // ordered list of the keys
>
> this.keyIndex = {}; // map from key to index.
>
>
>
> for ( var i = 0; i < keys.length; i++ )
>
> this.keyIndex[keys[i]] = i;
>
> }
>
>
>
> KeyList.prototype.getIndex = function( key )
>
>
>
> {
>
> return this.keyIndex[ key ];
>
> }
>
>
>
> KeyList.prototype.getKey = function( index )
>
> {
>
> return this.keys[ index ];
>
> }
>
>
>
> KeyList.prototype.getLength = function ()
>
> {
>
> return this.keys.length;
>
> }
>
>
>
> function getAllTickers ()
>
> {
>
> var stocks = AB.stocks;
>
> var tickerList = stocks.getTickerList( 0 ); // 0 for
> list of All symbols?
>
> var tickers = tickerList.split( ',' );
>
>
>
> if ( !tickers[tickers.length - 1] )
>
> delete tickers[tickers.length - 1]; // Last element
> is empty due to extra comma.
>
>
>
> var tickerKeyList = new KeyList( tickers );
>
>
>
> return tickerKeyList;
>
> }
>
>
>
> % >
>
> JS = GetScriptObject();
>
>
>
>
>
> function doneWithSymbol ()
>
> {
>
> // In this test, simply check if the symbol we were
> supposed to go to is what we see now.
>
> // Special case: no gotoSymbol is OK.
>
> gotoSymbol = StaticVarGetText( "gotoSymbol" );
>
> atSymbol = ( gotoSymbol == "" ) OR ( gotoSymbol ==
> Name() );
>
>
>
> // Now delay for some period of time.
>
> // One way to cause a delay is to use the IBController
> Sleep function, as in the following.
>
> // But this disrupts normal processing in other windows,
> not completely, but enough to destroy interactivity.
>
> /*
>
> ibc = GetTradingInterface( "IB" );
>
> ibc.sleep(5000);
>
> */
>
>
>
> // Another slightly simpler way is to call
> RequestTimedRefresh( ) with the desired sleep time.
>
> // The time will be rounded to the nearest whole
> multiple, so it is not exactly a delay time.
>
> RequestTimedRefresh( delaySeconds );
>
> // But setting the symbol also causes an immediate
> refresh, which we want to ignore.
>
> refreshed = Status( "redrawaction" ) == 1;
>
> //_Trace("doneWithSymbol refreshed: " + refreshed);
>
>
>
> done = atSymbol AND refreshed;
>
> return done;
>
> }
>
>
>
> function gotoNextSymbol ()
>
> {
>
> // Reconstruct the list of all symbols (aka tickers).
> Yes, every time.
>
> tickerKeyList = JS.getAllTickers();
>
>
>
> // Get the index of the next symbol.
>
> nextIndex = 1 + tickerKeyList.getIndex( Name() );
>
>
>
> if ( tickerKeyList.getLength() - 1 > nextIndex ) // Is
> the index in range?
>
> {
>
> // OK, so get the next symbol and go to it.
>
> nextSymbol = tickerKeyList.getKey( nextIndex );
>
> StaticVarSetText( "gotoSymbol", nextSymbol );
>
> JS.setTicker( nextSymbol );
>
> }
>
> else
>
> {
>
> // No more symbols, so stop stepping.
>
> stepping = "";
>
> StaticVarSetText( "stepping", stepping );
>
> // RequestTimedRefresh(0); // this is not the way to
> stop the refresh loop.
>
> }
>
> }
>
>
>
> stepping = ( "yes" == StaticVarGetText( "stepping" ) );
>
>
>
> if ( stepping )
>
> {
>
> // If done with this symbol, go to next symbol.
>
> if ( doneWithSymbol() )
>
> {
>
> gotoNextSymbol();
>
> }
>
> }
>
>
>
>
>
> Plot( Close, "Close", colorBlack, styleCandle );
>
>
>
>
>
>
> --
> Daniel LaLiberte
> liberte@xxx
> daniel.laliberte@xxx
>
------------------------------------
Please note that this group is for discussion between users only.
To get 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/
|