Ed thanks. Wow, that is complicated. I'll look over your code and see
if I can understand how to modify it to fit my needs. I was hoping that there
would be a simpler solution .....
Larry
--- In amibroker@xxxxxxxxxps.com,
"Edward Pottasch" <empottasch@...> wrote:
>
>
hi,
>
> I can only suggest a way by writing your own stopcode, so
it is a bit complicated maybe. I would not know how to do this using
Applystop, you might be able to solve it using the ReEntryDelay parameter but
I wouldn't know how.
>
> What you need to do is trick the
backtester to sell when an actual sell signal occurs, so at the cross defined
by sell = cross(ma(c,50),c) but use the sell price that follows from the
5% stop. This way the backtester will think it still owns the stock while in
reality you already sold at the stop price. You will have to set
SetOption("PriceBoundChecking", False);
>
> I wrote
the code see below. Also a chart is added. In the chart you see a buy above
the green arrow. Three bars later the stop is hit and the stock is sold at the
price of the yellow circle. However, the actuall sell defined by the cross
occurs more than 4 months later. This is where you tell the backtester it is
sold. So the backtester thinks it is sold 4 months later for the price shown
at the stopline (or yellow circle).
>
> Now lets hope I didn't
misunderstood your question :)
>
> rgds, Ed
>
> p.s.
didn't do a backtest check.
>
>
>
>
>
> procedure sell_proc(Buy,Sell,stopPercentage)
> {
>
> global BuyAdjusted;
> global BuyPriceAdjusted;
> global SellAdjusted;
> global SellPriceAdjusted;
>
global longStopArray;
> global SellHelp;
> global SellPriceHelp;
>
> BuyAdjusted = 0;
> BuyPriceAdjusted = 0;
>
SellAdjusted = 0;
> SellPriceAdjusted = 0;
> longStopArray =
Null;
> SellPriceHelp = 0;
> SellHelp = 0;
>
>
delay = 1;
> slip = 0.0;
>
> for( i = 1; i < BarCount;
i++ )
> {
>
> if ( Buy[ i ])
> {
>
>
BuyAdjusted[ i ] = 1;
> BuyPriceAdjusted[ i ] = BuyPrice[ i ] + slip;
> longStopArray[ i ] = BuyPriceAdjusted[ i ] - BuyPriceAdjusted[ i
]/100*stopPercentage;
> flag = 0;
>
> for (j = i +
delay; j < BarCount; j++)
> {
>
> longStopArray[ j ] =
longStopArray[ i ];
>
> if (L[ j ] < longStopArray[ j ] AND
flag == 0)
> {
>
> flag = 1;
> sellPriceHelpVar =
Min(O[ j ],longStopArray[ j ]);
> SellPriceHelp[ j ] = Min(O[ j
],longStopArray[ j ]);
> SellHelp[ j ] = 1;
>
> }
> else if (Sell[ j ] AND flag == 0)
> {
>
>
SellAdjusted[ j ] = 1;
> SellPriceAdjusted[ j ] = SellPrice[ j ] -
slip;
> i = j;
> break;
>
> }
> else if
(Sell[ j ] AND flag == 1)
> {
>
> SellAdjusted[ j ] = 1;
> SellPriceAdjusted[ j ] = sellPriceHelpVar - slip;
> i = j;
> break;
>
> }
> else if (j == BarCount - 1)
> {
>
> i = BarCount;
>
> }
> }
> }
>
> }
>
> }
>
>
>
SetOption("PriceBoundChecking", False);
>
SetBarsRequired(10000,10000);
>
SetOption("MaxOpenPositions", 3 );
>
SetTradeDelays(0,0,0,0);
> PositionSize = -100/3;
> Buy =
Cross(C,MA(C,200)); Buy = Ref(Buy,-1); BuyPrice = O;
> Sell =
Cross(MA(C,50),C); Sell = Ref(Sell,-1); SellPrice = O;
>
> stopPercentage = 5;
>
sell_proc(Buy,Sell,stopPercentage);
>
> Buy =
BuyAdjusted;
> BuyPrice = BuyPriceAdjusted;
> Sell =
SellAdjusted;
> SellPrice = SellPriceAdjusted;
>
>
SetChartOptions(0, chartShowDates);
>
Plot(C,"Last=",colorBlack,64);
>
>
PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-15);
>
PlotShapes(IIf(Buy,shapeHollowUpArrow,shapeNone),colorWhite,0,L,-15);
>
PlotShapes(IIf(Buy,shapeSmallCircle,shapeNone),colorWhite,0,BuyPrice,0);
>
>
PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-15);
>
PlotShapes(IIf(Sell,shapeHollowDownArrow,shapeNone),colorWhite,0,H,-15);
>
PlotShapes(IIf(Sell,shapeSmallCircle,shapeNone),colorWhite,0,SellPrice,0);
>
>
PlotShapes(IIf(SellHelp,shapeSmallDownTriangle,shapeNone),colorRed,0,H,-15);
>
PlotShapes(IIf(SellHelp,shapeHollowSmallDownTriangle,shapeNone),colorWhite,0,H,-15);
>
PlotShapes(IIf(SellHelp,shapeCircle,shapeNone),colorYellow,0,SellPriceHelp,0);
>
>
Plot(LongStopArray,"longStopArray",colorWhite,1);
>
Plot(MA(C,200),"MA(C,200)",colorYellow,1);
>
Plot(MA(C,50),"MA(C,50)",colorAqua,1);
>
>
>
>
> ----- Original Message -----
> From: onelkm
> To: amibroker@xxxxxxxxxps.com
> Sent: Sunday, March 08, 2009 2:24 PM
> Subject: [amibroker] Re:
How to control delaying "some" new buys?
>
>
> Again ...
Can anyone suggest a way to do this?
>
> --- In amibroker@xxxxxxxxxps.com,
"onelkm" <LKMCD1@> wrote:
> >
> > In the example
below, I buy 3 stocks in a watch list based on the Buy condition. Let's say
stock 1 stopped out, so the next day the system buys a new stock, stock 1A, to
replace it and again holds 3 stocks. But, I want to only buy and replace stock
1 after stock 1 has met the sell condition, which could be several days later.
Thus the system would only hold 2 stocks for a period of time until the sell
condition is met. Is there a way to do this?
> >
> >
SetTradeDelays(1,1,1,1);
> > PositionSize = -100/3;
> >
Buy = Cross(C,MA(C,200));
> > Sell =
Cross(MA(C,50),C);
> > ApplyStop(stopTypeLoss,
stopModePercent, 5);
> >
> > Thanks in advance
>
> Larry
> >
>