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

Re: [amibroker] Re: WHAT INDICATOR IS THIS?



PureBytes Links

Trading Reference Links



Hi,

This is code I wrote to detect *past* pivots so that they could be used in Fibonacci calculations, etc. It's often mistaken to be code that will provide r/t buy and sell signals. It doesn't do that. I find it useful for its intended purpose.

Regards,

Gordon

P.S. I'm working on my trading. I hope to become GoLden :)

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





Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___