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

Re: [amibroker] Projecting prices



PureBytes Links

Trading Reference Links

Hi Ara,
 
Your question rang a bell with me, so I searched my saved e-mails and found this code that Fred was kind enough to post a couple of years ago. Maybe it will be helpful for you?
 
Steve
 
// ***********************************************
//
// An all purpose routine to find the price
// necessary to move an indicator to a GOAL.
//
// This should work for virtually any indicator,
// built in or otherwise.  It's demonstrated
// here using RSI & BBand's ...
//
// Note: It will appear to use future quotes
// because of the down shifting of the
// price array, but obviously it can't
// "know" tomorrows price.  There's
// probably a way to rectify this but
// I was more concerned with the rest
// of the process.
//
// The maximum iterations have arbitrarily been
// set to 200 which is undoubtedly overkill
// as I've yet to see anything take 200 even
// when tolerance was set to 0 on datastreams
// with very high prices.
//
// For real usage the saving of i in j and the
// accuracy calculation can be tossed as they
// were only put in for demonstration purposes
//
// ***********************************************
//
// This Routine requires the following things
//
// P0 = A price array or synthetic
//
// Goal = The goal value of the indicator
//
// Acc = An accuracy level for the calculations
//
//   Set this to the order of magnitude
//   that you want.  For example if you want
//   accuracy in calculated price to within
//   0.01 then set it 0.01.  It can even
//   be set to 0 which will force AB to
//   calculate until it can't find any
//   further improvements (Usually between
//   150-170 iterations) but this is semi
//   useless as improvements relative to
//   price granularity have long since
//   been gone by.
//
//   The lower you set it the longer it
//   will take but it's pretty quick
//   (Usually between 15-30 iterations)
//   unless you set it at 0.
//
// ***********************************************
//
// Note: Some goals are virtually unattainable on
// the next bar, especially on the downside
// as they would require a negative price
// which is what this routine will show if
// that is what is required.
//
// ***********************************************

P0   = C;

Acc  = 0.0001;

LVBI = LastValue(BarIndex());
Mult = 1;

// ***********************************************
// Shift Price up by n orders of magnitude to make
// it >= 1.  This is useful to increase
// accuracy on very low priced datastreams
// such as the JY.
// ***********************************************
for (i = 0; i < 10; i++)
{
if (P0[LVBI] >= 1)
i = 99;
else
Mult = Mult * 10;
}
// ***********************************************

P1   = Ref(P0, 1) * Mult;
UpDn = 100 * P1[LVBI];

for (i = 0; i < 200; i++)
{

// An example for finding price associated with the next bars
BBandTop
//
//
**************************************************************
***************
// Put whatever indicator you want to goal seek here based on P1
//
**************************************************************
***************
Calc = P1;
//
**************************************************************
***************
// Put whatever you want for the goal here ...
//
// The reason for putting it in the loop is because sometimes
the goal is price
// oriented and will need to be recalculated on each
iteration.
//
**************************************************************
***************
Goal = LastValue(BBandBot(P1, 14, 2));
//
**************************************************************
***************



// An example for finding price associated with the next bars
RSI value of 65
//
//
**************************************************************
***************
// Put whatever indicator you want to goal seek here based on P1
//
**************************************************************
***************
// Calc = RSIa(P1, 14);
//
**************************************************************
***************
// Put whatever you want for the goal here ...
//
// The reason for putting it in the loop is because sometimes
the goal is price
// oriented and will need to be recalculated on each
iteration.
//
**************************************************************
***************
// Goal = 65;
//
**************************************************************
***************

if (Calc[LVBI] < Goal)
P1[LVBI] = P1[LVBI] + UpDn;
else
P1[LVBI] = P1[LVBI] - UpDn;
UpDn = UpDn / 2;
if (UpDn <= Acc)
{
j = i;
i = 99999;
}
}

Accuracy = 100 * (abs(Goal - Calc) / Goal);

Filter = BarIndex() == LVBI;

AddColumn(Mult,
"Multiplier",   1.0);
AddColumn(Calc[LVBI - 1] / Mult, "Curr Ind Val", 1.9);
AddColumn(Goal / Mult, "Goal Ind Val", 1.9);
AddColumn(Calc[LVBI] / Mult, "Calc Ind Val", 1.9);
AddColumn(j,
"Iterations",   1.0);
AddColumn(Accuracy,   "Accuray (%)",  1.9);
AddColumn(Ref(P1, -1) / Mult, "Todays Price", 1.9);
AddColumn(P1 / Mult, "Goal
Price",   1.9);
----- Original Message -----
Sent: Monday, April 10, 2006 1:08 PM
Subject: Re: [amibroker] Projecting prices

thanks Bob,
 
I had temporarily come to the same conclusion but realized that for my particular application I already have the high and low prices ... just need to calculate the close.
 
My application is to use historical data for backtest and figure out a way to make it equivalent to using real time data by calculating the exact price required to produce a signal, obviously within  the exixting price range.
 
It's a clumsy solution since I will not be able to use the AB backtester, but useful (I think). It would be great if AB backtester could be used ...
 
So technically "projecting" prices in the subject line is a bit misleading for this case...
 
 
Ara
----- Original Message -----
From: Bob Jagow
Sent: Sunday, April 09, 2006 11:07 PM
Subject: RE: [amibroker] Projecting prices

An algebraic solution is possible only  for indicators dependent on a single price array.
That rules out CCI and Stochastics.
 
Bob
-----Original Message-----
From: amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx]On Behalf Of Ara Kaloustian
Sent: Sunday, April 09, 2006 9:43 PM
To: AB-Main
Subject: [amibroker] Projecting prices

I am trying to figure out the required price to create a particular value of an indicator.
 
Example: My CCI is at 50. I would get a signal if CCI reached 55.  What is the require value of price that would make CCI to rise to 55?
 
 
This kind of calculation can be used to anticipate a signal and allow us to place a conditional order for next day.
 
I am looking for the formulae to accomplish this for CCI, Stochastics and MACD.
 
The formulae should be bit of algebra, but rather time consuming to develop.
 
Wonder if anyone has already worked on this issue before.
 
Appreciate any help
 
ara


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