Dear Ram Vel, Thanks for your help, code is working fine.
Subhas Chand Mishra ________________________________ From: ram vel <[email protected]> To: [email protected] Sent: Monday, 31 August, 2009 12:02:59 AM Subject: Re: [amibroker] Any AFL expert add buy/sell condition for Auto-analyses scan hI SUBAS Just add these lines and try scan ------------ --------- --------- --------- --------- -----Buy = (aLPivs==1) OR (aAddedLPivs= =1); Sell =(aHPivs==1) OR (aAddedHPivs= =1); Filer = Buy OR Sell; ------------ --------- --------- --------- --------- --------- -------- --- On Sun, 8/30/09, subhaschandmishra <subhaschandmishra@ yahoo.com> wrote: >From: subhaschandmishra <subhaschandmishra@ yahoo.com> >Subject: [amibroker] Any AFL expert add buy/sell condition for Auto-analyses >scan >To: amibro...@yahoogrou ps.com >Date: Sunday, August 30, 2009, 10:45 AM > > > >Here is a good AFL gives Accurate buy and sell signal but it has no sufficient >variables for Auto-analyses of Amibroker. Can any Afl expert add buy/sell >variables for Auto-analyses scan. >If any one do it, then this afl will be of great usefull. > >_SECTION_BEGIN( "Price"); >SetChartOptions( 0,chartShowArrow s|chartShowDates ); >_N(Title = StrFormat("{ {NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, >Close %g (%.1f%%) Vol " +WriteVal( V, 1.0 ) +" {{VALUES}}", O, H, L, C, >SelectedValue( ROC( C, 1 )) )); >Plot( C, "Close", ParamColor(" Color", colorBlack ), styleNoTitle | >ParamStyle(" Style") | GetPriceStyle( ) ); >if( ParamToggle( "Tooltip shows", "All Values|Only Prices" ) ) >{ >ToolTip=StrFormat( "Open: %g\nHigh: %g\nLow: %g\nClose: %g (%.1f%%)\nVolume: >"+NumToStr( V, 1 ), O, H, L, C, SelectedValue( ROC( C, 1 ))); >} >_SECTION_END( ); > >_SECTION_BEGIN( "GIP-3"); >SetChartOptions( 0,chartShowArrow s|chartShowDates > ); >_N(Title = StrFormat("{ {NAME}} - {{INTERVAL}} {{DATE}} Open %g, Hi %g, Lo %g, >Close %g (%.1f%%) Vol " +WriteVal( V, 1.0 ) +" {{VALUES}}", O, H, L, C, >SelectedValue( ROC( C, 1 )) )); >Plot( C, "Close", ParamColor(" Color", colorBlack ), styleNoTitle | >ParamStyle(" Style") | GetPriceStyle( ) ); >if( ParamToggle( "Tooltip shows", "All Values|Only Prices" ) ) >{ >ToolTip=StrFormat( "Open: %g\nHigh: %g\nLow: %g\nClose: %g (%.1f%%)\nVolume: >"+NumToStr( V, 1 ), O, H, L, C, SelectedValue( ROC( C, 1 ))); >} > >// -- 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) ; > >// -- 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("barvisib le"), 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), >colorBrown, 0, High, Offset=-15); >PlotShapes( >IIf(aLPivs== 1, shapeUpArrow , shapeNone), >colorGreen, 0, Low, Offset=-15); >PlotShapes( >IIf(aAddedLPivs= =1, shapeUpArrow , shapeNone), >colorBlue, 0, Low, Offset=-15); >} > >/* ************ ********* ********* ********* * >// -- Done with discovering and plotting pivots >************ ********* ********* ********* ** */ >_SECTION_END( ); > > See the Web's breaking stories, chosen by people like you. Check out Yahoo! Buzz. http://in.buzz.yahoo.com/
