I was trying to say that you can substitute the code snippets that I
gave into the original code that you copied from (i.e. replace the
newDay array with a newWeek or newMonth array).
Below is a complete working program for your example strategy. Comment
out the weekly setting and uncomment the monthly setting to see it
applied to a monthly restriction. Look at the Trace tab in the Log
window to see the output.
Required reading would
behttp://www.amibroker.org/userkb/2008/03/16/amibroker-custom-backtester\
-interface-2/
<http://www.amibroker.org/userkb/2008/03/16/amibroker-custom-backtester-\
interface-2/>
SetTradeDelays(0, 0, 0, 0);
SetPositionSize(2, spsPercentOfEquity);

FastMA =  MA(Close, 5);
SlowMA = MA(Close, 10);

Buy = Cross(FastMA, SlowMA);
BuyPrice = Close;

Sell = Cross(SlowMA, FastMA);
SellPrice = Close;

SetCustomBacktestProc("");

if (Status("action") == actionPortfolio) {
    _TRACE("Begin custom backtest");

    bo =  GetBacktesterObject();
    bo.PreProcess();

     /* Weekly */
    weekDays = DayOfWeek();
    newPeriod = weekDays < Ref(weekDays, -1);

     /* Monthly
    months = Month();
    newPeriod = months != Ref(months, -1);
    */

    dates =  DateTime();
    hadTradeThisPeriod = False;

     for (i = 0; i < BarCount; i++) {
       if (newPeriod[i]) {
          _TRACE("");
          _TRACE("Begin new period.");
          hadTradeThisPeriod = False;
       }

        _TRACE("Bar: " + i + ", " + NumToStr(dates[i], formatDateTime));

        for (sig = bo.GetFirstSignal(i); sig; sig = bo.GetNextSignal(i))
{
          if (sig.IsEntry() && sig.IsLong()) {
             if (hadTradeThisPeriod) {
                sig.PosSize = 0;
                _TRACE("  Skipped signal for " + sig.Symbol);
             } else {
                hadTradeThisPeriod = True;
                _TRACE("  Accepted signal for " + sig.Symbol);
             }
          }
       }

       bo.ProcessTradeSignals(i);
    }

    bo.PostProcess();
}
Mike
--- In [email protected], "readshark" <readsh...@...> wrote:
>
> Mike,
>
> Maybe I just do not know how to implement your code, but I do not
understand what to do with it.
>
> If you just had a simple MA Crossover script like:
>
> Buy = Cross(FastMA, SlowMA);
> Sell = Cross(SlowMA, FastMA);
>
> How would you implement your code into this?
>
> Thank you for your patience.
>
> --- In [email protected], "Mike" sfclimbers@ wrote:
> >
> > Weekly:
> >
> > weekDays = DayOfWeek();
> > newWeek = weekDays < Ref(weekDays, -1);
> >
> > Monthly:
> >
> > months = Month();
> > newMonth = months != Ref(months, -1);
> >
> > Mike
> >
> > --- In [email protected], "readshark" <readshark@> wrote:
> > >
> > > I am looking to add some code to one of my trading systems to
limit the number of trades to x amount per week.
> > >
> > > I found a code that here that would limit the trades to one per
day.  Any idea how I alter this to only get one trade on a longer time
frame, preferably a week?
> > >
> > > Thank you in advance.
> > >
> > > Here is the link and the code I found. ->
http://www.mail-archive.com/[email protected]/msg23006.html
> > >
> > > for (i = 0; i < BarCount; i++)
> > > {
> > >     if (newDay[i])
> > >         hadTradeToday = False;
> > >     for (sig = bo.GetFirstSignal(i); sig; sig =
bo.GetNextSignal(i))
> > >     {
> > >         if (sig.IsEntry() && sig.IsLong())
> > >         {
> > >             if (hadTradeToday)
> > >                 sig.PosSize = 0;
> > >             else
> > >                 hadTradeToday = True;
> > >         }
> > >     }
> > >     bo.ProcessTradeSignals(i);
> > > }
> > >
> >
>

Reply via email to