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

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



PureBytes Links

Trading Reference Links

My experience with applystop shows me that these functions are good 
with volatile FALSE.
once you want complex stops with differents level,
you want visualize and control the stops
you want sigscale

loops are better , at least for me...


> Hi Stephane,
> 
> Thank you very much for your suggestion to put into a function. I 
hadn't 
> thought of that.
> 
> At the moment, there appears to be no simple answer.
> 
> I will certainly consider putting it into a function if after I 
package 
> everything up for support to test and they find it cannot be done 
by the 
> applystop.
> 
> Thank you for your time.
> 
> Best regards
> Alan
> 
> Stephane Carrasset wrote:
> 
> >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
> >>>>>>       
> >>>>>>
> >>>>>>            
> >>>>>>
> >>>      
> >>>




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