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

[amibroker] Re: WHAT INDICATOR IS THIS?



PureBytes Links

Trading Reference Links

But wouldn't it be GoRdon Rose instead of GoLdenRose?

Regards

frankphd_us


--- In amibroker@xxxxxxxxxxxxxxx, Rasheed Momoh <rashmo_70@xxx> wrote:
>
> TX GUYS
> 
> --- On Tue, 4/14/09, BK Gupta <BKGUPTA05@xxx> wrote:
> 
> From: BK Gupta <BKGUPTA05@xxx>
> Subject: Re: [amibroker] Re: WHAT INDICATOR IS THIS?
> To: amibroker@xxxxxxxxxxxxxxx
> Date: Tuesday, April 14, 2009, 8:31 PM
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
>     
>             
>             
> 
> 
>       
>       Golden rose.
> 
> 
> On Wed, Apr 15, 2009 at 4:37 AM, Mike <sfclimbers@xxxxxx com> wrote:
> 
> 
> 
> 
> 
> 
> 
> 
> A simple Google search for any uncommon text gives it to you in seconds (for example the blatant spelling error: BEING EXPLORATION CODE).
> 
> e.g. enter this in your search:
> 
> BEING EXPLORATION CODE site:AmiBroker. com
> 
> 
> Gives this:
> 
> http://www.amibroke r.com/library/ detail.php? id=617
> 
> Mike 
> 
> 
> 
> 
> --- In amibroker@xxxxxxxxx ps.com, "rashmo_70" <rashmo_70@ .> wrote:
> >
> > Hi Guys I downloaded this indicator from amibroker library and I forgot to save the name.
> 
> > can any one assist me what name this is?......... ......
> > _SECTION_BEGIN("exploration code");
> > // ************ ********* *****
> > // BEING EXPLORATION CODE
> > // ************ ********* *****
> 
> > 
> > // -- what will be our lookback range for the hh and ll?
> > nBars = Param("Number of bars", 12, 5, 40);
> > bTrace = Param("Include trace output", 1, 0, 1);
> > nNoPivsInSetup = Param("No. Pivs in Setup", 4, 3, 4, 1);
> 
> > bShowTCZ = Param("Show TCZ", 1, 0, 1); 
> > nMinBarsBtwPivs = Param("Min. number of bars btw. pivots", 1, 1, 10, 1);
> > nMinPctBtwPivs = Param("Min. percent diff. btw. pivots", .05, .04, .2, .01);
> 
> > bLastBarCanBePiv = Param("Last bar can be a pivot", 1, 0, 1); 
> > retrcTolerance = .01;
> > tczTolerance = .005;
> > nNumBarsToScan = 120;
> > 
> > // -- added from exploration version 20040204
> 
> > nExploreBarIdx = 0;
> > nExploreDate = 0;
> > nCurDateNum = 0;
> > DN = DateNum();
> > DT = DateTime();
> > 
> > // -- key exploration variables
> > bTCZLong = False;
> > bTCZShort = False;
> 
> > nAnchorPivIdx = 0;
> > 
> > ADX8 = ADX(8);
> > 
> > // 1 - INDICATOR, 2 - COMMENTARY, 3 - SCAN, 
> > // 4 - EXPLORATION, 5 - BACKTEST / Optimize 
> > if(Status("action")==1) {
> > bDraw = True;
> 
> > bUseLastVis = Param("Use last visible bar", 1, 0, 1);
> > } else {
> > bDraw = False;
> > bUseLastVis = False;
> > bTrace = False;
> > nExploreDate = Status("rangetodate");
> 
> > for (i=LastValue( BarIndex( ));i>=0;i--) {
> > nCurDateNum = DN[i];
> > if (nCurDateNum == nExploreDate) {
> > nExploreBarIdx = i;
> > }
> > }
> > // -- if(Status("action")==1...
> 
> > }
> > 
> > GraphXSpace= 7;
> > 
> > // -- basic candle chart
> > // -- if this appears inside if block, strange
> > // drawing results!
> > PlotOHLC(Open, High, Low, Close, 
> > "BIdx = " + BarIndex() + 
> 
> > "\n" + "O = " + O + "\n"+"H = "+ H + "\n"+"L = " + L 
> > + "\n"+"C ",
> > colorBlack, styleCandle) ; 
> > 
> > if (bDraw) {
> 
> > Plot(MA(C, 21), "21 bar MA", colorAqua, 
> > styleLine+styleNoRe scale+styleNoLab el);
> > Plot(MA(C, 55), "55 bar MA", colorGreen, 
> > styleLine+styleNoRe scale+styleNoLab el);
> > //Plot(MA(C, 233), "233 bar MA", colorDarkRed, 
> 
> > // styleLine+styleNoRe scale+styleNoLab el);
> > }
> > 
> > // -- Create 0-initialized arrays the size of barcount
> > aHPivs = H - H;
> > aLPivs = L - L;
> > aHPivHighs = H - H;
> > aLPivLows = L - L;
> 
> > aHPivIdxs = H - H;
> > aLPivIdxs = L - L;
> > aAddedHPivs = H - H;
> > aAddedLPivs = L - L;
> > aLegVol = H - H;
> > aRetrcVol = H - H;
> > 
> > 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);
> > 
> > // -- Initialize value of curTrend
> > nLastVisBar = LastValue(
> 
> > Highest(IIf( Status("barvisible"), BarIndex(), 0)));
> > 
> > curBar = IIf(nlastVisBar > 0 AND bUseLastVis, nlastVisBar, 
> > IIf(Status("action")==4 AND nExploreBarIdx > 0, nExploreBarIdx,
> 
> > LastValue(BarIndex( ))));
> > 
> > curTrend = "";
> > if (aLLVBars[curBar] < aHHVBars[curBar] ) 
> > curTrend = "D";
> > else 
> > curTrend = "U";
> > 
> > // -- Loop through bars. Search for 
> 
> > // entirely array-based approach
> > // in future version
> > /* ************ *******
> > Find main pivots
> > ************ ******* */
> > 
> > // -- Make sure there are enough bars!
> > if (curBar >= nNumBarsToScan) {
> 
> > for (i=0; i<nNumBarsToScan; i++) {
> > 
> > // -- value of curBar dependent on two parameters
> > curBar = IIf(nlastVisBar > 0 AND bUseLastVis, 
> > nlastVisBar- i, 
> > IIf(Status("action")==4 AND nExploreBarIdx > 0, 
> 
> > nExploreBarIdx- i,
> > LastValue(BarIndex( ))-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
> 
> > } 
> > }
> > /* ************ *******
> > Found main pivots
> > ************ ******* */
> > 
> > /* ************ ********* ****
> > Finding missed pivot(s)
> > ************ ********* **** */
> 
> > 
> > // -- Start at last bar. Reestablish curBar
> > curBar = 
> > IIf(nlastVisBar > 0 AND bUseLastVis, 
> > nlastVisBar, 
> > IIf(Status("action")==4 AND nExploreBarIdx > 0, 
> > nExploreBarIdx,
> 
> > LastValue(BarIndex( )))
> > );
> > 
> > // -- Make sure I found at least two of each above.
> > if (nHPivs >= 2 AND nLPivs >= 2) {
> > 
> > lastLPIdx = aLPivIdxs[0] ;
> > lastLPL = aLPivLows[0] ;
> 
> > 
> > lastHPIdx = aHPivIdxs[0] ;
> > lastHPH = aHPivHighs[0] ;
> > 
> > nLastHOrLPivIdx = Max(lastLPIdx, lastHPIdx);
> > 
> > nAddPivsRng = curBar - nLastHOrLPivIdx;
> > aLLVAfterLastPiv = LLV(L, nAddPivsRng) ; 
> 
> > nLLVAfterLastPiv = aLLVAfterLastPiv[ curBar];
> > aLLVIdxAfterLastPiv = LLVBars(L, nAddPivsRng) ; 
> > nLLVIdxAfterLastPiv = curBar - aLLVIdxAfterLastPiv [curBar];
> > aHHVAfterLastPiv = HHV(H, nAddPivsRng) ; 
> 
> > nHHVAfterLastPiv = aHHVAfterLastPiv[ curBar];
> > aHHVIdxAfterLastPiv = HHVBars(H, nAddPivsRng) ; 
> > nHHVIdxAfterLastPiv = curBar - aHHVIdxAfterLastPiv [curBar];
> > 
> > // -- Later want to add last high pivot only if
> 
> > // not in buy mode from last and still in trade
> > 
> > /*
> > Note - I'm only interested in adding pivots if I'm in 
> > a higher-highs or lower-lows scenario
> > */
> > 
> > 
> 
> > // -- OK, let's start where the last high pivot occurs after the
> > // last Low pivot
> > if (lastHPIdx > lastLPIdx) {
> > 
> > /* There are at least two possibilities here. One is that
> > the previous high was higher, indicating that this is a 
> 
> > possible short retracement or one in the making.
> > The other is that the previous high was lower, indicating 
> > that this is a possible long retracement in the working. 
> > However, both depend on opposing pivots. E.g., if I find 
> 
> > higher highs, what if I have lower lows? 
> > 
> > If the highs are descending, then I can consider:
> > - a lower low, and leave it at that
> > - a higher high and higher low
> > - a lower low and another lower high
> 
> > */
> > if (aHPivHighs[ 0] < aHPivHighs[1] ) {
> > 
> > if (nLLVAfterLastPiv < aLPivLows[0] AND 
> > (nLLVIdxAfterLastPi v - lastHPIdx - 1) >= nMinBarsBtwPivs
> > AND nLLVIdxAfterLastPiv != curBar ) {
> 
> > 
> > // -- OK, we'll add this as a pivot. 
> > // Mark it for plotting...
> > aLPivs[nLLVIdxAfter LastPiv] = 1;
> > aAddedLPivs[ nLLVIdxAfterLast Piv] = 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] = nLLVAfterLastPiv;
> 
> > aLPivIdxs[0] = nLLVIdxAfterLastPiv ;
> > nLPivs++;
> > 
> > // -- Test whether to add piv given last piv is high 
> > // AND we have lower highs 
> > }
> > 
> > // -- Here, the last piv is a high piv, and we have 
> 
> > // higher-highs. The most likely addition is a 
> > // Low piv that is a retracement.
> > } else {
> > 
> > if (nLLVAfterLastPiv > aLPivLows[0] AND 
> > (nLLVIdxAfterLastPi v - lastHPIdx - 1) >= nMinBarsBtwPivs
> 
> > AND nLLVIdxAfterLastPiv != curBar ) {
> > 
> > // -- OK, we'll add this as a pivot. 
> > // Mark it for plotting...
> > aLPivs[nLLVIdxAfter LastPiv] = 1;
> > aAddedLPivs[ nLLVIdxAfterLast Piv] = 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] = nLLVAfterLastPiv;
> > aLPivIdxs[0] = nLLVIdxAfterLastPiv ;
> > nLPivs++;
> > 
> > // -- Test whether to add piv given last piv is high 
> > // AND we have lower highs 
> > } 
> 
> > // -- The last piv is a high and we have higher highs 
> > // OR lower highs
> > }
> > 
> > /* ************ ********* ********* ********* ********* ********* *******
> > Still finding missed pivot(s). Here, the last piv is a low piv.
> 
> > ************ ********* ********* ********* ********* ********* ******* */
> > } else {
> > 
> > // -- First case, lower highs
> > if (aHPivHighs[ 0] < aHPivHighs[1] ) {
> > 
> > if (nHHVAfterLastPiv < aHPivHighs[0] AND 
> 
> > (nHHVIdxAfterLastPi v - lastLPIdx - 1) >= nMinBarsBtwPivs
> > AND nHHVIdxAfterLastPiv != curBar ) {
> > 
> > // -- OK, we'll add this as a pivot. 
> > // Mark that for plotting
> > aHPivs[nHHVIdxAfter LastPiv] = 1;
> 
> > aAddedHPivs[ nHHVIdxAfterLast Piv] = 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] = nHHVAfterLastPiv;
> > aHPivIdxs[0] = nHHVIdxAfterLastPiv ;
> > nHPivs++;
> > 
> > // -- Test whether to add piv given last piv is high 
> 
> > // AND we have lower highs 
> > }
> > 
> > // -- Second case when last piv is a low piv, higher highs 
> > // Most likely addition is high piv that is a retracement.
> > // Considering adding a high piv as long as it is higher
> 
> > } else {
> > 
> > // -- Where I have higher highs,
> > if (nHHVAfterLastPiv > aHPivHighs[0] AND 
> > (nHHVIdxAfterLastPi v - lastLPIdx - 1) >= nMinBarsBtwPivs
> > AND nHHVIdxAfterLastPiv != curBar ) {
> 
> > 
> > // -- OK, we'll add this as a pivot. 
> > // Mark it for plotting...
> > aHPivs[nHHVIdxAfter LastPiv] = 1;
> > aAddedHPivs[ nHHVIdxAfterLast Piv] = 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] = nHHVAfterLastPiv;
> 
> > aHPivIdxs[0] = nHHVIdxAfterLastPiv ;
> > nHPivs++;
> > 
> > // -- Test whether to add piv given last piv is high 
> > // AND we have lower highs 
> > }
> > 
> > }
> > 
> > } 
> > 
> 
> > // -- If there are at least two of each
> > }
> > 
> > /* ************ ********* ********* ********* *
> > // -- Done with finding pivots
> > ************ ********* ********* ********* ** */ 
> > 
> 
> > if (bDraw) {
> > 
> > // -- OK, let's plot the pivots using arrows
> > PlotShapes(
> > IIf(aHPivs== 1, shapeDownArrow, shapeNone), 
> > colorRed, 0, High, Offset=-15);
> > PlotShapes(
> > IIf(aAddedHPivs= =1, shapeDownArrow, shapeNone),
> 
> > colorDarkRed, 0, High, Offset=-15);
> > PlotShapes(
> > IIf(aLPivs== 1, shapeUpArrow , shapeNone), 
> > colorGreen, 0, Low, Offset=-15);
> > PlotShapes(
> > IIf(aAddedLPivs= =1, shapeUpArrow , shapeNone), 
> 
> > colorDarkGreen, 0, Low, Offset=-15);
> > }
> > 
> > /* ************ ********* ********* ********* *
> > // -- Done with discovering and plotting pivots 
> > ************ ********* ********* ********* ** */ 
> 
> > 
> > // -- I'm going to want to look for possible retracement
> > risk = 0;
> > profInc = 0;
> > nLeg0Pts = 0;
> > nLeg0Bars = 0;
> > nLeg0Vol = 0;
> > nLeg1Pts = 0;
> > nLeg1Bars = 0;
> 
> > nLeg1Vol = 0;
> > nLegBarsDiff = 0;
> > nRtrc0Pts = 0;
> > nRtrc0Bars = 0;
> > nRtrc0Vol = 0;
> > nRtrc1Pts = 0;
> > nRtrc1Bars = 0;
> > nRtrc1Vol = 0;
> > 
> > minRtrc = 0;
> > maxRtrc = 0;
> 
> > minLine = 0;
> > maxLine = 0;
> > triggerLine = 0;
> > firstProfitLine = 0;
> > triggerInc = 0;
> > triggerPrc = 0;
> > firstProfitPrc = 0;
> > retrcPrc = 0;
> > retrcBar = 0;
> > retrcBarIdx = 0;
> 
> > retrcRng = 0;
> > aRetrcPrc = H-H;
> > aRetrcPrcBars = H-H;
> > aRetrcClose = C;
> > retrcClose = 0;
> > 
> > // -- Do TCZ calcs. Arrangement of pivs very specific
> > // for this setup.
> 
> > if (nHPivs >= 2 AND 
> > nLPivs >=2 AND 
> > aHPivHighs[0] > aHPivHighs[1] AND
> > aLPivLows[0] > aLPivLows[1] ) {
> > 
> > tcz500 = 
> > (aHPivHighs[ 0] -
> > (.5 * (aHPivHighs[ 0] - aLPivLows[1] )));
> 
> > 
> > tcz618 = 
> > (aHPivHighs[ 0] -
> > (.618 * (aHPivHighs[ 0] - aLPivLows[1] )));
> > 
> > tcz786 = 
> > (aHPivHighs[ 0] -
> > (.786 * (aHPivHighs[ 0] - aLPivLows[0] )));
> > 
> > retrcRng = curBar - aHPivIdxs[0] ;
> 
> > aRetrcPrc = LLV(L, retrcRng);
> > retrcPrc = aRetrcPrc[curBar] ;
> > aRetrcPrcBars = LLVBars(L, retrcRng);
> > retrcBarIdx = curBar - aRetrcPrcBars[ curBar];
> > retrcClose = aRetrcClose[ retrcBarIdx] ;
> 
> > 
> > // -- bTCZLong setup?
> > bTCZLong = (
> > 
> > // -- Are retracement levels arranged in
> > // tcz order?
> > tcz500 >= (tcz786 * (1 - tczTolerance) )
> > AND 
> > // .681 is below .786 for long setups
> 
> > tcz618 <= (tcz786 * (1 + tczTolerance) )
> > AND
> > 
> > // -- Is the low in the tcz range
> > // -- Is the close >= low of tcz range
> > // and low <= high of tcz range
> > retrcClose >= ((1 - retrcTolerance) * tcz618)
> 
> > AND
> > retrcPrc <= ((1 + retrcTolerance) * tcz500)
> > ); 
> > 
> > // -- risk would be high of signal bar minus low of zone
> > //risk = 0;
> > 
> > // -- lower highs and lower lows
> 
> > } else if (nHPivs >= 2 AND nLPivs >=2 
> > AND aHPivHighs[0] < aHPivHighs[1] 
> > AND aLPivLows[0] < aLPivLows[1] ) {
> > 
> > tcz500 = 
> > (aHPivHighs[ 1] -
> > (.5 * (aHPivHighs[ 1] - aLPivLows[0] )));
> 
> > 
> > tcz618 = 
> > (aHPivHighs[ 0] -
> > (.618 * (aHPivHighs[ 1] - aLPivLows[0] )));
> > 
> > tcz786 = 
> > (aHPivHighs[ 0] -
> > (.786 * (aHPivHighs[ 0] - aLPivLows[0] )));
> > 
> > retrcRng = curBar - aLPivIdxs[0] ;
> 
> > aRetrcPrc = HHV(H, retrcRng);
> > retrcPrc = aRetrcPrc[curBar] ;
> > aRetrcPrcBars = HHVBars(H, retrcRng);
> > retrcBarIdx = curBar - aRetrcPrcBars[ curBar];
> > retrcClose = aRetrcClose[ retrcBarIdx] ;
> 
> > 
> > bTCZShort = (
> > // -- Are retracement levels arranged in
> > // tcz order?
> > 
> > // .500 is below .786 for short setups
> > tcz500 <= (tcz786 * (1 + tczTolerance) )
> > AND 
> 
> > // .681 is above .786 for short setups
> > tcz618 >= (tcz786 * (1 - tczTolerance) ) 
> > AND
> > 
> > // -- Is the close <= high of tcz range
> > // and high >= low of tcz range
> > retrcClose <= ((1 + retrcTolerance) * tcz618)
> 
> > AND
> > retrcPrc >= ((1 - retrcTolerance) * tcz500)
> > ); 
> > 
> > // -- Risk would be top of zone - low of signal bar 
> > //risk = 0;
> > }
> > 
> > Filter = (bTCZShort OR bTCZLong);
> 
> > AddColumn(C, "Close");
> > AddColumn(IIf( bTCZLong, 76, 83), "L/S", formatChar);
> > 
> > // ************ ********* *****
> > // END EXPLORATION CODE
> > // ************ ********* *****
> 
> > 
> > // ************ ********* *****
> > // BEGIN INDICATOR CODE
> > // ************ ********* *****
> > 
> > // -- what will be our lookback range for the hh and ll?
> > nBars = Param("Number of bars", 12, 5, 40);
> 
> > bTrace = Param("Include trace output", 1, 0, 1);
> > nNoPivsInSetup = Param("No. Pivs in Setup", 4, 3, 4, 1);
> > bShowTCZ = Param("Show TCZ", 1, 0, 1); 
> > nMinBarsBtwPivs = Param("Min. number of bars btw. pivots", 1, 1, 10, 1);
> 
> > nMinPctBtwPivs = Param("Min. percent diff. btw. pivots", .05, .04, .2, .01);
> > bLastBarCanBePiv = Param("Last bar can be a pivot", 1, 0, 1); 
> > retrcTolerance = .01;
> > tczTolerance = .005;
> 
> > nNumBarsToScan = 120;
> > 
> > // -- added from exploration version 20040204
> > nExploreBarIdx = 0;
> > nExploreDate = 0;
> > nCurDateNum = 0;
> > DN = DateNum();
> > DT = DateTime();
> 
> > 
> > // -- key exploration variables
> > bTCZLong = False;
> > bTCZShort = False;
> > nAnchorPivIdx = 0;
> > 
> > ADX8 = ADX(8);
> > 
> > // 1 - INDICATOR, 2 - COMMENTARY, 3 - SCAN, 
> 
> > // 4 - EXPLORATION, 5 - BACKTEST / Optimize 
> > if(Status("action")==1) {
> > bDraw = True;
> > bUseLastVis = Param("Use last visible bar", 1, 0, 1);
> > } else {
> > bDraw = False;
> 
> > bUseLastVis = False;
> > bTrace = False;
> > nExploreDate = Status("rangetodate");
> > for (i=LastValue( BarIndex( ));i>=0;i--) {
> > nCurDateNum = DN[i];
> > if (nCurDateNum == nExploreDate) {
> 
> > nExploreBarIdx = i;
> > }
> > }
> > // -- if(Status("action")==1...
> > }
> > 
> > GraphXSpace= 7;
> > 
> > // -- basic candle chart
> > // -- if this appears inside if block, strange
> 
> > // drawing results!
> > PlotOHLC(Open, High, Low, Close, 
> > "BIdx = " + BarIndex() + 
> > "\n" + "O = " + O + "\n"+"H = "+ H + "\n"+"L = " + L 
> 
> > + "\n"+"C ",
> > colorBlack, styleCandle) ; 
> > 
> > if (bDraw) {
> > Plot(MA(C, 21), "21 bar MA", colorAqua, 
> > styleLine+styleNoRe scale+styleNoLab el);
> > Plot(MA(C, 55), "55 bar MA", colorGreen, 
> 
> > styleLine+styleNoRe scale+styleNoLab el);
> > //Plot(MA(C, 233), "233 bar MA", colorDarkRed, 
> > // styleLine+styleNoRe scale+styleNoLab el);
> > }
> > 
> > // -- Create 0-initialized arrays the size of barcount
> 
> > aHPivs = H - H;
> > aLPivs = L - L;
> > aHPivHighs = H - H;
> > aLPivLows = L - L;
> > aHPivIdxs = H - H;
> > aLPivIdxs = L - L;
> > aAddedHPivs = H - H;
> > aAddedLPivs = L - L;
> > aLegVol = H - H;
> 
> > aRetrcVol = H - H;
> > 
> > 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);
> 
> > 
> > // -- Initialize value of curTrend
> > nLastVisBar = LastValue(
> > Highest(IIf( Status("barvisible"), BarIndex(), 0)));
> > 
> > curBar = IIf(nlastVisBar > 0 AND bUseLastVis, nlastVisBar, 
> 
> > IIf(Status("action")==4 AND nExploreBarIdx > 0, nExploreBarIdx,
> > LastValue(BarIndex( ))));
> > 
> > curTrend = "";
> > if (aLLVBars[curBar] < aHHVBars[curBar] ) 
> > curTrend = "D";
> 
> > else 
> > curTrend = "U";
> > 
> > // -- Loop through bars. Search for 
> > // entirely array-based approach
> > // in future version
> > /* ************ *******
> > Find main pivots
> 
> > ************ ******* */
> > 
> > // -- Make sure there are enough bars!
> > if (curBar >= nNumBarsToScan) {
> > for (i=0; i<nNumBarsToScan; i++) {
> > 
> > // -- value of curBar dependent on two parameters
> 
> > curBar = IIf(nlastVisBar > 0 AND bUseLastVis, 
> > nlastVisBar- i, 
> > IIf(Status("action")==4 AND nExploreBarIdx > 0, 
> > nExploreBarIdx- i,
> > LastValue(BarIndex( ))-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
> > } 
> 
> > }
> > /* ************ *******
> > Found main pivots
> > ************ ******* */
> > 
> > /* ************ ********* ****
> > Finding missed pivot(s)
> > ************ ********* **** */
> > 
> 
> > // -- Start at last bar. Reestablish curBar
> > curBar = 
> > IIf(nlastVisBar > 0 AND bUseLastVis, 
> > nlastVisBar, 
> > IIf(Status("action")==4 AND nExploreBarIdx > 0, 
> > nExploreBarIdx,
> 
> > LastValue(BarIndex( )))
> > );
> > 
> > // -- Make sure I found at least two of each above.
> > if (nHPivs >= 2 AND nLPivs >= 2) {
> > 
> > lastLPIdx = aLPivIdxs[0] ;
> > lastLPL = aLPivLows[0] ;
> 
> > 
> > lastHPIdx = aHPivIdxs[0] ;
> > lastHPH = aHPivHighs[0] ;
> > 
> > nLastHOrLPivIdx = Max(lastLPIdx, lastHPIdx);
> > 
> > nAddPivsRng = curBar - nLastHOrLPivIdx;
> > aLLVAfterLastPiv = LLV(L, nAddPivsRng) ; 
> 
> > nLLVAfterLastPiv = aLLVAfterLastPiv[ curBar];
> > aLLVIdxAfterLastPiv = LLVBars(L, nAddPivsRng) ; 
> > nLLVIdxAfterLastPiv = curBar - aLLVIdxAfterLastPiv [curBar];
> > aHHVAfterLastPiv = HHV(H, nAddPivsRng) ; 
> 
> > nHHVAfterLastPiv = aHHVAfterLastPiv[ curBar];
> > aHHVIdxAfterLastPiv = HHVBars(H, nAddPivsRng) ; 
> > nHHVIdxAfterLastPiv = curBar - aHHVIdxAfterLastPiv [curBar];
> > 
> > // -- Later want to add last high pivot only if
> 
> > // not in buy mode from last and still in trade
> > 
> > /*
> > Note - I'm only interested in adding pivots if I'm in 
> > a higher-highs or lower-lows scenario
> > */
> > 
> > 
> 
> > // -- OK, let's start where the last high pivot occurs after the
> > // last Low pivot
> > if (lastHPIdx > lastLPIdx) {
> > 
> > /* There are at least two possibilities here. One is that
> > the previous high was higher, indicating that this is a 
> 
> > possible short retracement or one in the making.
> > The other is that the previous high was lower, indicating 
> > that this is a possible long retracement in the working. 
> > However, both depend on opposing pivots. E.g., if I find 
> 
> > higher highs, what if I have lower lows? 
> > 
> > If the highs are descending, then I can consider:
> > - a lower low, and leave it at that
> > - a higher high and higher low
> > - a lower low and another lower high
> 
> > */
> > if (aHPivHighs[ 0] < aHPivHighs[1] ) {
> > 
> > if (nLLVAfterLastPiv < aLPivLows[0] AND 
> > (nLLVIdxAfterLastPi v - lastHPIdx - 1) >= nMinBarsBtwPivs
> > AND nLLVIdxAfterLastPiv != curBar ) {
> 
> > 
> > // -- OK, we'll add this as a pivot. 
> > // Mark it for plotting...
> > aLPivs[nLLVIdxAfter LastPiv] = 1;
> > aAddedLPivs[ nLLVIdxAfterLast Piv] = 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] = nLLVAfterLastPiv;
> 
> > aLPivIdxs[0] = nLLVIdxAfterLastPiv ;
> > nLPivs++;
> > 
> > // -- Test whether to add piv given last piv is high 
> > // AND we have lower highs 
> > }
> > 
> > // -- Here, the last piv is a high piv, and we have 
> 
> > // higher-highs. The most likely addition is a 
> > // Low piv that is a retracement.
> > } else {
> > 
> > if (nLLVAfterLastPiv > aLPivLows[0] AND 
> > (nLLVIdxAfterLastPi v - lastHPIdx - 1) >= nMinBarsBtwPivs
> 
> > AND nLLVIdxAfterLastPiv != curBar ) {
> > 
> > // -- OK, we'll add this as a pivot. 
> > // Mark it for plotting...
> > aLPivs[nLLVIdxAfter LastPiv] = 1;
> > aAddedLPivs[ nLLVIdxAfterLast Piv] = 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] = nLLVAfterLastPiv;
> > aLPivIdxs[0] = nLLVIdxAfterLastPiv ;
> > nLPivs++;
> > 
> > // -- Test whether to add piv given last piv is high 
> > // AND we have lower highs 
> > } 
> 
> > // -- The last piv is a high and we have higher highs 
> > // OR lower highs
> > }
> > 
> > /* ************ ********* ********* ********* ********* ********* *******
> > Still finding missed pivot(s). Here, the last piv is a low piv.
> 
> > ************ ********* ********* ********* ********* ********* ******* */
> > } else {
> > 
> > // -- First case, lower highs
> > if (aHPivHighs[ 0] < aHPivHighs[1] ) {
> > 
> > if (nHHVAfterLastPiv < aHPivHighs[0] AND 
> 
> > (nHHVIdxAfterLastPi v - lastLPIdx - 1) >= nMinBarsBtwPivs
> > AND nHHVIdxAfterLastPiv != curBar ) {
> > 
> > // -- OK, we'll add this as a pivot. 
> > // Mark that for plotting
> > aHPivs[nHHVIdxAfter LastPiv] = 1;
> 
> > aAddedHPivs[ nHHVIdxAfterLast Piv] = 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] = nHHVAfterLastPiv;
> > aHPivIdxs[0] = nHHVIdxAfterLastPiv ;
> > nHPivs++;
> > 
> > // -- Test whether to add piv given last piv is high 
> 
> > // AND we have lower highs 
> > }
> > 
> > // -- Second case when last piv is a low piv, higher highs 
> > // Most likely addition is high piv that is a retracement.
> > // Considering adding a high piv as long as it is higher
> 
> > } else {
> > 
> > // -- Where I have higher highs,
> > if (nHHVAfterLastPiv > aHPivHighs[0] AND 
> > (nHHVIdxAfterLastPi v - lastLPIdx - 1) >= nMinBarsBtwPivs
> > AND nHHVIdxAfterLastPiv != curBar ) {
> 
> > 
> > // -- OK, we'll add this as a pivot. 
> > // Mark it for plotting...
> > aHPivs[nHHVIdxAfter LastPiv] = 1;
> > aAddedHPivs[ nHHVIdxAfterLast Piv] = 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] = nHHVAfterLastPiv;
> 
> > aHPivIdxs[0] = nHHVIdxAfterLastPiv ;
> > nHPivs++;
> > 
> > // -- Test whether to add piv given last piv is high 
> > // AND we have lower highs 
> > }
> > 
> > }
> > 
> > } 
> > 
> 
> > // -- If there are at least two of each
> > }
> > 
> > /* ************ ********* ********* ********* *
> > // -- Done with finding pivots
> > ************ ********* ********* ********* ** */ 
> > 
> 
> > if (bDraw) {
> > 
> > // -- OK, let's plot the pivots using arrows
> > PlotShapes(
> > IIf(aHPivs== 1, shapeDownArrow, shapeNone), 
> > colorRed, 0, High, Offset=-15);
> > PlotShapes(
> > IIf(aAddedHPivs= =1, shapeDownArrow, shapeNone),
> 
> > colorDarkRed, 0, High, Offset=-15);
> > PlotShapes(
> > IIf(aLPivs== 1, shapeUpArrow , shapeNone), 
> > colorGreen, 0, Low, Offset=-15);
> > PlotShapes(
> > IIf(aAddedLPivs= =1, shapeUpArrow , shapeNone), 
> 
> > colorDarkGreen, 0, Low, Offset=-15);
> > }
> > 
> > /* ************ ********* ********* ********* *
> > // -- Done with discovering and plotting pivots 
> > ************ ********* ********* ********* ** */ 
> 
> > 
> > // -- I'm going to want to look for possible retracement
> > risk = 0;
> > profInc = 0;
> > nLeg0Pts = 0;
> > nLeg0Bars = 0;
> > nLeg0Vol = 0;
> > nLeg1Pts = 0;
> > nLeg1Bars = 0;
> 
> > nLeg1Vol = 0;
> > nLegBarsDiff = 0;
> > nRtrc0Pts = 0;
> > nRtrc0Bars = 0;
> > nRtrc0Vol = 0;
> > nRtrc1Pts = 0;
> > nRtrc1Bars = 0;
> > nRtrc1Vol = 0;
> > 
> > minRtrc = 0;
> > maxRtrc = 0;
> 
> > minLine = 0;
> > maxLine = 0;
> > triggerLine = 0;
> > firstProfitLine = 0;
> > triggerInc = 0;
> > triggerPrc = 0;
> > firstProfitPrc = 0;
> > retrcPrc = 0;
> > retrcBar = 0;
> > retrcBarIdx = 0;
> 
> > retrcRng = 0;
> > aRetrcPrc = H-H;
> > aRetrcPrcBars = H-H;
> > aRetrcClose = C;
> > retrcClose = 0;
> > 
> > // -- Do TCZ calcs. Arrangement of pivs very specific
> > // for this setup.
> 
> > if (nHPivs >= 2 AND 
> > nLPivs >=2 AND 
> > aHPivHighs[0] > aHPivHighs[1] AND
> > aLPivLows[0] > aLPivLows[1] ) {
> > 
> > tcz500 = 
> > (aHPivHighs[ 0] -
> > (.5 * (aHPivHighs[ 0] - aLPivLows[1] )));
> 
> > 
> > tcz618 = 
> > (aHPivHighs[ 0] -
> > (.618 * (aHPivHighs[ 0] - aLPivLows[1] )));
> > 
> > tcz786 = 
> > (aHPivHighs[ 0] -
> > (.786 * (aHPivHighs[ 0] - aLPivLows[0] )));
> > 
> > retrcRng = curBar - aHPivIdxs[0] ;
> 
> > aRetrcPrc = LLV(L, retrcRng);
> > aRetrcPrcBars = LLVBars(L, retrcRng);
> > 
> > retrcPrc = aRetrcPrc[curBar] ;
> > retrcBarIdx = curBar - aRetrcPrcBars[ curBar];
> > retrcClose = aRetrcClose[ retrcBarIdx] ;
> 
> > 
> > // -- bTCZLong setup?
> > bTCZLong = (
> > 
> > // -- Are retracement levels arranged in
> > // tcz order?
> > 
> > // .500 is above .786 for long setups
> > tcz500 >= (tcz786 * (1 - tczTolerance) )
> 
> > AND 
> > // .681 is below .786 for long setups
> > tcz618 <= (tcz786 * (1 + tczTolerance) )
> > AND
> > 
> > // -- Is the low in the tcz range
> > // -- Is the close >= low of tcz range
> 
> > // and low <= high of tcz range
> > retrcClose >= ((1 - retrcTolerance) * tcz618)
> > AND
> > retrcPrc <= ((1 + retrcTolerance) * tcz500)
> > ); 
> > 
> > // -- risk would be high of signal bar minus low of zone
> 
> > //risk = 0;
> > 
> > // -- lower highs and lower lows
> > } else if (nHPivs >= 2 AND nLPivs >=2 
> > AND aHPivHighs[0] < aHPivHighs[1] 
> > AND aLPivLows[0] < aLPivLows[1] ) {
> > 
> 
> > tcz500 = 
> > (aHPivHighs[ 1] -
> > (.5 * (aHPivHighs[ 1] - aLPivLows[0] )));
> > 
> > tcz618 = 
> > (aHPivHighs[ 0] -
> > (.618 * (aHPivHighs[ 1] - aLPivLows[0] )));
> > 
> > tcz786 = 
> > (aHPivHighs[ 0] -
> 
> > (.786 * (aHPivHighs[ 0] - aLPivLows[0] )));
> > 
> > retrcRng = curBar - aLPivIdxs[0] ;
> > aRetrcPrc = HHV(H, retrcRng);
> > retrcPrc = aRetrcPrc[curBar] ;
> > aRetrcPrcBars = HHVBars(H, retrcRng);
> 
> > retrcBarIdx = curBar - aRetrcPrcBars[ curBar];
> > retrcClose = aRetrcClose[ retrcBarIdx] ;
> > 
> > bTCZShort = (
> > // -- Are retracement levels arranged in
> > // tcz order?
> > 
> > // .500 is below .786 for short setups
> 
> > tcz500 <= (tcz786 * (1 + tczTolerance) )
> > AND 
> > // .681 is above .786 for short setups
> > tcz618 >= (tcz786 * (1 - tczTolerance) ) 
> > AND
> > 
> > // -- Is the close <= high of tcz range
> 
> > // and high >= low of tcz range
> > retrcClose <= ((1 + retrcTolerance) * tcz618)
> > AND
> > retrcPrc >= ((1 - retrcTolerance) * tcz500)
> > ); 
> > 
> > // -- Risk would be top of zone - low of signal bar 
> 
> > //risk = 0;
> > }
> > 
> > // -- Show zone if present
> > if (bTCZShort OR bTCZLong) { 
> > 
> > // -- Be prepared to see symmetry
> > if (bTCZShort) {
> > if (aLPivIdxs[0] > aHPivIdxs[0] ) { 
> 
> > // -- Valuable, useful symmetry information 
> > nRtrc0Pts = aHPivHighs[0] - aLPivLows[1] ;
> > nRtrc0Bars = aHPivIdxs[0] - aLPivIdxs[1] + 1;
> > nRtrc1Pts = retrcPrc - aLPivLows[0] ;
> > nRtrc1Bars = retrcBarIdx - aLPivIdxs[0] + 1;
> 
> > } else {
> > nRtrc0Pts = aHPivHighs[1] - aLPivLows[1] ;
> > nRtrc0Bars = aHPivIdxs[1] - aLPivIdxs[1] + 1;
> > nRtrc1Pts = aHPivHighs[0] - aLPivLows[0] ;
> > nRtrc1Bars = aHPivIdxs[0] - aLPivIdxs[0] + 1;
> 
> > }
> > } else { // bLongSetup
> > if (aLPivIdxs[0] > aHPivIdxs[0] ) { 
> > nRtrc0Pts = aHPivHighs[0] - aLPivLows[1] ;
> > nRtrc0Bars = aHPivIdxs[0] - aLPivIdxs[1] + 1;
> > nRtrc1Pts = retrcPrc - aLPivLows[0] ;
> 
> > nRtrc1Bars = retrcBarIdx - aLPivIdxs[0] + 1;
> > } else {
> > nRtrc0Pts = aHPivHighs[1] - aLPivLows[0] ;
> > nRtrc0Bars = aLPivIdxs[0] - aHPivIdxs[1] + 1;
> > nRtrc1Pts = aHPivHighs[0] - aLPivLows[0] ;
> 
> > nRtrc1Bars = aLPivIdxs[0] - aHPivIdxs[0] + 1;
> > }
> > }
> > 
> > if (bShowTCZ) {
> > Plot(
> > LineArray( IIf(bTCZLong, aHPivIdxs[0] , aLPivIdxs[0] ),
> > tcz500, curBar, tcz500 , 0), 
> 
> > "tcz500", colorPaleBlue, styleLine);
> > Plot(
> > LineArray( IIf(bTCZLong, aHPivIdxs[0] , aLPivIdxs[0] ),
> > tcz618, curBar, tcz618, 0), 
> > "tcz618", colorPaleBlue, styleLine);
> 
> > Plot(
> > LineArray( IIf(bTCZLong, aHPivIdxs[0] , aLPivIdxs[0] ),
> > tcz786, curBar, tcz786, 0), 
> > "tcz786", colorTurquoise, styleLine);
> > }
> > 
> > // -- if (bShowTCZ)
> > }
> 
> > 
> > if (bDraw) {
> > Title = Name() + " (" + StrLeft(FullName( ), 10) + 
> > ") ATR: " + NumToStr(ATR( 1), 4.2) + " ( " + 
> > NumToStr((C - Ref(C, -1)), 4.2) + " / " +
> 
> > NumToStr(((( C - Ref(C, -1)) / Ref(C, -1)) * 100), 2.1) + "% ) " +
> > WriteVal( SelectedValue( DateTime() ), formatDateTime) +
> > " \nO: " + Open + 
> > ", \nH: " + High + 
> 
> > ", \nL: " + Low + 
> > ", \nC: " + Close + ", \n" +
> > // "Risk: " + WriteVal(risk, 2.1) + "% \n" +
> > "Rtrc 0/1 Pts: " + WriteVal(nRtrc0Pts, 2.1) + "/" + 
> 
> > WriteVal(nRtrc1Pts, 2.1) + " \n" +
> > "Rtrc 0/1 Bars: " + WriteVal(nRtrc0Bars , 2.0) + "/" +
> > WriteVal(nRtrc1Bars , 2.0);
> > }
> > 
> > // ************ ********* *****
> 
> > // END INDICATOR CODE
> > // ************ ********* *****
> > 
> > 
> > _SECTION_END( );
> >
>




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

**** IMPORTANT PLEASE READ ****
This group is for the discussion between users only.
This is *NOT* technical support channel.

TO GET TECHNICAL SUPPORT send an e-mail directly to 
SUPPORT {at} amibroker.com

TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
http://www.amibroker.com/feedback/
(submissions sent via other channels won't be considered)

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

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/