[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [amibroker] Visit each symbol, like a slide show



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/