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

[amibroker] Re: Sell after n bars only if net loss



PureBytes Links

Trading Reference Links

Pete,

You missed a critical element of the proposed solution.

In general, you must write your code to look backwards, not forwards. 
So, rather than looking for the price 5 days into the future once 
you've found that there *is* a buy, look 5 days into the past and see 
if there *was* a buy (i.e. Ref(Buy, -5)).

That is why the solution proposed was a compound statement that 
checked to see:

1) was there a buy AND
2) is the current close less than the 5 day ago buyprice.

Your exploration becomes something like the following: (I've used a 
random entry just to generate some results, and I've used 
intermediary variables to help explain what's going on as well as to 
avoid performing the same calculation more than once)

Buy = random(1) > 0.5;
BuyPrice = Open; // Put your own buyprice here

Bought5DaysAgo = Ref(Buy, -5); // Did we buy 5 days ago?
Paid5DaysAgo = Ref(BuyPrice, -5); // What would we have paid?

Sell = Bought5DaysAgo AND Close < Paid5DaysAgo; // Notice compound 
statement!

Filter = Bought5DaysAgo; // Only interested when its been 5 days 
since a buy.
AddColumn(Paid5DaysAgo, "Buy Price", 1.2);
AddColumn(Close, "5 Days Later", 1.2);

Ratio = Close/Paid5DaysAgo;
AddColumn(IIF(Ratio >= 1, (Ratio - 1) * 100, (1 - Ratio) * -
100), "5PrdPrft", 1.2);
AddTextColumn(WriteIf(Ratio < 1, "Exit", "Stay"), "Test");

Depending on your Buy/Sell logic, you may need to get rid of 
redundent signals for your exploration using ExRem. The backtester 
will handle this for you when backtesting/optimizing.

Mike

--- In amibroker@xxxxxxxxxxxxxxx, "Pete" <dryheat3@xxx> wrote:
>
> EDIT:
> In the reply below the last paragraph contains two errors.:
> Quote:**************************************************************
> The negative 5's above read the close of the bar 5 steps before the
> close <<Buyprice>>. In order to read 5 bars after the close
> <<BuyPrice>> you have to change the negatives to positives and this
> gives a warning that the formula has to look into the future to
> calculate trades.
> End Quote:**********************************************************
> 
> 
> --- In amibroker@xxxxxxxxxxxxxxx, "Pete" <dryheat3@> wrote:
> >
> > Nope, I plugged this in and the Ref(Buyprice, -10) gives you the 
close
> > of the bar 10 periods PRIOR to the buy signal. It does not give 
the
> > value of the close 10 days AFTER the buy signal.
> > 
> > Let me know if you have any other ideas. I sketched this out very
> > clearly using an exploration and the only way I can get it to
> > correctly read the Nth bar after the buy signal is using a 
positive
> > value in the Ref() function. But this causes the formula check to
> > report a future leak.
> > //Code*******************************************************
> > Buy = <<insert buy rule here>>
> > Filter = Close < Ref(BuyPrice, -5);
> > AddColumn(BuyPrice, "Buy Price", 1.2);
> > AddColumn(Ref(BuyPrice, -5), "5 Days Later", 1.2);
> > AddColumn(((Ref(C, -5) - BuyPrice)/ BuyPrice) * 100, "5PrdPrft", 
1.2);
> > tst = WriteIf(Close < Ref(BuyPrice, -5), "Exit", "Stay");
> > AddTextColumn(tst, "Test" );
> > //End Code***************************************************
> > 
> > The negative 5's above read the close of the bar 5 steps before 
the
> > close. In order to read 5 bars after the close you have to change 
the
> > negatives to positives and this gives a warning that the formula 
has
> > to look into the future to calculate trades.
> > 
> > 
> >   Pete  :-)
> > 
> > --- In amibroker@xxxxxxxxxxxxxxx, "Mike" <sfclimbers@> wrote:
> > >
> > > Hi,
> > > 
> > > Same answer as 
> > > http://finance.groups.yahoo.com/group/amibroker/message/128003
> > > 
> > > Assuming that the answer is correct of course ;)
> > > 
> > > Mike
> > > 
> > > --- In amibroker@xxxxxxxxxxxxxxx, "Pete" <dryheat3@> wrote:
> > > >
> > > > I'm trying to add a condition to my sell rule without 
creating a
> > > > future leak. I have the following:
> > > > Sell = Cross(Trigger, Close) OR ((BuyPrice - Ref(C, 5)) > 0);
> > > > 
> > > > I'm trying to get it to exit a trade if it is not profitable 
after 5
> > > > bars. Problem is it creates astronomical results and the 
formula 
> > > check
> > > > indicates there may be a future leak stating that 40 future 
quotes 
> > > are
> > > > required in the calculations.
> > > > I could also use the stopTypeNBar setting on the ApplyStop 
function
> > > > but I still need a way to measure the profit/loss of the 
trade a
> > > > number of days after the buy but do it without peaking into 
the 
> > > future.
> > > > 
> > > >   Pete  :-)
> > > >
> > >
> >
>



------------------------------------

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
Yahoo! Groups Links

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

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/amibroker/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:amibroker-digest@xxxxxxxxxxxxxxx 
    mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx

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