|
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);
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
|
- Re: [amibroker] Projecting prices Steve Dugas
- Re: [amibroker] Projecting prices Ara Kaloustian
