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

Re: [amibroker] Changing the stop loss depending on the stock price?



PureBytes Links

Trading Reference Links

Hi,

Ok I am trying to experiment with stoploss and profittarget to try and understand how it works.  Here is the example given in the help files:

Buy = Cross( MA( C, 10 ), MA( C, 50 ) );


Sell = 0;
// the system will exit
// 50% of position if FIRST PROFIT TARGET stop is hit
// 50% of position is SECOND PROFIT TARGET stop is hit
// 100% of position if TRAILING STOP is hit
FirstProfitTarget = 10; // profit
SecondProfitTarget = 20; // in percent
TrailingStop = 10; // also in percent
priceatbuy=0;
highsincebuy = 0;
exit = 0;
for( i = 0; i < BarCount; i++ )
{
if( priceatbuy == 0 AND Buy[ i ] )
{
priceatbuy = BuyPrice[ i ];
}
if( priceatbuy > 0 )
{
highsincebuy = Max( High[ i ], highsincebuy );
if( exit == 0 AND
High[ i ] >= ( 1 + FirstProfitTarget * 0.01 ) * priceatbuy
)
{
// first profit target hit - scale-out
exit = 1;
Buy[ i ] = sigScaleOut;
}
if( exit == 1 AND
High[ i ] >= ( 1 + SecondProfitTarget * 0.01 ) *
priceatbuy )
{
// second profit target hit - exit
exit = 2;
SellPrice[ i ] = Max( Open[ i ], ( 1 + SecondProfitTarget *
0.01 ) * priceatbuy );
}
if( Low[ i ] <= ( 1 - TrailingStop * 0.01 ) * highsincebuy )
{
// trailing stop hit - exit
exit = 3;
SellPrice[ i ] = Min( Open[ i ], ( 1 - TrailingStop * 0.01


) * highsincebuy );
}
if( exit >= 2 )
{
Buy[ i ] = 0;
Sell[ i ] = exit + 1; // mark appropriate exit code
exit = 0;
priceatbuy = 0; // reset price
highsincebuy = 0;
}
}
}
SetPositionSize( 50, spsPercentOfEquity );
SetPositionSize( 50, spsPercentOfPosition * ( Buy == sigScaleOut )
); // scale out 50% of position


I am trying to experiment with this, but there is something I just don't understand:  Could someone explain to me in english what this code mean?

exit = 0;
for( i = 0; i < BarCount; i++ )
{
if( priceatbuy == 0 AND Buy[ i ] )
{
priceatbuy = BuyPrice[ i ];
}
if( priceatbuy > 0 )
{
highsincebuy = Max( High[ i ], highsincebuy );
if( exit == 0 AND
High[ i ] >= ( 1 + FirstProfitTarget * 0.01 ) * priceatbuy
)

I don't understand what's the "i" for and why i++ (I know ++ is suppose to mean that each number is added to the one before, but I am not sure of how this code actually helps me).  If someone could just tell me what this thing is actually doing, it would really help me to understand that code.

Thanks!

Louis

2008/2/22, ChrisB <kris45mar@xxxxxxxxxxxx>:

Louis

In general if you use AFL to code stuff this overrides the Settings
values (not always)

Using the Settings values for Applystops is a great way to start.
If you want to use the above code in your backtester formula just try
something like this:

// Set all options here:
setoptions( 1 .........);
setoptions(2.........);
setoptions(3.........); //etcetera
BuyPrice = SellPrice = Open;// or whatever you want
SetTradeDelays(1,1,0,00; // etc.

// Define Buy and Sell conditions

Buy1 = myBuyCondition:
Sell = 0; // if you have only use Applystops to exit.

amount = IIF(Close < 10, ... , ... ); // etcetera
Applystop(stoptypeLoss,.........); // etcetera.

Equity(); // this helps to plot arrows on the charts so you can confirm
if AB is doing what you told it to do.
// if not you have goofed up code somewhere and

//then plot your stuff

Plot(c,"", 1, 64);
Plot(whatever else you want);
Plotshapes( ........); // etcetera

In general if you have got something wrong you will an error message
that will tell you how to fix this.
e.g, if you have not declared a variable first AB will object and let
you know.

so if you did
Applystop(StopTypeLoss, ......., amount,........);
amount = IIF( whatever........);

it will let you know with an appropriate error message.

Regards

ChrisB

Louis Préfontaine wrote:
>
> Hi,
>
> Where exactly should I put this code? I am still a beginner and I
> feel confident about modifying the code for the charts and building a
> system with buy,sell, short and cover, but where should I put the
> information about this?
>
> I already can modify some variables with the "settings" button with
> which I can choose to use a 10% stop for every stock, but how to
> customize it even more?
>
> Thanks!
>
> Louis
>
> 2008/2/20, ChrisB <kris45mar@xxxxxx net.au
> <mailto:kris45mar@xxxxxxxxxxxx>>:
>
> Louis
>
> from a previous recent post by TJ
>
> > Hello,
> > ApplyStop( StopTypeNBar, stopTypeBars, IIF( Buy, 10, 5 ) );
> > Best regards,
> > Tomasz Janeczko
> > amibroker.com <http://amibroker.com>
>
> and from the help files
>
> /amount/ =
> percent/point loss/profit trigger/risk amount.
> This could be a number (static stop level) or an array (dynamic
> stop level)
>
> So you should be OK with
>
> amount = IIf( Close < 10, 10,
> IIf(Close > 50, 2.5, 5));
>
> ApplyStop(stopTypeL oss,stopModePerc ent,amount) ;
>
> Have not tested this.
>
> Regards
>
> ChrisB
>
> louisprefontaine wrote:
> >
> > Ok I got an easier question and I hope I'll be clear at first! ;-)
> >
> > I already use the stop/loss option at 10% stop. But I'd like to have
> > a changing stop:
> >
> > Example:
> >
> > Close<10 // I'd like a stop of 10%
> > Close>10 AND Close<35 //I'd like a stop of 5%
> > Close>50 // I'd like a stop of 2.5%
> >
> > I think you get the idea.
> >
> > Is there any way to do this?
> >
> > Thanks again for reading and helping! I hope I'll be good enough soon
> > to help others too! ;-)
> >
> > Louis
> >
> >
>
>
>


__._,_.___

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 NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

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




Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___