PureBytes Links
Trading Reference Links
|
> for (i=0; i<farback; i++) {
> curBar = (BarCount - 1) - i;
This is a problem when i > BarCount-1, as then curBar is negative. Try
limiting "farback" to be less than BarCount-1:
if (farback > BarCount-1)
farback = BarCount-1;
GP
--- In amibroker@xxxxxxxxxxxxxxx, Ahmed Afroz <affroze@xxx> wrote:
>
> hi,
> while running this afl as scan it gives following error when a
script is having less no. of quotations and the scan stops
>
>
> the error is as follows
>
> if (aLLVBars[curBar]
> -------------------^
>
> Error 10.
> Subscript out of range.
> You must not access array elements outside 0..(BarCount-1) range.
>
>
> NOW can some please help to add some code so that if this error comes
> the scan ignores that script and moves to next one.
>
> the afl text is as follows
>
> /* **********************************
>
> Code to automatically identify pivots
>
> ********************************** */
>
> // -- what will be our lookback range for the hh and ll?
> farback=Param("How Far back to go",100,50,5000,10);
> nBars = Param("Number of bars", 12, 5, 40);
>
> // -- Title.
>
> Title = Name() + " (" + StrLeft(FullName(), 15) + ") O: " + Open +
",H: " + High + ", L: " + Low + ", C: " + Close;
>
> // -- Plot basic candle chart
>
> PlotOHLC(Open, High, Low, Close,
>
> "BIdx = " + BarIndex() +
>
> "\n" + "O = " + O + "\n"+"H = "+ H + "\n"+"L = " + L
>
> + "\n"+"C ",
>
> colorBlack, styleCandle);
>
> GraphXSpace=7;
>
> // -- Create 0-initialized arrays the size of barcount
>
> aHPivs = H - H;
>
> aLPivs = L - L;
>
> // -- More for future use, not necessary for basic plotting
>
> aHPivHighs = H - H;
>
> aLPivLows = L - L;
>
> aHPivIdxs = H - H;
>
> aLPivIdxs = L - L;
>
> nHPivs = 0;
>
> nLPivs = 0;
>
> lastHPIdx = 0;
>
> lastLPIdx = 0;
>
> lastHPH = 0;
>
> lastLPL = 0;
>
> curPivBarIdx = 0;
>
> // -- looking back from the current bar, how many bars
>
> // back were the hhv and llv values of the previous
>
> // n bars, etc.?
>
> aHHVBars = HHVBars(H, nBars);
>
> aLLVBars = LLVBars(L, nBars);
>
> aHHV = HHV(H, nBars);
>
> aLLV = LLV(L, nBars);
>
> // -- Would like to set this up so pivots are calculated back from
>
> // last visible bar to make it easy to "go back" and see the pivots
>
> // this code would find. However, the first instance of
>
> // _Trace output will show a value of 0
>
> aVisBars = Status("barvisible");
>
> nLastVisBar = LastValue(Highest(IIf(aVisBars, BarIndex(), 0)));
>
> _TRACE("Last visible bar: " + nLastVisBar);
>
> // -- Initialize value of curTrend
>
> curBar = (BarCount-1);
>
> curTrend = "";
>
> if (aLLVBars[curBar] <
>
> aHHVBars[curBar]) {
>
> curTrend = "D";
>
> }
>
> else {
>
> curTrend = "U";
>
> }
>
> // -- Loop through bars. Search for
>
> // entirely array-based approach
>
> // in future version
>
> for (i=0; i<farback; i++) {
>
> curBar = (BarCount - 1) - i;
>
> // -- Have we identified a pivot? If trend is down...
>
> if (aLLVBars[curBar] < aHHVBars[curBar]) {
>
> // ... and had been up, this is a trend change
>
> if (curTrend == "U") {
>
> curTrend = "D";
>
> // -- Capture pivot information
>
> curPivBarIdx = curBar - aLLVBars[curBar];
>
> aLPivs[curPivBarIdx] = 1;
>
> aLPivLows[nLPivs] = L[curPivBarIdx];
>
> aLPivIdxs[nLPivs] = curPivBarIdx;
>
> nLPivs++;
>
> }
>
> // -- or current trend is up
>
> } else {
>
> if (curTrend == "D") {
>
> curTrend = "U";
>
> curPivBarIdx = curBar - aHHVBars[curBar];
>
> aHPivs[curPivBarIdx] = 1;
>
> aHPivHighs[nHPivs] = H[curPivBarIdx];
>
> aHPivIdxs[nHPivs] = curPivBarIdx;
>
> nHPivs++;
>
> }
>
> // -- If curTrend is up...else...
>
> }
>
> // -- loop through bars
>
> }
>
> // -- Basic attempt to add a pivot this logic may have missed
>
> // -- OK, now I want to look at last two pivots. If the most
>
> // recent low pivot is after the last high, I could
>
> // still have a high pivot that I didn't catch
>
> // -- Start at last bar
>
> curBar = (BarCount-1);
>
> candIdx = 0;
>
> candPrc = 0;
>
> lastLPIdx = aLPivIdxs[0];
>
> lastLPL = aLPivLows[0];
>
> lastHPIdx = aHPivIdxs[0];
>
> lastHPH = aHPivHighs[0];
>
> if (lastLPIdx > lastHPIdx) {
>
> // -- Bar and price info for candidate pivot
>
> candIdx = curBar - aHHVBars[curBar];
>
> candPrc = aHHV[curBar];
>
> if (
>
> lastHPH < candPrc AND
>
> candIdx > lastLPIdx AND
>
> candIdx < curBar) {
>
>
> // -- OK, we'll add this as a pivot...
>
> aHPivs[candIdx] = 1;
>
> // ...and then rearrange elements in the
>
> // pivot information arrays
>
> for (j=0; j<nHPivs; j++) {
>
> aHPivHighs[nHPivs-j] = aHPivHighs[nHPivs-
>
> (j+1)];
>
> aHPivIdxs[nHPivs-j] = aHPivIdxs[nHPivs-(j+1)];
>
> }
>
> aHPivHighs[0] = candPrc ;
>
> aHPivIdxs[0] = candIdx;
>
> nHPivs++;
>
> }
>
> } else {
>
>
> // -- Bar and price info for candidate pivot
>
> candIdx = curBar - aLLVBars[curBar];
>
> candPrc = aLLV[curBar];
>
> if (
>
> lastLPL > candPrc AND
>
> candIdx > lastHPIdx AND
>
> candIdx < curBar) {
>
>
> // -- OK, we'll add this as a pivot...
>
> aLPivs[candIdx] = 1;
>
> // ...and then rearrange elements in the
>
> // pivot information arrays
>
> for (j=0; j<nLPivs; j++) {
>
> aLPivLows[nLPivs-j] = aLPivLows[nLPivs-(j+1)];
>
> aLPivIdxs[nLPivs-j] = aLPivIdxs[nLPivs-(j+1)];
>
> }
>
> aLPivLows[0] = candPrc;
>
> aLPivIdxs[0] = candIdx;
>
> nLPivs++;
>
> }
>
> }
>
> // -- Dump inventory of high pivots for debugging
>
> /*
>
> for (k=0; k<nHPivs; k++) {
>
> _TRACE("High pivot no. " + k
>
> + " at barindex: " + aHPivIdxs[k] + ", "
>
> + WriteVal(ValueWhen(BarIndex()==aHPivIdxs[k],
>
> DateTime(), 1), formatDateTime)
>
> + ", " + aHPivHighs[k]);
>
> }
>
> */
>
> // -- OK, let's plot the pivots using arrows
>
> PlotShapes(
>
> IIf(aHPivs==1, shapeDownArrow, shapeNone), colorRed, 0,
>
> High, Offset=-15);
>
> PlotShapes(
>
> IIf(aLPivs==1, shapeUpArrow , shapeNone), colorGreen, 0,
>
> Low, Offset=-15);
> //PlotShapes(IIf(aHPivs==1, shapeDownArrow, shapeNone), colorRed,
0,High, Offset=-8);
> Sell = IIf(aHPivs==1, 1, 0);
>
> //PlotShapes(IIf(aLPivs==1, shapeUpArrow , shapeNone), colorGreen,
0, Low, Offset=-8);
> Buy = IIf(aLPivs==1, 1, 0);
>
>
> ---------------------------------
> Need a vacation? Get great deals to amazing places on Yahoo! Travel.
>
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/
|