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);
> > > }
> > >
> >
>