Fave This

Sunday, 4 December 2011

Coba Elliot Wave AFL - Re: [Komunitas AmiBroker] Andrew's Pitchfork for Beginner

Kelihatannya aneh ya ?
Saya juga sudah coba period EW nya diganti panjang pendek... tetep aja aneh ngeliatnya...

Regards,
ES

On Mon, Dec 5, 2011 at 11:36 AM, Eco Syariah <esyariah@gmail.com> wrote:
Waah... thank you mas Satriyo... ntar dicoba...

Regards,
ES

On Mon, Dec 5, 2011 at 11:21 AM, Satriyo Pranoto <satriyo.pranoto@gmail.com> wrote:


Adak ok pak…tapi hitunga wave count-nya ndak akan sama dgn punya mbah OB.. Mungkin level wave-nya yg digenerate lbh rendah. Tapi lumayan kok pak…

 

PS: saya pribadi kurang suka Elliot untuk memperkirakan harga pada jarak pendek..krn buku Elliot wave pun kurang begitu jelas di-mengerti…Kalo jarak panjang, oke lah…

 

 

Berikut saya share yg pernah saya temukan..lengkap dgn buy and sell-nya ;-)

 

 

// Parameters

PeriodEMA = 13;

MACDIndicatorRange = 50;

// Volume filter

VolumeFilter = Param( "Volume MA filter", 100000, 50000, 500000, 100000 );

Timeframe = Interval(2);

// Adjust for weekly if necessary

if( Timeframe == "5-day" || Timeframe == "Weekly" ) {

  VolumeFilter  = VolumeFilter * 5;

}

else if( Timeframe == "Monthly") {

  VolumeFilter = VolumeFilter * 20;

}

else if( Timeframe != "Daily" ) {

  VolumeFilter = 0;

}

// Minimum number of bars required to form a divergence pattern. For a

// positive divergence, this is the number of falling bars in the context

// of a rising MACD or MACD-H pattern. Vice versa for negative divergence

MACDDivMinWidth = Param("Divergence min width", 4, 1, 10, 1 );

// Minimum width of negative projecting wave between two positive MACD-H waves,

// otherwise two positive waves will be considered as one single wave. This

// minimises invalid divergences, to ensure that "back of bears is broken".

// The same applies for a positive wave between two negative waves.

HistMinWidth = Param("Histogram min width", 4, 1, 10, 1 );

 

PeriodEMA = Optimize( "PeriodEMA ", 13, 5, 23, 1 );

// Other parameters

OpenPositions = 10;

ATRPeriod = 5;

InitialCapital = 100000;

PeriodFast = Param( "Fast EMA", 12, 2, 200, 1 );

PeriodSlow = Param( "Slow EMA", 26, 2, 200, 1 );

PeriodSignal = Param( "Signal EMA", 9, 2, 200, 1 );

MACDInd = MACD(PeriodFast, PeriodSlow );

SigInd = Signal(PeriodFast, PeriodSlow , PeriodSignal );

HistInd = MACDInd - SigInd ;

_N( macdStr = WriteVal( PeriodFast, 1.0 )+","+WriteVal( PeriodSlow , 1.0 ) );

_N( sigStr = macdStr + ","+WriteVal( PeriodSignal , 1.0 ) );

 

 

 

 

// Get displayed min and max value of MACD and MACD-H, to rescale it for better visibility

scMACDMax = LastValue(HHV(Max(MACDInd, sigInd),

                  BarsSince( Status("barvisible") AND NOT Ref(Status("barvisible"),-1) )));

scMACDMin = LastValue(LLV(Min(MACDInd, sigInd),

                  BarsSince( Status("barvisible") AND NOT Ref(Status("barvisible"),-1) )));

scaleMACD = Max( abs(scMACDMax), abs(scMACDMin) );

scHistMax = LastValue(HHV(HistInd,

            BarsSince( Status("barvisible") AND NOT Ref(Status("barvisible"),-1) )));

scHistMin = LastValue(LLV(HistInd,

            BarsSince( Status("barvisible") AND NOT Ref(Status("barvisible"),-1) )));

scaleHist = Max( abs(scHistMax), abs(scHistMin) );

 

 

 

_SECTION_BEGIN("Patterns Wave");   

Change = Param("Wave Period",7,0,100,1);

SupResA = Param("Sup-Res A Period",20,0,100,1);

SupResB = Param("Sup-Res B Period",25,0,100,1);

Res1 = ParamColor("Resistance High", colorRed );

Res2 = ParamColor("Resistance Low", colorDarkRed );

Sup1 = ParamColor("Support High", colorDarkGreen );

Sup2 = ParamColor("Support Low", colorBrightGreen );

 

procedure PlotShapeAt( x, y, shape, shift )

{

  PlotShapes( IIf( BarIndex() == x, shape, 0 ), colorWhite, 0, y, shift );

}

bi = BarIndex();

sbi = SelectedValue( bi );

GraphXSpace = 2;

Plot( Zig( C, Change ), "", colorWhite, styleThick );

upshift = 15;

if( SelectedValue( PeakBars( C, Change ) < TroughBars( C, Change ) ) )

{

   pt1 = PeakBars( C, Change, 1 ) == 0 ;

   pt2 = TroughBars( C, Change, 1 ) == 0 ;

}

else

{

   pt1 = TroughBars( C, Change, 1 ) == 0 ;

   pt2 = PeakBars( C, Change, 1 ) == 0 ;

   upshift = -upshift;

}

bpt1 = SelectedValue( ValueWhen( pt1, bi ) );

bpt2 = SelectedValue( ValueWhen( pt2, bi ) );

bpt3 = SelectedValue( ValueWhen( pt1, bi, 2 ) );

bpt4 = SelectedValue( ValueWhen( pt2, bi, 2 ) );

bpt5 = SelectedValue( ValueWhen( pt1, bi, 3 ) );

bpt6 = SelectedValue( ValueWhen( pt2, bi, 3 ) );

PlotShapeAt( bpt1, C, shapeDigit5, upshift );

PlotShapeAt( bpt2, C, shapeDigit4, -upshift  );

PlotShapeAt( bpt3, C, shapeDigit3, upshift );

PlotShapeAt( bpt4, C, shapeDigit2, -upshift );

PlotShapeAt( bpt5, C, shapeDigit1, upshift );

_SECTION_END();

 

_SECTION_BEGIN("Candle Detail");

Candletype=ParamList("Candle Type","Haikin|Candle",0);

if(Candletype=="Candle")

{

Candletype=barcolor =IIf(C>O, ParamColor("Up candlestick", colorBrightGreen ), ParamColor("Down candlestick", colorRed ));

Plot( C, "Close", barColor, styleNoTitle | ParamStyle("Style", styleCandle|styleThick, mask = maskAll) );

}

else if(Candletype=="Haikin")

{

HaClose = (O+H+L+C)/4;

HaOpen = AMA( Ref( HaClose, -1 ), 0.3 );

HaHigh = Max( H, Max( HaClose, HaOpen ) );

HaLow = Min( L, Min( HaClose, HaOpen ) );

HaClose = (O+H+L+C)/4;

HaOpen = AMA( Ref( HaClose, -1 ), 0.3 );

HaHigh = Max( H, Max( HaClose, HaOpen ) );

HaLow = Min( L, Min( HaClose, HaOpen ) );

xDiff = (HaHigh - Halow) * IIf(StrFind(Name(),"JPY"),100,10000);

barcolor = IIf(HaClose >= HaOpen,colorBrightGreen,colorRed);

SetBarFillColor( IIf(MACDInd >SigInd, colorDarkBlue,colorBlack) );

PlotOHLC( HaOpen, HaHigh, HaLow, HaClose, "", barcolor, styleCandle );

}

_SECTION_END();

 

_SECTION_BEGIN("Pivot");

nBars = Param("Number of bars", 12, 5, 40);

bShowTCZ = Param("Show TCZ", 1, 0, 1);

nExploreBarIdx = 0;

nExploreDate = 0;

nCurDateNum = 0;

DN = DateNum();

DT = DateTime();

bTCZLong = False;

bTCZShort = False;

nAnchorPivIdx = 0;

ADX8 = ADX(8);

if(Status("action")==1) {

    bDraw = True;

    bUseLastVis = 1;

} else {

    bDraw = False;

    bUseLastVis = False;

    bTrace = 1;

    nExploreDate = Status("rangetodate");

    for (i=LastValue(BarIndex());i>=0;i--) {

        nCurDateNum = DN[i];

        if (nCurDateNum == nExploreDate) {

            nExploreBarIdx = i;

        }

    }

}

GraphXSpace=7;

if (bDraw) {

}

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;

aHHVBars = HHVBars(H, nBars);

aLLVBars = LLVBars(L, nBars);

aHHV = HHV(H, nBars);

aLLV = LLV(L, nBars);

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";

if (curBar >= 120) {

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

        curBar = IIf(nlastVisBar > 0 AND bUseLastVis,

            nlastVisBar-i,

            IIf(Status("action")==4 AND nExploreBarIdx > 0,

            nExploreBarIdx-i,

            LastValue(BarIndex())-i));

        if (aLLVBars[curBar] < aHHVBars[curBar]) {

            if (curTrend == "U") {

                curTrend = "D";

                curPivBarIdx = curBar - aLLVBars[curBar];

                aLPivs[curPivBarIdx] = 1;

                aLPivLows[nLPivs] = L[curPivBarIdx];

                aLPivIdxs[nLPivs] = curPivBarIdx;

                nLPivs++;

            }

        } else {

            if (curTrend == "D") {

                curTrend = "U";

                curPivBarIdx = curBar - aHHVBars[curBar];

                aHPivs[curPivBarIdx] = 1;

                aHPivHighs[nHPivs] = H[curPivBarIdx];

                aHPivIdxs[nHPivs] = curPivBarIdx;

                nHPivs++;

            }

        }     

    }

}

curBar =

    IIf(nlastVisBar > 0 AND bUseLastVis,

    nlastVisBar,

    IIf(Status("action")==4 AND nExploreBarIdx > 0,

    nExploreBarIdx,

    LastValue(BarIndex()))

    );

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];

    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

                (nLLVIdxAfterLastPiv - lastHPIdx - 1) >= 1

                AND nLLVIdxAfterLastPiv != curBar   ) {

    

                // -- OK, we'll add this as a pivot.

                //    Mark it for plotting...

                aLPivs[nLLVIdxAfterLastPiv] = 1;

                aAddedLPivs[nLLVIdxAfterLastPiv] = 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

                (nLLVIdxAfterLastPiv - lastHPIdx - 1) >= 1

                AND nLLVIdxAfterLastPiv != curBar   ) {

    

                // -- OK, we'll add this as a pivot.

                //    Mark it for plotting...

                aLPivs[nLLVIdxAfterLastPiv] = 1;

                aAddedLPivs[nLLVIdxAfterLastPiv] = 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

                (nHHVIdxAfterLastPiv - lastLPIdx - 1) >= 1

                AND nHHVIdxAfterLastPiv != curBar   ) {

    

                // -- OK, we'll add this as a pivot.

                //    Mark that for plotting

                aHPivs[nHHVIdxAfterLastPiv] = 1;

                aAddedHPivs[nHHVIdxAfterLastPiv] = 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

                (nHHVIdxAfterLastPiv - lastLPIdx - 1) >= 1

                AND nHHVIdxAfterLastPiv != curBar   ) {

    

                // -- OK, we'll add this as a pivot.

                //    Mark it for plotting...

                aHPivs[nHHVIdxAfterLastPiv] = 1;

                aAddedHPivs[nHHVIdxAfterLastPiv] = 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) {

PivotEntry = ParamColor( "Entry Color", colorBrightGreen );

PivotEntry2 = ParamColor( "Entry Color2", colorYellow );

PivotExit = ParamColor( "Exit Color", colorRed );

PivotExit2 = ParamColor( "Exit Color2", colorYellow );

    // -- OK, let's plot the pivots using arrows

    PlotShapes(

        IIf(aHPivs==1, shapeSquare, shapeNone),

            PivotExit, 0,   High, Offset=30);

    PlotShapes(

        IIf(aAddedHPivs==1, shapeSquare, shapeNone),

            PivotExit2, 0, High, Offset=30);

    PlotShapes(

        IIf(aLPivs==1, shapeSquare , shapeNone),      

            PivotEntry, 0, Low, Offset=-30);

    PlotShapes(

        IIf(aAddedLPivs==1, shapeSquare , shapeNone),

            PivotEntry2, 0, Low, Offset=-30);

    PlotShapes(

        IIf(aHPivs==1, shapeSquare, shapeNone),

            colorBlack, 0High, Offset=35);

    PlotShapes(

        IIf(aAddedHPivs==1, shapeSquare, shapeNone),

            colorBlack, 0, High, Offset=35);

    PlotShapes(

        IIf(aLPivs==1, shapeSquare , shapeNone),      

            colorBlack, 0, Low, Offset=-35);

    PlotShapes(

        IIf(aAddedLPivs==1, shapeSquare , shapeNone),

            colorBlack, 0, Low, Offset=-35);

}

/* ****************************************

// -- 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 - .005))

        AND

        // .681 is below .786 for long setups

        tcz618 <= (tcz786 * (1 + .005))

        AND

        // -- Is the low in the tcz range

        // -- Is the close >= low of tcz range

        //    and low <= high of tcz range

        retrcClose >= ((1 - .01) *  tcz618)

        AND

        retrcPrc <= ((1 + .01) *  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 + .005))

        AND

        // .681 is above .786 for short setups

        tcz618 >= (tcz786 * (1 - .005))

        AND

        // -- Is the close <= high of tcz range

        //    and high >= low of tcz range

        retrcClose <= ((1 + .01) *  tcz618)

        AND

        retrcPrc >= ((1 - .01) *  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(

            LineArrayIIf(bTCZLong, aHPivIdxs[0], aLPivIdxs[0]),

            tcz500, curBar, tcz500 , 0),

            "tcz500", colorPaleBlue, styleLine|styleNoTitle|Stylehidden);

        Plot(

            LineArrayIIf(bTCZLong, aHPivIdxs[0], aLPivIdxs[0]),

            tcz618, curBar, tcz618, 0),

            "tcz618", colorPaleBlue, styleLine|styleNoTitle|styleHidden);

        Plot(

            LineArrayIIf(bTCZLong, aHPivIdxs[0], aLPivIdxs[0]),

            tcz786, curBar, tcz786, 0),

            "tcz786", colorTurquoise, styleLine|styleNoTitle|StyleHidden);

    }

 

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

 

//  "Risk: " + WriteVal(risk, 2.1) + "%  \n" +

    WriteVal(nRtrc1Pts, 2.1) + "  \n" +

    WriteVal(nRtrc1Bars, 2.0);

}

// **************************

// END INDICATOR CODE

// **************************

_SECTION_END();

_SECTION_BEGIN("Support-Resistance");

//Plot( Close, "Close", colorWhite, styleCandle );

MaxGraph = 12;

BuyOffSet = SupResA;//Optimize("BuyOffSet",18,15,20,1);

SellOffset = BuyOffSet;//Optimize("SellOffset",2,2,14,2);

RegLength = 5;//Optimize("RegLength",5, 2,11,2);

BuyATRPeriod = 2;//Optimize("BuyATRPeriod",2,2,5,1);

SellATRPeriod = BuyATRPeriod;//Optimize("SellATRPeriod",4,2,11,2);

ATRMultiplier = 0.5;//Optimize("ATRMultiplier",1,0.7,1.25,.05);

Graph8 = HHV(H-ATRMultiplier*ATR(BuyATRPeriod),BuyOffset); /* RED */

Graph9 = LLV(L+ATRMultiplier*ATR(SellATRPeriod),SellOffset); /* GREEN */

ave=(Graph8+Graph9)/2;

Graph8Style=Graph9Style = styleNoTitle|styleDashed;

Graph9Color= Sup1; /* 5 is green */

Graph8Color = Res2; /* 4 is red */

nn=SupResB;

mmm=100;

TYP=(High + Low + 2*Close)/4;

CI=(TYP-MA(TYP,14))/(0.015*StDev(TYP,14));

CCCI=EMA(CI,5)+mmm;

Hh=HHV(H,nn);

Ll=LLV(L,nn);

MM=(Hh+Ll)/2;

CCCC=EMA(CCCI*(Hh-Ll)/(2*mmm)+Ll,5);

Plot(Hh,"High Reistance",Res1,styleLine|styleNoTitle);

Plot(Ll,"Low Suport",Sup2,styleLine|styleNoTitle);

_SECTION_END();

Title = StrFormat("\\c02'TOXIC PATTERN'..\\c02 {{NAME}}.....{{DATE}}.....Open @ %g.....High @ %g.....Low @ %g.....Close @ %g.....Change(%0.2f) {{VALUES}}",

O, H, L, C, SelectedValue( ROC( C, 1 )) );

 

 

From: amibroker-4-bei@yahoogroups.com [mailto:amibroker-4-bei@yahoogroups.com] On Behalf Of Eco Syariah
Sent: Monday, December 05, 2011 10:02 AM
To: amibroker-4-bei@yahoogroups.com
Subject: Re: [Komunitas AmiBroker] Andrew's Pitchfork for Beginner

 

 

Tarikan AFL PFork ini juga ada kelemahannya sih... coba letakkan cursor/sector line vertical di 02 Agustus 2011, di saya tidak ada garis PFork yang tampak... adanya di harga 5000-6000 an ?
Mungkin settingan Parameter nya harus dirubah ?

BTW... kalau masih ingat email sy ttg artikel PFork dulu, yaitu ttg Trading TRIAD ( Pitchfork, EW dan Bollinger Band)... maka saya sarankan tambahan BBand pada AFL tsb... di samping itu juga tambahkan lagi AFL Peak Trough/Pivot (semua ada di Library)... lihat apa jadinya ?

Yang belum ada AFL Elliot Wave aja... wkwkwkwk... dari dulu diomongin nih AFL EW, tp belum ada yg bikin... cari alternatif lain pengganti EW ajalah.

Thanks,
ES

2011/12/5 Satriyo Pranoto <satriyo.pranoto@gmail.com>

 

Mas Eco,

Sejak nemu AFL saya lbh suka yg digenerate AFL. Tarikan manual lebih untuk meng-keep hasil yg diperoleh jadi (ndak lari2 lagi)..foto bawah saat saya berusaha ngepas-ngepasin tarikan manual dr tarikan afl

 

 

From: amibroker-4-bei@yahoogroups.com [mailto:amibroker-4-bei@yahoogroups.com] On Behalf Of Eco Syariah
Sent: Monday, December 05, 2011 7:54 AM
To: amibroker-4-bei@yahoogroups.com
Subject: Re: [Komunitas AmiBroker] Andrew's Pitchfork for Beginner

 

 

Mas Kenzie dan AFL Oprekers... sekedar sharing pengalaman aja...

Biasanya kalau ada AFL yg tidak muncul garisnya...  perlu kita cek ke setting color nya dan setting2 lain... sering nemu setting linenya colorblack, sedangkan chart kita background color nya juga colorblack, akhirnya Line tsb jadi tidak kelihatan, maka perlu kita ganti setting color tsb supaya Line nya nampak.

Dalam kasus PFork ini, saya prefer tarikan AFL... kalau manual suka bingung dimana harus mulai nariknya... kalau yang mas Kenzie/Satriyo rasakan, lebih baik menggunakan AFL atau tarik manual ?

Thanks,
ES

2011/12/4 Kenzie Sebastian <kenziesr@yahoo.co.id>



Terima kasih mas Satriyo untuk penjelasan dan juga chart-nya.

Saya pengen memastikan saja, dengan menggunakan AFL lebih simple dibanding dgn narik garis secara manual.

best regards,
Kenzie Sebastian (@kenziesr)


From: "Satriyo Pranoto" <satriyo.pranoto@gmail.com>

Date: Sun, 4 Dec 2011 23:52:19 +0800

Subject: RE: [Komunitas AmiBroker] Andrew's Pitchfork for Beginner

 

 

Ndak perlu lagi mas Kenzie…Tapi harus taruh kursor di hari yg mau dicari garisnya… Misal taruh di tanggal 1 Dec. Di screenshot berikut terlihat parameter yg saya pake

 

 

From: amibroker-4-bei@yahoogroups.com [mailto:amibroker-4-bei@yahoogroups.com] On Behalf Of Kenzie Sebastian
Sent: Sunday, December 04, 2011 11:04 PM
To: amibroker-4-bei@yahoogroups.com
Subject: Re: [Komunitas AmiBroker] Andrew's Pitchfork for Beginner

 

 

Masih perlu diatur titik2nya atau sudah bisa nyari sendiri pak ES?

Saya nyoba ga keluar garisnya... Hehehe...

Btw, MACD-nya keren...

best regards,
Kenzie Sebastian (@kenziesr)


From: Eco Syariah <esyariah@gmail.com>

Date: Sun, 4 Dec 2011 19:45:00 +0700

Subject: Re: [Komunitas AmiBroker] Andrew's Pitchfork for Beginner

 

Sebelum mas Satriyo kirim contohnya... terlampir contoh dari saya... mudah2an bener.

AFL Pitchfork itu sudah lama saya anggurin krn sudah coba utak-atik tapi gak bisa2, dulu saya dapatnya dari Library, keknya (masih) sama dgn yang dikirim mas Satriyo ?

Regards,
ES

On Sun, Dec 4, 2011 at 12:04 PM, Kenzie Sebastian <kenziesr@yahoo.co.id> wrote:

 

Salam kenal mas Satriyo. Bisa dikirim contoh gambarnya mas? kalo bisa contohnya IHSG, sebagai pembanding dgn gambar yang saya kirim.

 

Happy cuan dan moga2 hokie selalu.

 

Sent: Friday, December 02, 2011 6:29 AM

Subject: RE: [Komunitas AmiBroker] Andrew's Pitchfork for Beginner

 

 

Sip mas.. Kenzie…salam kenal…

Sekedar sharing..saya nemu code afl untuk generate Andrew pitchfork…(bukan buatan saya)

Lumayan cool buat iseng2…tapi mesti juga atur2 taruh kursor dan set parameter angle dll…

// Andrews Pitchfork V3.3

//

// Use Peak() & Trough() to get peaks & troughs.

// This version deals with adjacent peaks and adjacent

// troughs, i.e. two peaks without an intervening trough or vice-versa.

// It goes backwards from the selected bar until it has a set of

// peak,trough,peak or trough,peak,trough points to use for calulating

// the pitchfork.  When 2 or more peaks or 2 or more troughs are adjacent

// it only uses the last one, i.e. the rightmost one, of the series.

//

// This version only uses the zigzag peak troughs after they have been

// revealed by the subsequent price action.  i.e. the price has to have

// moved off the high/low by the zigzag pct before the peak or trough will

// be used.

//

// This version plots the trendlines as exponential curves that plot as

// straight lines on an semilog chart.

//

SetBarsRequired( 999999,999999);

bi=BarIndex();

sbi=SelectedValue(bi);

// Pct threshhold for peak() & trough()

Zigpct=Param("Zigpct",4.6,1.0,30.0,0.1,0);

// Since the Zig function only works on a single array, to get a true

// High/Low peak/trough have to approximate it by an EMA choosing the

// High/Low based on the direction the EMA is moving.  Very occasionally

// it misses the correct High/Low.  To just use value, for example the close,

// just change zpr=IIf(ROC(zema,1) > 0,H,L); to zpr=C;

zema=EMA(C,14);

zpr=IIf(ROC(zema,1) > 0,H,L);

zag=Zig(zpr,zigpct);

tr=Ref(zag,-1) > zag AND zag < Ref(zag,1);

pk=Ref(zag,-1) < zag AND zag > Ref(zag,1);

pkprice=ValueWhen(pk,zpr);

trprice=ValueWhen(tr,zpr);

// This bit is still valid at the right edge.  If price moves far enough in 1 Day to show

// a peak or trough on the last bar, the peak or trough won't go away later. The pk_id OR

// tr_id (below) will appear on the same bar.  Normally peaks & troughs appear in 'the past',

// e.g. the high 10 days ago wasn't a peak yesterday but today it is because the price dropped

// enough to make it a peak.

pklast=IIf(BarsSince(pk) < BarsSince(tr),1,0);

trlast=IIf(BarsSince(tr) < BarsSince(pk),1,0);

// A peak or trough is defined as the price moving X pct down or up from a high OR Low.

// The identification point is when the price has actually moved that far.  The Peak/Trough

// will appear 'in the past' on the same day as the pk_id or tr_id appears on the rightmost

// bar.

// Use 'OR tr/OR pk' because when the bar that reveals the pk/tr is also a pk/tr the pklast/

// trlast will have flipped.

// Can't use cross of H or L in the 2nd AND because the H or L may not get above OR below the

// trigger price when the pk/tr occurs.

// The NOT conditions eliminate same-day pk/tr pk_id/tr_id cases. i.e. when the Day's price

// range was >= zpct on the pk/tr day. 

pk_id=((pklast OR tr) AND pkprice*(1-(zigpct*0.01)) > L ) AND NOT ( pk AND (H -

L)/L >= 0.01 * zigpct);

tr_id=((trlast OR pk) AND H > trprice*(1+(zigpct*0.01)) ) AND NOT ( tr AND (H -

L)/L >= 0.01 * zigpct);

// The pk_id/tr_id conditions can recur before the next pk or tr

pk_id=ExRem(pk_id,tr_id);

tr_id=ExRem(tr_id,pk_id);

pk_idlast=IIf(BarsSince(pk_id) < BarsSince(tr_id),1,0);

tr_idlast=IIf(BarsSince(tr_id) < BarsSince(pk_id),1,0);

Lookbk=IIf(pk_idlast,BarsSince(pk),BarsSince(tr));

// How many bars to extend the pitchfork past the selected bar.

xtsn=Param("Extension",62,1,2500,1);

// Shift to move pitchfork up/down from original position one penny at time.

shift=Param("Shift",0,-2000,2000,0.01);

// Filter out cases when the angle of the median lines is too extreme,

// The loop will continue until it finds a pitchfork whose slope falls

// between +- the Angle Limit.  Setting the angle limit to 90 effectively

// turns it off.

alimit=Param("Angle Limit",40,1,180,1);

// bkgrndcolor should match your background color.  It's used to mask the

// parts of the pitchfork arrays outside the calculated pitchfork from view.

bkgrndcolor=ParamColor("Background Color",colorLightGrey);

pitchforkcolor=ParamColor("Pitchfork Color",colorWhite);

// The peak/trough lines will be used to determine the y coordinates

// of the pitchfork's 3 determining points.

//pline1=Peak(H,Zigpct,1);

//tline1=Trough(L,Zigpct,1);

pline1=pkprice;

tline1=trprice;

// Identify the pivots.

pzag1=pline1 != Ref(pline1,-1);

tzag1=tline1 != Ref(tline1,-1);

// Get the x,y coordinates of the pivots skipping adjacent

// peaks and troughs.  Go backwards from the current bar minus the lookback.

// These will hold the x,y coordinates of the pivot points in arrays at the

// sbi index.

zagx1=0;

zagx2=0;

zagx3=0;

zagy1=0;

zagy2=0;

zagy3=0;

for ( i = sbi - Lookbk[sbi], zagfnd = 0, pzagfnd = 0, tzagfnd = 0 ; i >= 0 &&

zagfnd < 3; i-- ) {

    if ( pzag1[i] || tzag1[i] ) {

        if ( pzag1[i] && NOT pzagfnd ) {

             zagfnd=zagfnd+1;

             pzagfnd=1;

             tzagfnd=0;

             if ( zagfnd == 1 ) {

                 zagx1[sbi]=i;

                 zagy1[sbi]=pline1[i];

             } else if (zagfnd == 2) {

                 zagx2[sbi]=i;

                 zagy2[sbi]=pline1[i];

             } else if (zagfnd == 3) {

                 zagx3[sbi]=i;

                 zagy3[sbi]=pline1[i];

             }

        } else if ( tzag1[i] && NOT tzagfnd ) {

             zagfnd=zagfnd+1;

             tzagfnd=1;

             pzagfnd=0;

             if ( zagfnd == 1 ) {

                 zagx1[sbi]=i;

                 zagy1[sbi]=tline1[i];

             } else if (zagfnd == 2) {

                 zagx2[sbi]=i;

                 zagy2[sbi]=tline1[i];

             } else if (zagfnd == 3) {

                 zagx3[sbi]=i;

                 zagy3[sbi]=tline1[i];

             }

        }

    }

    if ( zagfnd == 3 ) {  // Got 3 candidate peak/trough points

        echng=0;

        midx=0;

        midy=0;

        Handle=0;

        Top=0;

        Bot=0;

        // Determine Midpoint between the rightmost 2 pivots and the slope from the

        // leftmost pivot to the midpoint.

        Midx[sbi]=zagx2[sbi] + (zagx1[sbi]-zagx2[sbi]) / 2;

        Midy[sbi]=exp( log(zagy1[sbi]) - ( log(zagy1[sbi])-log(zagy2[sbi]) ) /

2);

        echng=(log(midy[sbi])-log(zagy3[sbi]))/(midx[sbi]-zagx3[sbi]);

        // Apply the Angle Limit filter

        angle_rad = atan(echng);//radians

        angle_deg = 100 * angle_rad * 180/3.1416;//degrees

        if ( angle_deg < -alimit || angle_deg > alimit ) { // Too steep, reset the search

                                                           // to begin from the 2nd pivot found

            if ( tzagfnd == 1 ) {  // was tr,pk,tr so switch to pk,tr,pk

                tzagfnd = 0;

                pzagfnd = 1;

                zagfnd = 1;

                zagx1[sbi]=zagx2[sbi];

                zagy1[sbi]=zagy2[sbi];

                i = zagx1[sbi];

                zagx2=0;

                zagx3=0;

                zagy2=0;

                zagy3=0;

            } else// was pk,tr,pk so switch to tr,pk,tr

                tzagfnd = 1;

                pzagfnd = 0;

                zagfnd = 1;

                zagx1[sbi]=zagx2[sbi];

                zagy1[sbi]=zagy2[sbi];

                i = zagx1[sbi];

                zagx2=0;

                zagx3=0;

                zagy2=0;

                zagy3=0;

            }

       }

    }

}

// Calculate the Pitchfork itself

// Handle first

for ( j=zagx3[sbi],n=0 ; j < Min(sbi+xtsn,BarCount) ; j++,n++ ) {

   Handle[j]=exp(log(zagy3[sbi]) + n*echng) + shift;

}

// High & low median lines.

if ( (exp(log(zagy2[sbi]) + (sbi-zagx2[sbi])*echng))

     > (exp(log(zagy1[sbi]) + (sbi-zagx1[sbi])*echng)) ) {  // Which one is top?

   for ( j=zagx2[sbi],n=0 ; j < Min(sbi+xtsn,BarCount) ; j++,n++ ) {

      top[j]=exp(log(zagy2[sbi]) + n*echng) + shift;

   }

   for ( j=zagx1[sbi],n=0 ; j < Min(sbi+xtsn,BarCount) ; j++,n++ ) {

      bot[j]=exp(log(zagy1[sbi]) + n*echng) + shift;

   }

} else {

   for ( j=zagx2[sbi],n=0 ; j < Min(sbi+xtsn,BarCount) ; j++,n++ ) {

      bot[j]=exp(log(zagy2[sbi]) + n*echng) + shift;

   }

   for ( j=zagx1[sbi],n=0 ; j < Min(sbi+xtsn,BarCount) ; j++,n++ ) {

      top[j]=exp(log(zagy1[sbi]) + n*echng) + shift;

   }

}

Hcolor=IIf(Handle==0,bkgrndcolor,IIf(Ref(handle,-1)== 0 AND handle != 0,

bkgrndcolor,pitchforkcolor));

Tcolor=IIf(Top==0,bkgrndcolor,IIf(Ref(top,-1)== 0 AND top != 0,

bkgrndcolor,pitchforkcolor));

Bcolor=IIf(Bot==0,bkgrndcolor,IIf(Ref(bot,-1)== 0 AND bot != 0,

bkgrndcolor,pitchforkcolor));

Htitle=EncodeColor(pitchforkcolor)

      + StrFormat("\nAndrews: pct=%g lkbk=%g shft=%g alimit=%g Angle=%3.2f

Handle=",

        Zigpct, Lookbk, shift, alimit, angle_deg);

Plot(Handle,Htitle,Hcolor,styleLine+styleDashed+styleNoRescale);

Plot(Bot,EncodeColor(pitchforkcolor)+"

Bot=",Bcolor,styleLine+styleDashed+styleNoRescale);

Plot(Top,EncodeColor(pitchforkcolor)+"

Top=",Tcolor,styleLine+styleDashed+styleNoRescale);

From: amibroker-4-bei@yahoogroups.com [mailto:amibroker-4-bei@yahoogroups.com] On Behalf Of Kenzie Sebastian
Sent: Thursday, December 01, 2011 10:08 PM
To: amibroker-4-bei@yahoogroups.com
Subject: Re: [Komunitas AmiBroker] Andrew's Pitchfork for Beginner

 

Update Andrew's Pitchfork untuk IHSG:

Sepertinya lembahnya (trough) sudah terbentuk, sehingga garis support trendline-nya bisa diletakkan, namun  masih bersifat sementara (tentative).

Error! Filename not specified.

Happy cuan dan moga2 hokie always.

Sent: Wednesday, November 16, 2011 1:09 AM

Subject: Re: [Komunitas AmiBroker] Andrew's Pitchfork for Beginner

Saya lampirkan chart IHSG Daily dengan tambahan Andrew's Pitchfork pada periode Oktober 2011 sampai sekarang setelah break out resistance trendline.

Sebagai catatan: garis support trendline masih belum teruji.

Happy trading....

Best Regards,

Kenzie Sebastian (@kenziesr)

Sent: Wednesday, November 16, 2011 12:20 AM

Subject: [Komunitas AmiBroker] Andrew's Pitchfork for Beginner

 

Saya jadi tertarik belajar Andrew's Pitchfork setelah pak Eco memperkenalkan tool ini beberapa waktu yang lalu Error! Filename not specified.

Apa yang saya pelajari saya coba share disini...

Andrew's Pitchfork for Beginner

"What Does Andrew's Pitchfork Mean? A technical indicator that uses three parallel trendlines to identify possible levels of support and resistance. The trendlines are created by placing three points at the end of identified trends. This is usually achieved by placing the points in three consecutive peaks or troughs. Once the points have been placed, a straight line is drawn from the first point that intersects the midpoint of the other two".

Error! Filename not specified.

Paragrap diatas saya kutip dari investopedia.com, secara singkat yang dimaksud dengan "Andrew's Pitchfork" adalah sebuah technical indicator terdiri dari 3 garis trendline paralel yang mana digunakan untuk tujuan mendeteksi level support & resistance. Disini yang saya garis bawahi dua istilah, yaitu: trendline dan support & resistance.

Trendline

Untuk menggaris sebuah trendline diperlukan minimal dua titik penghubung. Namun, perlu diingat, trendline tersebut masih bersifat sementara (tentative) karena masih dibutuhkan ujian untuk ketiga kalinya untuk sebuah trendline dinyatakan valid. Sebuah trendline dinyatakan semakin kuat bila sering teruji. Misal: sebuah trendline yang sudah teruji lima kali akan cenderung lebih kuat dibandingkan dengan yang baru teruji dua kali.

Error! Filename not specified.

Gambar diatas mengilustrasikan: garis up-trendline dan down-trendline yang sudah teruji sebanyak tiga kali. Dua trendline tersebut sudah boleh dinyatakan valid.

Support & Resistance

Support adalah level dimana terdapat kecenderungan harga akan naik, disebabkan pembeli yang lebih banyak daripada penjual, atau demand lebih besar dari pada supply. Sedangkan Resistance adalah level dimana terdapat kecenderungan harga akan turun, karena penjual yang lebih banyak daripada pembeli, atau supply lebih besar dari pada demand.

Error! Filename not specified.

Penjelasan istilah trendline dan support & resistance dikutip dari buku "Technical Analysis for Mega Profit" – Edianto Ong.

Tiga Garis Trendline Paralel

Untuk mempermudah penyebutan 3 garis trendline paralel, maka kita beri nama untuk masing-masing garis trendline tersebut.

Garis paralel atas dinamakan: Resistance trendline

Garis parelel tengah dinamakan: Median trendline

Garis parelel bawah dinamakan: Support trendline

Cara Menarik Garis Andrew's Pitchfork menggunakan Amibroker

Saya akan berikan contoh chart IHSG Daily pada periode Agustus – September 2011. Apakah Andrew's Pitchfork bisa mengenali support & resistance pada saat harga indeks jatuh dari 4192 ke 3218?

Langkah pertama: tentukan tiga titik  yang akan menjadi awalan dari 3 garis trendline paralel dengan menempatkan pada puncak (peak) atau lembah (trough).

Error! Filename not specified.

Saya memilih tiga titik sebagai berikut:

- Sebagai awalan garis median trendline, titik yang dipilih adalah 8/3/2011 dengan High 4177.57

- Sebagai awalan garis support trendline, titik yang dipilih adalah 8/9/2011 dengan Low 3590.95

- Sebagai awalan garis resistance trendline, titik yang dipilih adalah 9/12/2011 dengan High 3997.22

Langkah kedua: letakan awalan 3 garis trendline paralel pada titik yang sudah ditentukan diatas.

Error! Filename not specified.

Langkah ketiga: double-click pada garis Andrew's Pitchfork, maka akan muncul menu properties (seperti gambar dibawah). Pastikan angka yang ada di "Position" (highlight kuning) sama dengan titik yang dipilih diatas.

Error! Filename not specified.

Langkah keempat: Cek kembali 3 titik yang dipilih, apakah garis Andrew's Pitchfork sudah serasi dengan price chart? kalo belom lakukan trial and error sampai anda merasa puas Error! Filename not specified.

Demikian 4 langkah untuk menarik garis Andrew's Pitchfork. Mudah-mudahan ada gunanya dan mohon dimaafkan bila kurang berkenan.

Sekarang kita sudah bisa menjawab pertanyaan diatas: Apakah Andrew's Pitchfork bisa mengenali support & resistance pada saat harga IHSG jatuh dari 4192 ke 3218?

Tentunya ada perbedaan jawaban untuk setiap orang, namun itu suatu kewajaran untuk sebuah tehnical indicator.

Happy trading....

Best Regards,

Kenzie Sebastian (@kenziesr)

 

 

 

 

 

 





No comments:

Post a Comment