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

RE: [amibroker] Auto-optimization AFL uploaded



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.