[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] Re: 'Simple!' dynamic applystop help please



PureBytes Links

Trading Reference Links

If you want you can write it as a function
MyApplyStop
(BuyCond,Entryprice,Exitprice,stoploss,stoptrail,stopprofit)
and # include it in your code.

stephane





> Thank you for your code.
> 
> With something so apparently simple I was really hoping to it done 
> without looping code.
> 
> Regards
> Alan
> 
> Stephane Carrasset wrote:
> 
> >Hello,
> >I was often dispointed with applystops, so i have written my own 
loop
> >to manage differents exits.
> >of course the code is a "little" long, but if you take some time 
to 
> >try it you must find it usefull, below is an example to get two 
> >differents profit, so you can change it to get two differents 
stoploss
> >
> >Stephane
> >
> >Title= "Rem afl";
> >Setup=Cross( MFI(3),0);
> >
> >/*****************************/
> >BuyCond= Ref(Setup,-1);
> >Entryprice=O;
> >Exitprice=Low;// or Close
> >Stoploss=LLV(L,3)-0.75*ATR(10) ;
> >Stoptrail=LLV(L,3)-1.75*ATR(10);
> >Pf=7;
> >Stopprofit=(1+(Pf/100))*Entryprice;
> > 
> >
> >//Initialize
> >Buy=Sell=0;
> >SellPr=Null;
> >TrailPr=Null;
> >TargetPr=Null;
> >StopLossPr=Null;
> >lastbuyprice=0;
> >stoplossprice=0;
> >profitprice=0;
> >trailingprice=0;
> >oldtrailingprice=0;
> >trailingstop=0;
> >Count=0;
> >
> >Empty=IsNull(stoploss) OR IsNull(stoptrail) OR IsNull(stopprofit);
> >
> >for( i = 0; i < BarCount; i++ )
> >{
> >	if(buycond[i] AND NOT(Empty[i])) 
> >	{
> >		Buy[i]=1;
> >		Sell[i]=0;
> >
> >	}
> >/*Remove Buy signals if trade was already initiated*/
> >	if(lastbuyprice>0 )
> >	{
> >		Buy[i]=0;
> >		Count++;
> >	}
> >
> >/*get the buyprice AND the stoplossprice AND the profitprice*/
> >	if (lastbuyprice == 0 )
> >	{
> >		if( Buy[ i ] == 1)
> >		{
> >			trailingstop = 0;
> >			trailingprice  = 0;
> >			oldtrailingprice = 0;
> >			lastbuyprice= entryprice[i];
> >			stoplossprice=stoploss[i];
> >			profitprice=stopprofit[i];
> >		}
> >	}
> >
> >//	CONDITIONS EXIT
> >
> >	if(lastbuyprice>0)
> >	{
> >//StopLoss price
> >		StopLossPr[i]=stoplossprice;
> >//stopTrail price
> >		trailingprice = stoptrail[i] ;
> >		if (trailingprice < oldtrailingprice)
> >		trailingprice = oldtrailingprice;
> >		else
> >		oldtrailingprice = trailingprice;
> >		TrailPr[i]=trailingprice; // pour connaitre l'array 
> >du trailing price init;
> >//Target Price array
> >		if(Count<5)
> >		TargetPr[i]=profitprice;
> >		else
> >		TargetPr[i]=profitprice + profitprice-trailingprice;
> >
> >		if (Exitprice[i] <= Max
> >(stoplossprice,trailingprice ))//stoploss
> >		{
> >						if(Exitprice[i]==Low
> >[i])
> >						{
> >							if(Open[i]
> ><=Max(stoplossprice,trailingprice )) 
> >								SellPr
> >[i]=Open[i];
> >							else
> >								SellPr
> >[i]=Max(stoplossprice,trailingprice );
> >						}
> >						else
> >						{
> >							if(exitprice
> >[i]==Close[i])
> >								SellPr
> >[i]=Close[i];
> >						}
> >
> >						Sell[i]=1;
> >						lastbuyprice=0;
> >						stoplossprice=0;
> >						profitprice=0;
> >						trailingprice  = 0;
> >						oldtrailingprice = 0 ;
> >						trailingstop=0;
> >						Count=0;
> >		}
> >		else
> >		{
> >			if( High[i] > TargetPr[i] ) 
> >//	trailingstop  stoploss
> >			{
> >				if(Open[i]> TargetPr[i] ) 
> >					SellPr[i]=Open[i];
> >				else
> >					SellPr[i]= TargetPr[i] ;
> >					
> >				
> >					Sell[i]     = 1;
> >					lastbuyprice  = 0;
> >					stoplossprice  = 0;
> >					profitprice   = 0;
> >					trailingprice  = 0;
> >					oldtrailingprice = 0;
> >					trailingstop=0;
> >					Count=0;
> >			}
> >		}
> >	}
> >
> >	if(Sell[i]==0)
> >	SellPr[i]=Close[i]; 		
> >	nCpt[i]=Count;	
> >}
> >
> >
> >Plot(Close,"Close",IIf( Buy, colorGreen, IIf(Sell , 
> >colorRed ,1 )),64);
> >PlotShapes(IIf(Buy,shapeUpArrow,shapeNone),colorGreen,0,L,-20); 
> >PlotShapes(IIf(Sell,shapeDownArrow,shapeNone),colorRed,0,H,-20);  
> >
> >Plot(TrailPr,"",colorGreen,1);
> >Plot(StopLossPr,"",colorRed,1);
> >Plot(TargetPr,"",colorBlue,1);
> >Plot(ValueWhen(Sell,SellPr),"SellPr",colorYellow,1);
> >//Plot(ncpt,"",colorBlue,1);
> >  
> >  
> >
> >>Thank you for pointing out the flaw. I changed the code from day
() 
> >>    
> >>
> >to
> >  
> >
> >>datenum() which gives a unique day for the trade.
> >>
> >>
> >>StopLvl = 0.0030;
> >> 
> >>Buydate = ValueWhen(Buy,Datenum()); // Determine buy date
> >> 
> >>StopLvlWid = 0.0010;
> >> 
> >>StopLvl = IIf( Datenum()!=Buydate, StopLvl+StopLvlWid, StopLvl);
> >> 
> >>ApplyStop(stopTypeLoss, stopModePoint, StopLvl, True, True);
> >>
> >>
> >>With an addcolumn, I can see StopLvl changes from 0.0030 to 0.0040
> >>when the date changes but the trade is still stopped out at 
0.0030 
> >>    
> >>
> >on
> >  
> >
> >>the following day.
> >>
> >>Still puzzled.
> >>
> >>Regards
> >>Alan
> >>
> >>
> >>--- In amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" 
<amibroker@xxxx>
> >>wrote:
> >>    
> >>
> >>>Hello,
> >>>
> >>>Your formula logic is flawed.
> >>>
> >>>Day() represents DAY NUMBER (1-31) not date,
> >>>so
> >>>ValueWhen(Buy,Day())
> >>>will be true EVERY MONTH when day is the same as day of the entry
> >>>(previous month(s))
> >>>
> >>>
> >>>Best regards,
> >>>Tomasz Janeczko
> >>>amibroker.com
> >>>----- Original Message ----- 
> >>>From: "firehorse888uk" <firehorse888uk@xxxx>
> >>>To: <amibroker@xxxxxxxxxxxxxxx>
> >>>Sent: Friday, May 27, 2005 7:50 PM
> >>>Subject: [amibroker] 'Simple!' dynamic applystop help please
> >>>
> >>>
> >>>      
> >>>
> >>>>Hi,
> >>>>
> >>>>I'm backtesting forex.
> >>>>
> >>>>On the day of the trade, I want the stop loss to be 30pts.
> >>>>On subsequent days, I want the stop loss to be 40pts.
> >>>>Edited relevant section of code follows:
> >>>>
> >>>>StopLvl = 0.0030;
> >>>>
> >>>>Buydate = ValueWhen(Buy,Day()); // Determine buy day
> >>>>
> >>>>StopLvlWid = 0.0010;
> >>>>
> >>>>StopLvl = IIf( Day()!=Buydate, StopLvl+StopLvlWid, StopLvl);
> >>>>
> >>>>ApplyStop(stopTypeLoss, stopModePoint, StopLvl, True, True);
> >>>>
> >>>>
> >>>>Can anyone see why the above code doesn't work.
> >>>>I've tracked StopLvl and it changes correctly for the following
> >>>>        
> >>>>
> >>day.
> >>    
> >>
> >>>>I've set dynamic level to true so I don't understand why the 
> >>>>        
> >>>>
> >trade
> >  
> >
> >>>>stops out at 30pts rather than 40pts on subsequent days.
> >>>>
> >>>>Thanks
> >>>>Alan
> >>>>        
> >>>>
> >
> >
> >
> >
> >
> >Please note that this group is for discussion between users only.
> >
> >To get support from AmiBroker please send an e-mail directly to 
> >SUPPORT {at} amibroker.com
> >
> >For other support material please check also:
> >http://www.amibroker.com/support.html
> >
> > 
> >Yahoo! Groups Links
> >
> >
> >
> > 
> >
> >
> >
> >  
> >





------------------------ Yahoo! Groups Sponsor --------------------~--> 
In low income neighborhoods, 84% do not own computers.
At Network for Good, help bridge the Digital Divide!
http://us.click.yahoo.com/EpW3eD/3MnJAA/cosFAA/GHeqlB/TM
--------------------------------------------------------------------~-> 

Please note that this group is for discussion between users only.

To get support from AmiBroker please send an e-mail directly to 
SUPPORT {at} amibroker.com

For other support material please check also:
http://www.amibroker.com/support.html

 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/amibroker/

<*> To unsubscribe from this group, send an email to:
    amibroker-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/