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

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



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/