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

[amibroker] Re: Simulating the Leveraged ETFs



PureBytes Links

Trading Reference Links

That's awesome, Bob, thanks so much.  Sorry for being so dense, but how exactly do I turn this into something I can see on a chart?

Grant


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