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

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



PureBytes Links

Trading Reference Links

When using looping to calculate things bar by bar do not include array processing functions within the loop
Create a variable before the loop and use this variable inside the loop

exit = 0;
LL = LLV(C,10);

for(i=1;i<BarCount;i++)
{
    if(exit==0 AND C[i]<LL[i-1])
    {

or if you absolutely need to start the array at 0 instead of 1

LL = Ref(LLV(C,10),-1);

for(i=0;i<BarCount;i++)
{
    if(exit==0 AND C[i]<LL[i])
    {





--
Cheers
Graham Kav
AFL Writing Service
http://www.aflwriting.com



On 27/02/2008, Louis Préfontaine <rockprog80@xxxxxxxxx> wrote:
I am having a hard time with that.

( exit == 1 AND Close[i] < Ref (LLV(Close[i],10), -1)   )

For some reason I just can't make that work.   I tried this also

( exit == 1 AND Close[i] < Ref (LLV(Close[i],10), [i-1])
                )

but it didn't work either...  I wonder what is wrong with that code.

Louis



2008/2/26, Louis Préfontaine <rockprog80@xxxxxxxxx>:
Hi Tuzo,

Thanks again for your reply. 

I tried to add a selling condition but just didn't know where to put it exactly.  I tried after

if( exit == 0 AND
            High[ i ] >= ( 1 + FirstProfitTarget * 0.01 ) * priceatbuy)


to add something  like AND close>100  (just to try)  and even tried close[i]>100 and it didn't work...  What did I do wrong?

I think you are right when you say I need to catch up on programming.  I hope Howard's book will help me for that but I am really better to learn by myself than by getting a huge 1000 pages C++ book.  But if you think it might be worth it, I don't reject that idea...

I will try to do as Brian said to me and try to keep my eyes open and see where the gold is.  So far you helped me a lot and that's also gold to me.  Thanks!

Louis


2008/2/26, tuzo_wilson <j.tuzo.wilson@xxxxxxxxx>:

--- In amibroker@xxxxxxxxxxxxxxx, "Louis Pr�fontaine" <rockprog80@xxx> wrote:

If you are using the boolean value (IsInTrade) then you need to reset it when you exit the trade.  See near the end of the formula.  Although if you now understand the buyatprice == 0 then you could revert to the canned example.

> Moreover, I don't know how to add other selling rules to that (where to put those rules in the code) and I don't understand

To add different sell logic, you can modify the "AND" portion of the if statements after if( exit == ...

> the meaning of this part Sell[ i ] = exit + 1; // mark appropriate exit code

This sets the type of sell signal.  It (exit + 1) will be either 3 or 4 which corresponds to hitting a profit target or hitting a trailing stop (IIRC).


I don't know how other people feel but IMO, you may want to take a look at some simple intro programming tutorials separate from AB.  Between general programming, array processing, and the specifics of AFL there is a lot to take in.  Of course your mileage may vary.


Tuzo


Buy = RSI (14)<30;



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 = 25; // in percent
TrailingStop = 15; // also in percent

isInTrade = False;

priceatbuy=0;
highsincebuy = 0;
exit = 0;
for( i = 0; i < BarCount; i++ )
    {
         if ( NOT isInTrade AND Buy[ i ] )

            {
                isInTrade = True;
                priceatbuy = BuyPrice[ i ];
            }
        if( isInTrade )

            {
                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;
                            isInTrade = False; // not in a trade any more
                        }
            }
    }
SetPositionSize( 50, spsPercentOfPosition * ( Buy == sigScaleOut )); // scale out 50% of position

Short=0;
Cover=0;
///
///
///
///
///






__._,_.___

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

__,_._,___