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

[amibroker] Re: Simulating the Leveraged ETFs



PureBytes Links

Trading Reference Links

Thanks Bob.

> As noted in the comments, the current prices of the composites >aren't 
> anywhere near the current ETF prices because they
> have different starting points in the underlying symbol, but the >price 
> movement matches well.

You could align them by getting the beginvalue of the ETF, for the start date of your selected range, and then make that the start value of the simulated ticker (parity will be maintained because each value is calculated using relative % change .... except for tracking error, as you mention).




--- In amibroker@xxxxxxxxxxxxxxx, "Bob Johnson" <bjohnson314@xxx> wrote:
>
> Grant, this may help.  I wrote this to create simulated QLD & QID (regular & 
> inverse) 2x ETFs for QQQQ.
> As noted in the comments, the current prices of the composites aren't 
> anywhere near the current ETF prices because they
> have different starting points in the underlying symbol, but the price 
> movement matches well.
> 
> Unfortunately the real ETFs only approximate the 2x leverage.  The real ETFs 
> are close to 2x, but backtesting results
> using the 2x composites the code builds need to be treated with a little 
> caution.  For charting they could be just fine.
> 
> I don't think you'll need to do much besides changing the date in the 
> dtnum[k] condition (for SPY I think it's 930129) and
> changing "qld" & "qid" to the appropriate values for SPY ETFs.
> 
> Regards,
> 
> Bob
> 
> // MyQID_QLD_Composites.afl
> // simulate 'perfect' 2X QQQQ ETFs, QLD & the Inverse ETF, QID
> // Run using 'current symbol' with current symbol set to QQQQ
> // Note: since this has much different starting point than the real ETFs, 
> the current prices
> // are very different than the real ETFs, but comparing the charts 
> side-by-side, the
> // relative price movement is very close.
> 
> SetBarsRequired(99999,99999);
> Buy=0;
> Sell=0;
> 
> Ochng=(O - Ref(C,-1))/Ref(C,-1);
> Hchng=(H - Ref(C,-1))/Ref(C,-1);
> Lchng=(L - Ref(C,-1))/Ref(C,-1);
> Cchng=(C - Ref(C,-1))/Ref(C,-1);
> 
> qldOchng=2 * Ochng;
> qldHchng=2 * Hchng;
> qldLchng=2 * Lchng;
> qldCchng=2 * Cchng;
> 
> // Reverse Hi/Lo for QID
> qidOchng=-2 * Ochng;
> qidHchng=-2 * Lchng;
> qidLchng=-2 * Hchng;
> qidCchng=-2 * Cchng;
> 
> qld0=0;
> qldh=0;
> qldl=0;
> qldc=0;
> qid0=0;
> qidh=0;
> qidl=0;
> qidc=0;
> dtnum=DateNum();
> baridx=BarIndex();
> 
> /*
> I use datastart() to find the barindex of the beginning of my QQQQ data.
> AddToComposite() apparently builds the arrays beginning with the earliest
> date in the database, not the earliest date of the symbol being used. That
> makes sense since ATC is designed for building multi-symbol composites.
> But.. in a case like this that's a problem because my QuotesPlus data
> 'rolls' forward. Today my database goes back to 2/28/90. Tomorrow it
> will only go back to 3/1/90. QQQQ started on 3/10/99 so I have to find
> that BarIndex dynamically.
> Once the composite is built, you'll still need to use Quotes Editor if
> you want to delete all the empty elements in the composites prior to the
> start of the data.
> */
> 
> function datastart()
> {
>     start=0;
>     for ( k = 0; k < BarCount ; k++ )
>    {
>         if ( dtnum[k] == 990310 )
>        {
>             start=baridx[k];
>             break;
>        }
>     }
> 
>    return start;
> }
> dstart=datastart();
> QLDO[dstart]=O[dstart];
> QLDH[dstart]=H[dstart];
> QLDL[dstart]=L[dstart];
> QLDC[dstart]=C[dstart];
> 
> // Reverse Hi/Lo for QID & reposition initial O,C for the inverse ETF
> 
> QIDO[dstart]=L[dstart]+(H[dstart]-O[dstart]);
> QIDH[dstart]=L[dstart];
> QIDL[dstart]=H[dstart];
> QIDC[dstart]=H[dstart]-(C[dstart]-L[dstart]);
> 
> // Start the composites 1 bar past the underlying symbol
> for ( i = dstart+1; i < BarCount ; i++ ) {
>        qldO[i]=qldC[i-1]*(1+qldOchng[i]);
>        qldC[i]=qldC[i-1]*(1+qldCchng[i]);
>        qldH[i]=qldC[i-1]*(1+qldHchng[i]);
>        qldL[i]=qldC[i-1]*(1+qldLchng[i]);
>        qidO[i]=qidC[i-1]*(1+qidOchng[i]);
>        qidC[i]=qidC[i-1]*(1+qidCchng[i]);
>        qidH[i]=qidC[i-1]*(1+qidHchng[i]);
>        qidL[i]=qidC[i-1]*(1+qidLchng[i]);
> }
> 
> AddToComposite(qldO,"~QLD","O",atcFlagDefaults);
> AddToComposite(qldH,"~QLD","H",atcFlagDefaults);
> AddToComposite(qldL,"~QLD","L",atcFlagDefaults);
> AddToComposite(qldC,"~QLD","C",atcFlagDefaults);
> AddToComposite(V,"~QLD","V",atcFlagDefaults);
> AddToComposite(qidO,"~QID","O",atcFlagDefaults);
> AddToComposite(qidH,"~QID","H",atcFlagDefaults);
> AddToComposite(qidL,"~QID","L",atcFlagDefaults);
> AddToComposite(qidC,"~QID","C",atcFlagDefaults);
> 
> 
> ----- Original Message ----- 
> From: "longarm61" <norm1@xxx>
> To: <amibroker@xxxxxxxxxxxxxxx>
> Sent: Tuesday, April 28, 2009 3:23 PM
> Subject: [amibroker] Re: Simulating the Leveraged ETFs
> 
> 
> > Thanks for the replies, Brian.  I'm very much inept when it comes to AFL 
> > so I'll have to try to make sense of it all.  In answer to your previous 
> > post, my plan was to use it for charting, but backtesting capability might 
> > come in handy too. Charting would be the priority though.
> >
> > Thanks again,
> >
> > Grant
> >
> >
> > --- In amibroker@xxxxxxxxxxxxxxx, "brian_z111" <brian_z111@> wrote:
> >>
> >> Grant,
> >>
> >> I found your idea interesting so I did a little bit more.
> >>
> >> > 1) make separate arrays for ROC(X,1) where X = O,H,L,C,Ave etc (as 
> >> >  >required)
> >> >
> >> > factorO = ROC(O,1);//as GrowthFactor e.g. 2% = 1.02, -2% = 0.98
> >> > etc
> >>
> >> I missed a couple of steps out ... you probably figured that already but 
> >> just in case here is an excel file that demos the logic ... I show two 
> >> methods to produce a simulated leveraged price series from a base price 
> >> series; log/antilog and relativeGeometricMean.
> >>
> >> Scroll down to section 2 Miscellaneous Files >> LeveragedPriceSeries.xls
> >>
> >> http://zboard.wordpress.com/downloads/
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >> --- In amibroker@xxxxxxxxxxxxxxx, "brian_z111" <brian_z111@> wrote:
> >> >
> >> > To toggle your thinking:
> >> >
> >> > (I am just imagining a chart to start with ... not sure what your final 
> >> > objective is ... if PLOTOHLC helps you could work it towards a 
> >> > backtesting array version ... versions might be different depending on 
> >> > whether you want it for chart reading, backtesting or both)
> >> >
> >> > 1) make separate arrays for ROC(X,1) where X = O,H,L,C,Ave etc (as 
> >> > required)
> >> >
> >> > factorO = ROC(O,1);//as GrothFactor e.g. 2% = 1.02, -2% = 0.98
> >> > etc
> >> >
> >> > 2) substitute factorO, factorH etc in PLOTOHLC example
> >> > - when you want to go back to 'Price', instead of leveraged Price, use 
> >> > factor == 1, which is ROC neutral.
> >> >
> >> > 3) if you get something going there and you like it maybe ParamToggle 
> >> > will let you switch from Price to Leveraged Price in live chart mode
> >> >
> >> >     - ParamToggle is boolean so toggle P or LP yes or no?
> >> >     - conditional statement (if toggle is yes use leveraged price 
> >> > array)
> >> >
> >> > There would be other ways so comeback if you want options.
> >> >
> >> > I think ATC can store conditioned arrays so you could also use that and 
> >> > save leveraged Price arrays as pseudo tickers (if you aren't up to 
> >> > speed on ATC reference Hermans PDF tutorial at the UKB).
> >> >
> >> >
> >> >
> >> > --- In amibroker@xxxxxxxxxxxxxxx, "longarm61" <norm1@> wrote:
> >> > >
> >> > > Thanks much, Brian, I will look into that.
> >> > >
> >> > > Grant
> >> > >
> >> > > --- In amibroker@xxxxxxxxxxxxxxx, "brian_z111" <brian_z111@> wrote:
> >> > > >
> >> > > > What about  211. (indexed from AFL by name) PLOTOHLC (Exploration / 
> >> > > > Indicators) - plot custom OHLC chart (AFL 2.2)
> >> > > >
> >> > > > Will that do the job?
> >> > > >
> >> > > >
> >> > > > --- In amibroker@xxxxxxxxxxxxxxx, "longarm61" <norm1@> wrote:
> >> > > > >
> >> > > > > Hi, I'm guessing that this is a simple thing, but of course, it's 
> >> > > > > not for me. I'm trying to simulate the performance of leveraged 
> >> > > > > ETFs going back farther than they go back themselves, hence the 
> >> > > > > following:
> >> > > > >
> >> > > > > I would like to plot a line which moves 2x percentage-wise the 
> >> > > > > gain/loss of a particular stock PER DAY (bar).  E.g., if I have 
> >> > > > > SPY up, and SPY moves up 1% on Monday, the line moves up 2%.  If 
> >> > > > > SPY moves down .5% on Tuesday, the line moves down 1%.  And so 
> >> > > > > on.  It'd be nice to have an option to switch between PRICE and 
> >> > > > > PERCENTAGE on the current value (from the first bar showing to 
> >> > > > > the last), but if it's a choice between one or the other, I'd 
> >> > > > > prefer price.
> >> > > > >
> >> > > > > Thanks so much for any assistance on this.
> >> > > > >
> >> > > > > Grant
> >> > > > >
> >> > > >
> >> > >
> >> >
> >>
> >
> >
> >
> >
> > ------------------------------------
> >
> > **** IMPORTANT PLEASE READ ****
> > This group is for the discussion between users only.
> > This is *NOT* technical support channel.
> >
> > TO GET TECHNICAL SUPPORT send an e-mail directly to
> > SUPPORT {at} amibroker.com
> >
> > TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
> > http://www.amibroker.com/feedback/
> > (submissions sent via other channels won't be considered)
> >
> > For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
> > http://www.amibroker.com/devlog/
> >
> > Yahoo! Groups Links
> >
> >
> >
>




------------------------------------

**** IMPORTANT PLEASE READ ****
This group is for the discussion between users only.
This is *NOT* technical support channel.

TO GET TECHNICAL SUPPORT send an e-mail directly to 
SUPPORT {at} amibroker.com

TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
http://www.amibroker.com/feedback/
(submissions sent via other channels won't be considered)

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

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/