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

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



PureBytes Links

Trading Reference Links

Hi Stephane,

nice work, thank you !

Regards

Thomas
www.tradingbasis.com


 


-----Original Message-----
From: amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx] On Behalf
Of Stephane Carrasset
Sent: Saturday, May 28, 2005 6:48 PM
To: amibroker@xxxxxxxxxxxxxxx
Subject: [amibroker] Re: 'Simple!' dynamic applystop help please

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/