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 [email protected], "Bob Johnson" <bjohnson...@...> 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" <no...@...> > To: <[email protected]> > 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 [email protected], "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 [email protected], "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 [email protected], "longarm61" <norm1@> wrote: > >> > > > >> > > Thanks much, Brian, I will look into that. > >> > > > >> > > Grant > >> > > > >> > > --- In [email protected], "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 [email protected], "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 > > > > > > >
