Hi,

Why, exactly, do you want to duplicate the symbols in the first place?

Why don't you just add the same symbol to multiple watch lists? If you are not 
actually changing the underlying bar data, I don't see why you would want to 
duplicate that data.

If your logic is dependent upon parsing the symbol names in order to determine 
which model to apply, you could instead check for membership within a uniquely 
named watchlist. This would be slower. But, the maintenance nightmare that you 
are describing would disappear. And, it would be easier to extend the system 
(i.e. adding new symbols to a given watchlist without any change of code).

Mike 

--- In [email protected], "dbwyatt_1999" <dbw...@...> 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
> >
>


Reply via email to