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