Hi Brian, Interesting topic.
Mandelbrot (seen one fractal, seen em all) has some excellent discussion on synthetic data in his book "The (Mis)Behaviour of markets". He uses a multifractal approach to producing simulated markets. The price behaviour produced by his approach looks identical to real price data and is not "psuedo random" in the ordinary sense. I think you'd like the book, it's very approachable, and all the maths is hidden away in the back. Z ________________________________ From: brian_z111 <[email protected]> To: [email protected] Sent: Thursday, 18 June, 2009 3:46:20 PM Subject: [amibroker] Re: Benchmarking Fixup /*P_RandomPriceSeri es*/ //Use as a Scan to create PseudoRandomPriceSe ries //Select Current symbol and All quotations in AA, select basetimeframe in AA Settings //It will also create the series if used as an indicator (add the appropriate flag to ATC) // but this is NOT recommended as it will recalculate them on every refresh. //Indicator mode is good for viewing recalculated curves (click in whitespace) //Do not have the indicator code uncommented while running the scan //CommentOut the Scan code before using the indicator code. N = 100;//manually input desired Number - used in Scan AND Indicator mode ///SCAN///// ///////// ///////// ///////// ///////// ///////// ///////// //////// Buy=Sell=0; for( i = 1; i < N; i++ ) { VarSet( "D"+i, 100 * exp( Cum(log(1 + (Random() - 0.5)/100)) ) ); AddToComposite( VarGet( "D"+i ),"~Random" + i,"X",1|2|128) ; //Plot( VarGet( "D"+i ), "D"+i, 1,1 ); //PlotForeign( "~Random" + i,"Random" + 1,1,1); } /* ////PLOT//// ///////// ///////// ///////// ///////// ///////// //// //use the same period setting as for the Scan for( i = 1; i < N; i++ ) { PlotForeign( "~Random" + i,"Random" + i,1,1); } */ ////OPTIMIZE/ ///////// ///////// ///////// ///////// ///////// ///////// //// //use the filter to run on Group253 OR add ~Random + i PseudoTickers to a Watchlist and define by AA filter //fast = Optimize( "MA Fast", 1, 1, 10, 1 ); //slow = Optimize("MA Slow", 4, 4, 20, 1 ); //PositionSize = -100/P; //Buy = Cross(MA(C,fast) ,MA(C,slow) ); //Sell = Cross(MA(C,slow) ,MA(C,fast) ); //Short = Sell; //Cover = Buy; --- In amibro...@yahoogrou ps.com, "brian_z111" <brian_z111@ ...> wrote: > > Following recent discussions on benchmarking and using rule based systems to > engineer returns to meet 'clients' profiles i.e.Samantha' s MA(C,10) example, > I did some follow up R&D with the intent of expanding the examination a > little further via a zboard post. > > I may, or may not, get around to that so in the meantime I decided I would > share a couple of things while they are still topical. > > I made up some quick and dirty randomly generated eq curves so that I could > optimise MA(C,10) on them (out of curiosity). > > Also, out of curiosity, I decided to see how the example signal/filter code > that I made up, as the study piece for Yofas topic on benchmarking, would > actually perform. > > Buy = Ref(ROC(MA(C, 1),1),-1) < 0 AND ROC(MA(C,1), 1) > 0 AND ROC(MA(C,10) > ,1) > 0; > Sell = Cross(MA(C,10) ,C);//no thought went into this exit and I haven't > tried any optimization of the entry or the exit > > By chance I noticed that it outperformed on one or two of the constituents of > the ^DJI (Yahoo data ... 2005 to 2009) and to the naked eye the constituents > all seem to be correlated to a fair extent over that time range. > > Also, to the naked eye, it outperforms on randomly generated stock prices > around 50% of the time and the outperformnce doesn't appear to be correlated > to the underlying(I haven't attempted to find an explanation for this). > > Here is the code I used to make up some randomly generated 'stocks'. > > As we would expect it produces, say, 100 price series with a concatenated > mean of around zero (W/L = 1 and PayoffRatio == 1) etc. > When plotted at the same time ... individual price series are dispersed > around the mean in a 'probability cone' ... in this case it is a relatively > tight cone because the method doesn't introduce a lot of volatility to the > series. > > /*P_RandomEquity* / > > //Use as a Scan to create PseudoRandom Equity curves > //Current symbol, All quotations in AA, select basetimeframe in AA Settings > //It will also create the curves if used as an indicator (add the appropriate > flag to ATC) > // but this is NOT recommended as it will recalculate them on every refresh. > //Indicator mode is good for viewing recalculated curves (click in whitespace) > //CommentOut the Scan code before using the indicator code. > //Don't use a very large N or it will freeze up indicator scrolling etc > > n = 100;//manually input desired number - used in Scan AND Indicator mode > > ///SCAN///// ///////// ///////// ///////// ///////// ///////// ///////// > //////// > > > Buy=Sell=0; > > for( i = 1; i < n; i++ ) > > { > > VarSet( "D"+i, 100 * exp( Cum(log(1 + (Random() - 0.5)/100)) ) ); > AddToComposite( VarGet( "D"+i ),"~Random" + i,"X",1|2|128) ; > //Plot( VarGet( "D"+i ), "D"+i, 1,1 ); > //PlotForeign( "~Random" + i,"Random" + 1,1,1); > } > > /* > ////PLOT//// ///////// ///////// ///////// ///////// ///////// //// > > //use the same number setting as for the Scan > > > for( i = 1; i < n; i++ ) > > { > > PlotForeign( "~Random" + i,"Random" + i,1,1); > > } > > > ////OPTIMIZE/ ///////// ///////// ///////// ///////// ///////// ///////// //// > > //use the filter to run on Group253 OR add ~Random + i PseudoTickers to a > Watchlist and define by AA filter > > > //fast = Optimize( "MA Fast", 1, 1, 10, 1 ); > //slow = Optimize("MA Slow", 4, 4, 20, 1 ); > > //PositionSize = -100/P; > //Buy = Cross(MA(C,fast) ,MA(C,slow) ); > //Sell = Cross(MA(C,slow) ,MA(C,fast) ); > > //Short = Sell; > //Cover = Buy; > > I also stumbled on this, which seems to have some relevance: > > http://www.scribd. com/doc/6737301/ Trading-eBookCan -Technical- Analysis- > Still-Beat- Random-Systems > > > It contains a link to a site that has a free download of some RNG produced > datasets. > > There hasn't been much discussion on using synthetic data in the forum ... > Patrick recommended it for testing? OR benchmarking? ... Fred is against > using it ("If we knew enough about the characteristics of the data, in the > first place, to be able to create synthetic data then we would know enough to > design trading systems to exploit the data's profile anyway", OR something > like that). > > I was titillated enough by my first excursion into benchmarking with > synthetic data to bring me back for some more. > Access Yahoo!7 Mail on your mobile. Anytime. Anywhere. Show me how: http://au.mobile.yahoo.com/mail
