Hi
I have been fighting with AFL to write a sample program that let us combine two
systems, as I told in a recent thread.
I haven“t been able.
The idea is easy: two type of buy conditions, one in the crossing of two
averages, the other after falling four bars, using EOD bars.
Both systems uses the same pool of money, and are PORTFOLIO SYSTEMS, buying as
far as ten stocks, 10% of the money every purchase.
THE BUY condition is easy to combine. But I have to tell AFL that if the last
BUY as been using the First condition, the SELL has to be checked with the
crossing of the averages again.
And if the last BUY condition as been the second, the SELL condition has to be
another one. (2 bars away from buying day).
After trying it many times without using Custom backtester interface, I think
the only way is using backtester interface.
So I write the exact code, so anybody can test it and fill the custom backtest
part..
I think it should be easy; the problem is that I don't really understand the
logic of the custom backtester, so I don't know what to do
Any suggestion will be very very much appreciated..
//BEGGINING OF CODE------------------------
posQty=Param("Posiciones simultaneas",10,1,20,1);
CapMinimo=Param("Cap minimo",2,1,200,5);
SetOption("InitialEquity", 100000 );
SetOption("AllowPositionShrinking", True );
SetOption("MaxOpenPositions", PosQty );
SetOption ("accountmargin",100);
PositionSize = -100/(posqty);
Buy=Sell=0;
SetTradeDelays(1,1,1,1);
//FIRST SYSTEM-----------------------------------
Buy1= Cross(MA(C,15),MA(C,70));
BuyPrice1=Open;
SellA=Cross(MA(C,70),MA(C,15));
SellPriceA=Open;
//SECOND SYSTEM-----------------------------------
Buy2= C<O AND Ref(C,-1)<Ref(O,-1) AND Ref(C,-2)<Ref(O,-2) AND
Ref(C,-3)<Ref(O,-3);
SellB= Ref(Buy,-2);
//BUY---------------------------------
Buy=IIf(Buy1,True,IIf(Buy2,True,False));
BuyPrice=Open;
nombre1=Name();
typeBuy=IIf(Buy1,1,IIf(Buy2,2,0));//if buy1, array 'typebuy' is 1. If Buy2, is
2. Else is 0
n=BarsSince(Buy);
//NEXT TWO SENTENCES DOES NOT WORK
//Sell= IIf( Ref(typebuy,-n)==1, Cross(MA(C,15),MA(C,70)),False);
//Sell= IIf( NOT Sell AND Ref(Buy2,-n), Ref(Buy,-2),False);
//INSTEAD, USE OF CUSTOMBACKTESTER
SetCustomBacktestProc("");
if (Status("action") == actionPortfolio) {
bo = GetBacktesterObject(); // Get backtester object
bo.PreProcess(); // Do pre-processing (always required)
for (i = 0; i < BarCount; i++) // Loop through all bars
{
for (sig = bo.GetFirstSignal(i); sig; sig = bo.GetNextSignal(i))
{
if (sig.isentry() AND Buy1[i])
//mmmmm ????
} // End of for loop over signals at this bar
bo.ProcessTradeSignals(i); // Process trades at bar (always
required)
} // End of for loop over bars
bo.PostProcess(); // Do post-processing (always required)
}
PositionScore=Ref(StochK(15,3),-1);
Buy=ExRem(Buy,Sell); Sell=ExRem(Sell,Buy);
PlotShapes(IIf(Ref(Buy,-1),shapeUpArrow,shapeNone),colorBlue,0,L,-15);
PlotShapes(IIf(Ref(Buy,-1),shapeHollowSquare
,shapeNone),colorBlue,0,BuyPrice,0);
PlotShapes(IIf(Ref(Sell,-1),shapeDownArrow,shapeNone),colorRed,0,H,-15);
PlotShapes(IIf(Ref(Sell,-1),shapeHollowSquare,shapeNone),colorRed,0,SellPrice,0);
//---------------END OF CODE--------------