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

[amibroker] Re: BarCount Loop with Log File Dump Does not Work



PureBytes Links

Trading Reference Links

Thanks Mike, I have some systems like that too, based on that KB code.

But do you have any idea why my current code does not work? What puzzles me is that I've already built these types of barcount stats dumps before, and they always worked. In fact, looking at this current system vs my previous ones, I don't see any difference. In fact, the current one is simpler yet just does not work.

I'm sure it's something simple that I am overlooking. I need to do it the way I am doing it, vs using the CBT, for reasons that have to do with my trading system. So I need to get this strategy to work.



--- In amibroker@xxxxxxxxxxxxxxx, "Mike" <sfclimbers@xxx> wrote:
>
> Ozzy,
> 
> You can probably do what you want from within custom backtester code. You can track single bar values bar by bar, or construct a running tally bar by bar, storing the results in a composite symbol.
> 
> http://www.amibroker.com/kb/2008/05/19/historical-portfolio-backtest-metrics/
> 
> Paolo recently posted something similar here:
> http://finance.groups.yahoo.com/group/amibroker/message/137124
> 
> Mike
> 
> --- In amibroker@xxxxxxxxxxxxxxx, "ozzyapeman" <zoopfree@> wrote:
> >
> > Hello,
> > 
> > Hoping someone can help with debugging this trading system code.
> > I'vebeen building BarCount loops for the better part of 9 months now,
> > andthought I had the hang of it. Yet this simple problem seems to have
> > thebetter of me!
> > 
> > First, a simple test trading code that does work. The followingcode
> > tests some entry and exit ranges, and takes a position when agiven range
> > is true. I optimize over the various ranges, as well asLong/Short to see
> > what works best. I am testing Forex, and left out thebacktester settings
> > for simplicity here.
> > 
> > If you optimize or backtest this code, over any given month, you will
> > see output as expected:
> > 
> > //-----------------------------------------------------------------
> > //      Variables for Optimization
> > //-----------------------------------------------------------------
> > 
> > 
> > LongOrShort = Optimize("LongOrShort", 1, 1, 2, 1);
> > EntryNum    = Optimize("EntryNum",    1, 1, 3, 1);
> > ExitNum     = Optimize("ExitNum",     1, 1, 3, 1);
> > 
> > 
> > //-----------------------------------------------------------------
> > //      Set up Range Tests for Entries and Exits
> > //-----------------------------------------------------------------
> > 
> > myMA1       = MA(Close, 7);
> > 
> > Entry1      = Close >= myMA1 + 0.0001  && Close < myMA1 + 0.0003;
> > Entry2      = Close >= myMA1 + 0.0003  && Close < myMA1 + 0.0005;
> > Entry3      = Close >= myMA1 + 0.0005;
> > 
> > Exit1       = Close >= myMA1 + 0.0002  && Close < myMA1 + 0.0006;
> > Exit2       = Close >= myMA1 + 0.0006  && Close < myMA1 + 0.0010;
> > Exit3       = Close >= myMA1 + 0.0010;
> > 
> > 
> > Entry       = VarGet("Entry" + EntryNum);
> > Exit        = VarGet("Exit"  + ExitNum );
> > 
> > 
> > //-----------------------------------------------------------------
> > //      Trading System
> > //-----------------------------------------------------------------
> > 
> > Buy  = Short = 0;
> > 
> >     if(LongOrShort == 1)
> > 
> >           Buy   = Entry;
> > 
> >     else
> > 
> >         Short = Entry;
> > 
> > 
> > Cover = Sell = Exit;
> > 
> > So now all I want to do is run the exact same code as above, but with
> > aBarCount loop, so that I can calculate some basic statistics for
> > eachtrade over the optimization parameters. For example, I might want
> > tofind out the average profit for trades, the frequency of which
> > rangeswere used for entries, etc. While these trivial examples may
> > beavailable in the AB optimization report, my real-world use involves
> > allsorts of different stats that are not available.
> > 
> > After I calculate the stats, I want to dump them to a log file. Pretty
> > simple in theory.
> > 
> > But the following code suffers from these problems:
> > 
> > 
> >     1. If you run an optimization, all results are zero, instead of being
> > identical to the above code.
> >     2. If you run a backtest, no trades are ever taken, instead of
> > behaving identical to the above code
> >     3. The log file contains repeated rows. It should only contain one
> > row per optimization sweep
> >     4. The ProfitAvg stat is not calculated correctly. Entries are all
> > -10 Billion or so (!)
> > 
> > Can anyone spot why this is not working? I get no errors, and
> > tracesindicate that my loops are being correctly processed. Any input
> > muchappreciated!
> > 
> > 
> > //-----------------------------------------------------------------
> > //      Variables for Optimization
> > //-----------------------------------------------------------------
> > 
> > 
> > LongOrShort = Optimize("LongOrShort", 1, 1, 2, 1);
> > EntryNum    = Optimize("EntryNum",    1, 1, 3, 1);
> > ExitNum     = Optimize("ExitNum",     1, 1, 3, 1);
> > 
> > 
> > //-----------------------------------------------------------------
> > //      Set up Range Tests for Entries and Exits
> > //-----------------------------------------------------------------
> > 
> > myMA1       = MA(Close, 7);
> > 
> > Entry1      = Close >= myMA1 + 0.0001  && Close < myMA1 + 0.0003;
> > Entry2      = Close >= myMA1 + 0.0003  && Close < myMA1 + 0.0005;
> > Entry3      = Close >= myMA1 + 0.0005;
> > 
> > Exit1       = Close >= myMA1 + 0.0002  && Close < myMA1 + 0.0006;
> > Exit2       = Close >= myMA1 + 0.0006  && Close < myMA1 + 0.0010;
> > Exit3       = Close >= myMA1 + 0.0010;
> > 
> > 
> > Entry       = VarGet("Entry" + EntryNum);
> > Exit        = VarGet("Exit"  + ExitNum );
> > 
> > 
> > //-----------------------------------------------------------------
> > //      Trading System with BarCount Loop
> > //-----------------------------------------------------------------
> > 
> > 
> > FileName     = "F:\\Stats Log File.csv";
> > 
> > wasLong      = wasShort       = BuySignal    =
> > ShortSignal  = SellSignal     = CoverSignal  =
> > SoldCount    = CoverCount     = EntryFreq    = 0;
> > 
> > ValueAtBuy   = ValueAtShort   = ProfitLevel  =
> > ProfitSum    = ProfitAvg      = Null;
> > 
> > LongContractCount  = 0;
> > ShortContractCount = 0;
> > 
> > 
> > for (i = 0; i < BarCount-1; i++)
> > {
> >    wasLong  =  LongContractCount  > 0;
> >    wasShort =  ShortContractCount > 0;
> > 
> >    // Long Exit
> >    if (wasLong && Exit[i])
> >    {
> >       SellSignal[i] = 1;
> >       LongContractCount = 0;
> >       SoldCount++;
> >       ProfitLevel = SellPrice[i] - ValueAtBuy;
> >       ProfitSum  += ProfitLevel;
> >     }
> > 
> >     // Short Exit
> >     if (wasShort && Exit[i])
> >     {
> >       CoverSignal[i] = 1;
> >       ShortContractCount = 0;
> >       CoverCount++;
> >       ProfitLevel = ValueAtShort - SellPrice[i];
> >       ProfitSum  += ProfitLevel;
> >      }
> > 
> > 
> >    // Long entry
> >     if ( Entry[i] && LongOrShort == 1 )
> >     {
> >        BuySignal[i] = 1;
> >        EntryFreq++;
> >        LongContractCount = 1;
> >        ValueAtBuy = BuyPrice[i];
> >      }
> > 
> >    // Short entry
> >     if ( Entry[i] && LongOrShort == 2 )
> >     {
> >        ShortSignal[i] = 1;
> >        EntryFreq++;
> >        ShortContractCount = 1;
> >        ValueAtShort = ShortPrice[i];
> >      }
> > }
> > 
> > Sell  = SellSignal;
> > Cover = CoverSignal;
> > Buy   = BuySignal;
> > Short = ShortSignal;
> > 
> > 
> > //-----------------------------------------------------------------
> > //      Calculate Some Basic Stats
> > //-----------------------------------------------------------------
> > 
> > 
> > if(LongOrShort == 1)
> > 
> >     ProfitAvg = ProfitSum/SoldCount;
> > 
> > else
> > 
> >     ProfitAvg = ProfitSum/CoverCount;
> > 
> > 
> > 
> > //-----------------------------------------------------------------
> > //      Create a Text Header Row for the Log File
> > //-----------------------------------------------------------------
> > 
> > SetCustomBacktestProc( "" );
> > 
> > if ( Status( "ActionEx" ) == actionExOptimizeSetup )
> > {
> >      _TRACE( "Optimize Begin" );
> >      fh = fopen( FileName, "w" );
> > 
> >      if ( fh )
> >      {
> >         fputs( "LongOrShort, Entry, Exit, EntryFreq, ProfitAvg\n", fh );
> >         fclose( fh );
> >      }
> > }
> > 
> > 
> > //-----------------------------------------------------------------
> > //      Dump the Stats Values to the Log File
> > //-----------------------------------------------------------------
> > 
> > 
> > fh = fopen( FileName, "a" );
> > 
> > if ( fh )
> > {
> >     fputs( StrFormat( "%.0f,%.0f,%.0f,%.0f,%.5f\n",
> >                      LongOrShort, Entry, Exit, EntryFreq, ProfitAvg), fh
> > );
> >     fclose( fh );
> >    }
> >
>




------------------------------------

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