PureBytes Links
Trading Reference Links
|
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:* 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@xxxxxxxxx), 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@xxxxxxxxxxxxx <mailto:liberte@xxxxxxxxxxxxx>
> daniel.laliberte@xxxxxxxxx <mailto:daniel.laliberte@xxxxxxxxx>
>
>
>
>
>
> 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
>
------------------------------------
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/
|