Yeah, me too. Line 56, error 32. Never worked w/ scripting so unsure what's up..
J. Biran wrote: > There seems to be an error at > > % > > > > > You can always attach a file to your mail/ > > > > Joseph Biran > ____________________________________________ > > > > *From:* [email protected] [mailto:[EMAIL PROTECTED] *On > Behalf Of *Daniel LaLiberte > *Sent:* Monday, July 14, 2008 9:29 PM > *To:* [email protected] > *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 ([EMAIL PROTECTED]), 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 > [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> > [EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]> > > > > > > No virus found in this incoming message. > Checked by AVG - http://www.avg.com > Version: 8.0.138 / Virus Database: 270.4.10/1552 - Release Date: 7/14/2008 > 6:28 PM >
