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
>   >
>


Reply via email to