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

Re: [amibroker] Any AFL expert add buy/sell condition for Auto-analyses scan



PureBytes Links

Trading Reference Links



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@xxxxxxxxx> wrote:

From: subhaschandmishra <subhaschandmishra@xxxxxxxxx>
Subject: [amibroker] Any AFL expert add buy/sell condition for Auto-analyses scan
To: amibroker@xxxxxxxxxxxxxxx
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( );




__._,_.___


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

__,_._,___