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 [email protected], "Edward Pottasch" <empotta...@...> 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: [email protected]
> 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 [email protected], "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
> >
>