PureBytes Links
Trading Reference Links
|
<SPAN
class=650080222-29102003>re the bug, you're correct, thanks. I don't
specifically remember fixing it, but it's wrong as you found in v1, but
corrected in the unreleased v1.1.<FONT face="Courier New"
color=#0000ff size=2>
<SPAN
class=650080222-29102003>
<SPAN
class=650080222-29102003>re the possibility that profitability isn't great
because optimization happens too often, you got that you can control how often
that gets done, right? in the framework configuration section,
equity_lookback_frequency is the number of bars between optimizations, with 0
meaning every day and -1 meaning optimize once at the beginning.
<SPAN
class=650080222-29102003>
<SPAN
class=650080222-29102003>
<SPAN
class=650080222-29102003>re other reasons why this doesn't make systems
profitable, well, that's a very very very interesting question, one I've thought
and posted about a lot.
<SPAN
class=650080222-29102003>
<SPAN
class=650080222-29102003>I don't see any huge difference in principle between
auto-optimization and backtesting in general. when we say some strategy works
well, we generally mean that someone backtested it at some point in time, with
some particular set of parameters, and it worked well. if another person hears
about it 25 years later, and backtests with data going up to that much later
date, they may get very different optimal parameters, or a completely failing
result with any settings. so our evaluation of systems and their parameters is
always dependent on the time frame we chose to examine.
<SPAN
class=650080222-29102003>
<SPAN
class=650080222-29102003>if that's the case, it seems to me that a robust system
should be optimizable at any given point in time, and be successful going
forward with those best-choice parameters. re-optimizing every day takes that to
an extreme, but avoids completely arbitrary decisions about when to optimize and
when not to. every week? month? year? every saturday? every january 1? june 22?
what possible justification is there for any of these? <FONT
face="Courier New" color=#0000ff size=2>to put it
differently, why does ignoring possible changes in market dynamics in between
optimizations improve the performance or reliability of a
system?
<SPAN
class=650080222-29102003>
<SPAN
class=650080222-29102003>outside of when you choose to optimize, it
fundamentally comes down to whether past performance predicts future performance
or not. if auto-optimization fails as a concept, doesn't that say that there's a
basic disconnect between how a system and settings performed in the past
and how it does in the future? if that's true, why do we believe that any
backtest results tell us anything useful at all?
<SPAN
class=650080222-29102003>
<SPAN
class=650080222-29102003>one possible answer is that raw profitability may not
be the best predictor of future performance, so we need better metrics to
judge past performance than simple equity growth. the framework comes with two
rules for scoring performance during optimization, and you're heartily
encouraged to edit those or add your own.
<SPAN
class=650080222-29102003>
<SPAN
class=650080222-29102003>
<SPAN
class=650080222-29102003>if I really believed that observing past performance
told us nothing about the future, I'd have to abandon TA completely and look to
fundamentals, industry news and knowledge, etc for trading strategy. I haven't
gone that far obviously, but I'm at a loss to explain away the argument I've
just given. better performance metrics are the only logical avenue I can see out
of that dead end.
<SPAN
class=650080222-29102003>
<SPAN
class=650080222-29102003>I don't mean to sound like I think I've got this all
figured out, quite the opposite. I feel like I've disproved my own existence or
something, proved the impossible. so please, somebody, wise me
up!
<SPAN
class=650080222-29102003>
<SPAN
class=650080222-29102003>dave
<BLOCKQUOTE
>update:I
have attached a file with my settings and results by rule. (Again, I
usedQQQ daily data for from 1/2/3 to 10/28/3.)I agree with your
statement: '...almost no trading rules I've tested arevery profitable when
managed this way, with any framework settings I'vetried...'So, I
wonder what this means? Perhaps the optimization happens
toofrequently?-johnAlso I found a possible bug in
BuySellStochCCI. I added the second linebelow:function
BuySellStochCCI(dynamic, p1, p2) { // p1 = CCI period
period=p1; //added this to Dave's code cc =
CCIx(period); cc = StochTransform(cc,
period); Buy = Cover = Cross(cc,
50); Sell = Short = Cross(50,
cc);}----- Original Message ----- From: john
gibbTo: amibroker@xxxxxxxxxxxxxxxSent: Wednesday, October 29, 2003
10:33 AMSubject: Re: [amibroker] Auto-optimization AFL
uploadedI assume by 'analysis mode' you mean Scan mode;
right?And, yes, the Index Symbols below have no
Buys/Sells/Shorts/Covers with 'my'rule in Scan mode, although they do have
volume...Since it seems to be working, I am now wondering what my next
step shouldbe, given my ultimate objective of a QQQ options system that
uses EOD data.I welcome your inputs on this, but I think I will first take
advantage ofall the rules you have provided and compare, via the sum of
BackTest Profit,their QQQ results with those of my rule. (And I will also
record Exploreresults so I can see the optimum parameter values, although
I am not clearon how to best utilize these results yet.)thanks
again-john----- Original Message ----- From: Dave
MerrillTo: amibroker@xxxxxxxxxxxxxxxSent: Tuesday, October 28, 2003
7:03 PMSubject: RE: [amibroker] Auto-optimization AFL
uploadedglad it's working. it's too bad the no-array limitations
on the native ABfunctions make us get a little more techie about this than
we'd otherwisehave to, it's workable.re no rows, near the bottom
is the exploration code, including the filterstatement, which I think
defaults to buy or sell or short or cover. ifthat's what you want, then
the problem is probably that you're not seeingany buys, in analysis mode
either, yes? if so, make sure the index tickersyou're using have volume
data (some do some don't in the QuotesPlus data Iuse), or modify the
minimum volume requirement in the TRADE ENTRYRESTRICTIONS
section.that's actually the sleazy answer. a better one is to look in
the FRAMEWORKENGINE section, at 'tweak volume entry requirements for
things with novolume data', and find this
expression: StrLeft(Name(), 1) == "!"with my
QuotesPlus data, that's how indexes are flagged, by having theirticker
names begin with "!". with other providers, it's probably different;I
think yahoo is "^", for example. change that code, and anything with
thatprefix won't be subject to the minimum volume rule in TRADE
ENTRYRESTRICTIONS. the unreleased update of the framework has a better way
ofhandling this.hope this helps,daveIt works!!!!
Making my MFI period, p1, a constant, eliminated
theerror...thanksThen, since sum() appears to take an array for
its period, I was able to getthis updated, dynamic-or-not function to
run:function BuySellPcntBMFI(dynamic, p1, p2) { // p1 = MFI period, p2
= highcrossover threshhold price =
Close; BA = 20; //Bband MA BD =
2;//Bband Stdev BL = ML = 20;// lower crossover
threshhold MP = p1;// MFI period
if(dynamic) { MoneyFlow = V *
Avg; Change = Avg - Ref( Avg, -1
); PositiveFlow=Sum( IIf( Change
> 0, MoneyFlow, 0 ) ,p1 );
NegativeFlow=Sum( IIf( Change < 0, MoneyFlow, 0 ) ,p1
);
MoneyRatio=PositiveFlow/NegativeFlow;
MFIndex=100-(100/(1+MoneyRatio)); } else
{
MFIndex=MFI(MP); } MH = BH = p2;//
higher crossover threshhold b= ((price - BBandBot(
price, BA, BD )) / (BBandTop( price, BA, BD ) -BBandBot(price, BA, BD )))
* 100; Buy = Cover = b > BH AND MFIndex >
MH; Sell = Short = b < BL AND MFIndex <
ML;}thanks again-johnBTW, when I use
1990-to-current EOD data for MSN's $COMPX or Yahoo's ^IXIC(both supposedly
the NASDAQ composite) as my 'current stock', i get a singleresult row for
Backtest and NO rows, just headers, for Explore. Individualstocks do
yield multiple rows.----- Original Message ----- From: Dave
MerrillTo: amibroker@xxxxxxxxxxxxxxxSent: Tuesday, October 28, 2003
12:09 PMSubject: RE: [amibroker] Auto-optimization AFL
uploadedhi john, I don't have time right now to mess in detail w
this, but trytemporarily replacing p2 with a fixed number and see if the
error goes away.it won't give you correct results, but might verify my
suspicion, which isthat AB's BBand functions can't take arrays for their
period. if that's thecase, you'd need to code a replacement in AFL that
can, or if we're lucky,maybe those functions are part of
indicators.dll.I hope that some day soon, we'll get versions of all
built in AB indicatorsthat are array-capable. many of them already are,
and it would be great iflife was that kind of symetrical, not to mention
useful.daveI think i have a 'dynamic=false' situation like
your BuySellStoch. (I amusing p1 as the number of periods for MFI() and
assume that this"mfi(periods=14)" syntax in Help means that MFI can take
only a single-valueparameter. And p2 is a single-value crossover threshold
for Bollinger's %b.)FWIW, here is my rule code producing the
error:function BuySellPcntBMFI(dynamic, p1, p2) { // p1 = MFI period,
p2 = highcrossover threshhold price =
Close; BA = 20; //Bband MA BD =
2;//Bband Stdev BL = ML = 20;// lower crossover
threshhold MP = p1;// MFI period
MH = BH = p2;// higher crossover threshhold //b is
Bollinger's %b b = ((price - BBandBot( price, BA, BD ))
/ (BBandTop( price, BA, BD ) -BBandBot(price, BA, BD ))) *
100; Buy = Cover = b > BH AND MFI(MP) >
MH; Sell = Short = b < BL AND MFI(MP) <
ML;}TIA,-john----- Original Message -----
From: Dave MerrillTo: amibroker@xxxxxxxxxxxxxxxSent: Tuesday,
October 28, 2003 8:03 AMSubject: RE: [amibroker] Auto-optimization
AFLthanks for the compliments, glad it's kind of sane in there
(:-).just FYI, there's a new version of this that I haven't posted
yet. amongother changes, it handles up to 3 optimization parameters, and
allows eachrule to set the optimization parameter ranges independently. it
also movesthe docs into a separate file, so the code file is smaller and
easier todeal with. I'll get that up as soon as I can finish it
off.no, you don't have to set dynamic yourself, and shouldn't. did you
read thecomments about it? I bet it's not dynamic itself that your rule is
gettinghung up on, it's the optimization parameters being arrays when
dynamic istrue.here's the section about this from the newer
version, expanded a bit fromthe original; not sure if the example BuySell
rules it mentions are exactlythe same:--------------during
optimization, the active rule is called multiple times, once witheach
combination of p1, p2 and p3 being tested. at this time, p1, p2 and p3are
simple numeric values, not arrays. once optimal settings have
beendetermined for every bar, the rule is called once more, to generate
actualtrading signals. this time, p1, p2 and p3 are arrays, each bar
dynamicallycontaining the optimal p1, p2 and p3 value for that
bar.whether they're simple values or arrays matters because not all AB
functionscan accept arrays as inputs. for example, MA, TEMA, DEMA, WMA and
AMA canuse an array as their period, but EMA and MACD can't. it's usually
possibleto code an equivalent in AFL that can, like the included EMAx
function is areplacement for EMA. an AFL replacement may be significantly
slower though,if it has to do a lot of work, since rules are called many
times duringoptimization. you could also use a DLL, like indicators.dll
from the 3rdparty section of the AB site, but I didn't want this code to
depend onoutside tools.if this is an issue for a particular rule,
include both slower array-capablecode for use in the final
signal-generation phase, and faster,non-array-capable code for use during
the many optimization tries. use the'dynamic' parameter to know which to
call; see BuySellStoch, below, for anexample. you can also write a custom
function with both versions, and passdynamic into it; see BuySellCCI and
CCIx for an example.--------------hth,daveHi
Dave,I started working with it...very nice, structured, work...this
will helpfolks learn AFL as well as general programming design, I
believe..so far, i am having a bit of trouble with the 'dynamic'
True/False parameterbeing fed to one of my indicators---but i suspect this
is my problem notyours:BuySellRule(True, best_p1,
best_p2);-----------------------------------^Bad args.0-th
argument of function call has invalid (or unsupported) typeI don't
have to specifically set 'dynamic'; do I?thanks-john-----
Original Message ----- From: Dave MerrillTo:
amibroker@xxxxxxxxxxxxxxxSent: Thursday, October 23, 2003 6:32
PMSubject: RE: [amibroker] Auto-optimization AFL
uploadedthanks, appreciate it (:-).so, did you figure out
how we can all be millionaires by morning with ityet? or at least learn
something about something?you probably noticed this, but the way it
comes set up, it's not usingequity feedback to optimize with, but net bars
on the right side of themarket. my initial impression after I built that
was that it worked betterthan equity, but since then, I've concluded that,
guess what, it depends. soanyway, try the other scoring algorithm too, if
you haven't already.keep me posted (:-).anyone else playing
with this thing?daveI've downloaded it and run it about a dozen
times. What you've done is
veryimpressive.Thanks,Howard-----Original
Message-----From: Dave Merrill [mailto:dmerrill@xxxxxxx]Sent:
Wednesday, October 22, 2003 1:11 PMTo:
amibroker@xxxxxxxxxxxxxxxSubject: RE: [amibroker] Auto-optimization AFL
uploadedforgot to say it howard, but I'm very interested in what you
think about it,and any results you get from fiddling with
it.daveSend BUG REPORTS to bugs@xxxxxxxxxxxxxSend
SUGGESTIONS to
suggest@xxxxxxxxxxxxx-----------------------------------------Post
AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx(Web page: <A
href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check
group FAQ at:<A
href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.htmlYour
use of Yahoo! Groups is subject to the Yahoo! Terms of
Service.Yahoo! Groups
SponsorADVERTISEMENTSend BUG REPORTS to
bugs@xxxxxxxxxxxxxSend SUGGESTIONS to
suggest@xxxxxxxxxxxxx-----------------------------------------Post
AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx(Web page: <A
href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check
group FAQ at:<A
href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.htmlYour
use of Yahoo! Groups is subject to the Yahoo! Terms of Service.Send
BUG REPORTS to bugs@xxxxxxxxxxxxxSend SUGGESTIONS to
suggest@xxxxxxxxxxxxx-----------------------------------------Post
AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx (Web page: <A
href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check
group FAQ at: <A
href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html
Your use of Yahoo! Groups is subject to the <A
href="">Yahoo! Terms of Service.
Yahoo! Groups Sponsor
Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html
Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
|