Does it have to be a chart? If you can accomplish the same thing via a scan/exploration/backtest you can use the LoadFormula function on the Analysis object. Similarly, the Commentary object has a LoadFormula function.
I don't see a LoadFormula equivalent for charting. But perhaps you can emulate it as per 3b by loading a predefined layout or template? The Application object has a LoadLayout function. You could perhaps then grab the Application.ActiveDocument and set its Name property to the desired ticker. Similarly, the Application has an ActiveWindow property. The Window object has a LoadTemplate function and a Document property. Again, set the Name property of the Document to change the symbol. Mike --- In [email protected], Progster <progs...@...> wrote: > > Hi. > > Using OLE/jscript, I would like to do the following: > > 1. Start AB > 2. Choose a database > > In a loop across multiple symbols (symbol names known in advance): > > 3a. Open a chart and apply an AFL > > or > > 3b. Open a saved layout that has a given AFL applied > > 4. Quit AB > > > I've done a good amount of both Googling and experimenting, but I > haven't hit on the right sequence yet to accomplish this. > > It is only step 3 that I'm having a problem with. My problem is not > executing the loop. That seems fine. > > However, nothing I have found or tried opens/loads a chart and > applies/runs an AFL. > > Below is skeleton code that runs. > > If someone is able to be so kind as to fill in the missing bit, I'd > really appreciate it. If there's more than one way to do it, > alternative solutions are very welcome. > > Thanks. > > --- > > > /* > LoopDemo_01.js > > _01 201007089 Initial "empty" skeleton by Progster > > It is recommended to run this file in a command window, like so: > > >cscript LoopDemo_01.js > > Lines commented with // *** will need to be edited to reflect > the local environment > > Goals: > > 1. Start AB > 2. Choose a database > > In a loop across multiple symbols (symbol names known in advance): > > 3a. Open a chart and apply an AFL > or > 3b. Open a saved layout that has a given AFL applied > > 4. Quit AB > > > */ > > function pausecomp(millis) > { > var date = new Date(); > var curDate = null; > > do { curDate = new Date(); } > while(curDate-date < millis); > } > > // General paths and setup definitions > Settings_Directory = "C:\\Amibroker_Formula_Root\\"; // *** > SettingsFileName = "Futures_01.ABS"; // *** > > Layout_Directory = "C:\\AmiBroker_Data\\US-PremiumData\\Layouts\\" > // *** > LayoutFileName = "MyLayout.ALY"; // *** > > SettingsFile = Settings_Directory + SettingsFileName; > WScript.Echo( "SettingsFile: " + SettingsFile ); > > LayoutFile = Layout_Directory + LayoutFileName; > WScript.Echo( "LayoutFile: " + LayoutFile ); > > AFL_Directory = "C:\\Amibroker_Formula_Root\\Custom\\"; // *** > > // Create AmiBroker object > AB = new ActiveXObject("Broker.Application"); > > // Load Database > AB.LoadDatabase("C:\\Amibroker_Data\\US-PremiumData"); // *** > > // Test of changing symbols // *** > var symbols = new Array(4); > symbols[0] = "$SPX" ; > symbols[1] = "GOOG" ; > symbols[2] = "AAPL" ; > symbols[3] = "SPY" ; > // symbols[] = "" ; > > for (idx = 0; idx <= 3; idx++) > { > next_symbol = symbols[idx]; > WScript.Echo( "Working on: " + next_symbol); > > // Aim is to load a chart here, and load code (which will run > and generate the desired result) > > ChartFileName = "My_Chart_File.afl"; // *** > ChartFile = AFL_Directory + ChartFileName; > WScript.Echo(ChartFile); > > pausecomp( 1000 ) ; > } > > AB.SaveDatabase(); > AB.RefreshAll(); > > pausecomp( 1000 ) ; > > WScript.Echo("Closing AmiBroker"); > AB.Quit(); > > WScript.Echo("Pipeline is Done."); >
