Mike, By default, the "Local Data Storage" for PremiumData is turned off. I enabled it and the duplicate symbol data and information seems to save to the local database. I did quickly notice that by switching to local database from the Metastock plug-in that only the symbols I've previously looked at on a chart have data. If I switch back to the Metastock plug-in, then all symbols have data for viewing on a chart. So I guess I should keep the database set to the Metastock plug-in and temporarily change it to local whenever I want to update the duplicate symbols.
Thanks for all your help and insights. Regards, David --- In [email protected], "Mike" <sfclimb...@...> wrote: > > David, > > The code provided in my earlier post, below, works fine for me. Though, I've > only tested it on the trial version of AB, so the new tickers do not get > saved to the database (AB trial prevents that). > > After the Scan, the new tickers are definitely populated with data and render > correctly on a chart. > > This is what I did (32 bit AB Standard Edition Trial 5.20.0): > > - Load the file into the AA window > - "Apply to" set as "Use Filter" and choose desired watchlist > - "Range" set as "n last days" with n = 1 > - Scan > > All duplicate symbols were generated, all with seemingly identical data. > > Mike > > --- In [email protected], "dbwyatt_1999" <dbw451@> wrote: > > > > Excellent Mike! Great suggestions. However the results of your > > modifications is similar to the results I was getting before. The code > > produces duplicate symbols with no quote data. Something is still not > > quite right with copying the quote data from the source symbol to the new > > duplicate symbol. I had previously surmised that the problem probably lies > > with the Quotations.Add() routine not being passed a proper date value. > > Most of the examples I could find for Quotations.Add() are in jscript and > > the date parameter is formated as a VT_DATE type (usually through the > > jscript date routine getVarDate()) or as a string of format YYYY-MM-DD. > > > > I'm making an assumption that Quotations.Add() is not adding quote data > > records because my chart shows the message "To plot any chart at least 3 > > data bars are needed, but there are only 0 bars..." for each of the new > > duplicate symbols. I wanted to keep the code in AFL, but maybe there's a > > reason there are no examples of Quotations.Add() in AFL and the only way to > > get this to work is to convert to jscript. > > > > Regards, > > > > David > > > > --- In [email protected], "Mike" <sfclimbers@> wrote: > > > > > > Try using DateTime instead. Also, the property is OpenInt, not > > > OpenInterest. Finally, rather than entering all the tickers manually, > > > just run a Scan over a watchlist of desired tickers. > > > e.g. using a simplified version of your original post: > > > // > > > // AmiBroker OLE code to Duplicate a list of Symbols > > > // > > > > > > Buy = Sell = 0; > > > > > > if ( Status( "action" ) == actionScan ) > > > { > > > Ticker = Name(); > > > Dates = DateTime(); > > > AB = CreateObject( "Broker.Application" ); > > > oStocks = AB.Stocks; > > > oSymbol = oStocks.Item( Ticker ); > > > > > > for ( m = 2; m <= 12; m++ ) > > > { > > > TickerNew = Ticker + "_" + m; > > > oSymbolNew = oStocks.Add( TickerNew ); > > > > > > oSymbolNew.FullName = oSymbol.FullName; > > > oSymbolNew.Currency = oSymbol.Currency; > > > oSymbolNew.Continuous = oSymbol.Continuous; > > > oSymbolNew.MarketID = oSymbol.MarketID; > > > oSymbolNew.GroupID = oSymbol.GroupID; > > > oSymbolNew.IndustryID = oSymbol.IndustryID; > > > oSymbolNew.DataLocalMode = oSymbol.DataLocalMode; > > > oSymbolNew.RoundLotSize = oSymbol.RoundLotSize; > > > oSymbolNew.MarginDeposit = oSymbol.MarginDeposit; > > > oSymbolNew.TickSize = oSymbol.TickSize; > > > oSymbolNew.PointValue = oSymbol.PointValue; > > > > > > for ( i = 0; i < BarCount; i++ ) > > > { > > > oQuotations = oSymbolNew.Quotations; > > > oQuote = oQuotations.Add( NumToStr( dates[i], formatDateTime > > > ) ); > > > oQuote.Open = O[i]; > > > oQuote.High = H[i]; > > > oQuote.Low = L[i]; > > > oQuote.Close = C[i]; > > > oQuote.Volume = V[i]; > > > oQuote.OpenInt = OI[i]; > > > } > > > } > > > > > > AB.RefreshAll(); > > > AB.SaveDatabase(); > > > } > > > > > > --- In [email protected], "dbwyatt_1999" <dbw451@> wrote: > > > > > > > > Using OLE objects in AFL, what is the Date parameter format passed to > > > the Quotations.Add() routine? I've tried DateNum values, DateTime > > > values, and strings of Year + "-" + Month + "-" + Day. I've been > > > unsuccessful in adding a quote to a new Symbol created with > > > Stocks.Add(). > > > > > > > > Here's the relevant code (where oSymbolNew is a Stock object created > > > earlier in the code with AB.Stocks.Add()): > > > > > > > > qDay = Day(); > > > > qMonth = Month(); > > > > qYear = Year(); > > > > oQuotations = oSymbolNew.Quotations; > > > > > > > > for(i=0; i<BarCount; i++) > > > > { > > > > qDate = "" + qYear[i] + "-" + qMonth[i] + "-" + qDay[i]; > > > > oQuote = oQuotations.Add( qDate ); > > > > oQuote.Close = C[i]; > > > > } > > > > > > > > > > > > Thanks, > > > > > > > > David > > > > > > > > > > > > --- In [email protected], "dbwyatt_1999" dbw451@ wrote: > > > > > I've attempted to code functionality to duplicate symbols using the > > > AmiBroker OLE interface. In my test code below, 2 symbols ($A0 and $CA) > > > are attempted to be duplicated into symbols $A0_2, $A0_3, $CA_2, and > > > $CA_3. The duplication process entails: > > > > > > > > > > 1. adding a new symbol > > > > > 2. setting the new symbol information using the source symbol > > > information > > > > > 3. adding new symbol quotes and assigning source symbol quote > > > values. > > > > > > > > > > My test code creates a new symbol ($A0_2) and assigns the FullName > > > and Currency, but does not assign any other symbol information. The > > > code also does not create the quotes for the new symbol. The > > > SaveDatabase() routine is reached and executed. The code then generates > > > an "unhandled application error" probably caused by RestorePriceArrays() > > > to a new symbol that has no quotes. > > > > > > > > > > Can anyone tell me what's wrong with the following code? > > > > > > > > > > // > > > > > // AmiBroker OLE code to Duplicate a list of Symbols > > > > > // > > > > > DuplicateTickers = ParamTrigger("Duplicate Tickers", "Click here to > > > Duplicate Tickers"); > > > > > TickerList = ParamStr("Tickers to Duplicate","$AO,$CA"); > > > > > MaxTickerNum = Param("Max Ticker Number",3,2,12,1); > > > > > > > > > > if(DuplicateTickers) > > > > > { > > > > > > > > > > AB = CreateObject("Broker.Application"); > > > > > oStocks = AB.Stocks; > > > > > for (m=2; m<=MaxTickerNum; m++) // Loop through each duplicate > > > > > { > > > > > for(n=0; (Ticker=StrExtract( TickerList, n))!=""; n++) // Loop > > > through each symbol > > > > > { > > > > > oSymbol = oStocks.Item( Ticker ); > > > > > > > > > > TickerNew = Ticker + "_" + m; > > > > > oSymbolNew = oStocks.Add( TickerNew ); > > > > > > > > > > oSymbolNew.FullName = oSymbol.FullName; > > > > > oSymbolNew.Currency = oSymbol.Currency; > > > > > oSymbolNew.Continuous = oSymbol.Continuous; > > > > > oSymbolNew.MarketID = oSymbol.MarketID; > > > > > oSymbolNew.GroupID = oSymbol.GroupID; > > > > > oSymbolNew.IndustryID = oSymbol.IndustryID; > > > > > oSymbolNew.DataLocalMode = oSymbol.DataLocalMode; > > > > > oSymbolNew.RoundLotSize = oSymbol.RoundLotSize; > > > > > oSymbolNew.MarginDeposit = oSymbol.MarginDeposit; > > > > > oSymbolNew.TickSize = oSymbol.TickSize; > > > > > oSymbolNew.PointValue = oSymbol.PointValue; > > > > > > > > > > SetForeign( Ticker ); > > > > > qDate = DateNum(); > > > > > for(i=0; i<BarCount; i++) > > > > > { > > > > > oQuotations = oSymbolNew.Quotations; > > > > > oQuote = oQuotations.Add( qDate[i] ); > > > > > oQuote.Open = O[i]; > > > > > oQuote.High = H[i]; > > > > > oQuote.Low = L[i]; > > > > > oQuote.Close = C[i]; > > > > > oQuote.Volume = V[i]; > > > > > oQuote.OpenInterest = OI[i]; > > > > > } > > > > > > > > > > AB.RefreshAll(); > > > > > AB.SaveDatabase(); > > > > > RestorePriceArrays(); > > > > > } > > > > > } > > > > > > > > > > } > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Thanks, > > > > > > > > > > David > > > > > > > > > > > > > > > > > > > > > > > > > --- In [email protected], "dbwyatt_1999" <dbw451@> wrote: > > > > > > > > > > > > I've got a system that consists of 12 models. For each model, > > > I've defined a watchlist that has unique symbol names that are only used > > > by a single model. The unique symbol names are duplicates of a source > > > symbol with incremental numbers attached (e.g. ES, ES_2, ES_3, ..., > > > ES_12). I create the duplicate symbols by starting with an ASCII file > > > which I import, rename, import again, rename, import again, etc. Then I > > > have to go into Symbol information for each symbol and manually enter > > > the contract specifications (lot size, margin, tick size, point value). > > > > > > > > > > > > I now have a new requirement for 55 additional instruments and > > > have obtained historical futures data from PremiumData. The 55 > > > instruments were very easy to load and PremiumData has predefined the > > > contract specifications. Now I need to somehow duplicate the 55 > > > instruments 11 times into 660 total symbols. I have not found a native > > > way in AB to duplicate (or rename) symbols. I can export the data using > > > AFL, but import files don't include the symbol information. > > > > > > > > > > > > Duplicating a symbol looks like it can be done using the Amibroker > > > activeX object. Before I embark on a new programming task, I thought > > > I'd ask if anyone has written a script to duplicate an AB symbol: > > > > > > > > > > > > 1. creates a new symbol. > > > > > > 2. copies the quote data from a source symbol to the new symbol. > > > > > > 3. copies the symbol information from the source symbol to the new > > > symbol. > > > > > > > > > > > > Ultimately, I would like to loop through a watchlist 11 times; > > > creating and updating duplicate symbol quotes and information. Any > > > directions or suggestions would be great. > > > > > > > > > > > > Thanks, > > > > > > > > > > > > David > > > > > > > > > > > > > > > > > > > > >
