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" <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