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

[amibroker] Re: Code share - finding pivots - GORDON



PureBytes Links

Trading Reference Links

Before you get too excited, click on the AA <Check> tab. You'll see 
that the formula references future prices.
dale b
--- In amibroker@xxxxxxxxxxxxxxx, "Ara Kaloustian" <ara1@xxxx> wrote:
> Gordon,
> 
> I modified your code slighly to perform a backtest. The intent is 
to open a
> trade morning after receiving signal at the open price and stay in 
market at
> all times. Therefor Sell = Short and Buy = Cover.
> 
> 1. I changed the 120 bar period of processing so entire data array 
is
> processed.
> 2. I added Buy/Sell commands as follows:
> 
> The report shows we have discovered the holy grail.... seriously 
though
> would you take a look and see if I used your parameters incorrectly 
as buy /
> sell signals
> //Backtest
> 
> BuyPrice = SellPrice=ShortPrice=CoverPrice=Open;
> 
> Buy = Ref(aLPivs,-1)==1;
> 
> Sell = Ref(aHPivs,-1)==1;
> 
> Short= Sell;
> 
> Cover = Buy;
> 
> ----- Original Message ----- 
> From: "Gordon" <amibroker@xxxx>
> To: <amibroker@xxxxxxxxxxxxxxx>
> Sent: Monday, December 08, 2003 1:26 PM
> Subject: [amibroker] Code share - finding pivots
> 
> 
> > I've been the beneficiary of many examples of code sharing, and so
> > I'm gald to have something to share back (for better or worse...).
> > First, important up-front credit: Clyde Lee was kind enough to
> > respond to a post in his swing forum about finding pivots. The 
code
> > was in EL, but he also provided an english language description of
> > his algorithm. Clyde's algorithm was very elegant, I thought, and 
he
> > was certainly generous to share it. I translated it into AFL, and 
the
> > result, I believe, is a very useful start to writing effective 
pivot
> > identification code. This can then be used for automated fib
> > projections, etc., or any way you please.
> >
> > The code uses for-loops. Yes, I know AFL is array based, and the 
next
> > step will be to come up with a version that is more true to AFL's
> > nature. Also, adding min. retracement percentanges, min. no. of 
days
> > between swings are all options to enhance the quality of the 
pivots
> > discovered.
> >
> > One last note -- if you haven't used the param() function in your
> > indicator code and then Ctrl-R in your chart viewing -- you're
> > missing a great AB feature! I was until just recently.
> >
> > /* **********************************
> > Code to automatically identify pivots
> > ********************************** */
> >
> > // -- what will be our lookback range for the hh and ll?
> > nBars = Param("Number of bars", 12, 5, 40);
> >
> > // -- Title.
> > Title = Name() + " (" + StrLeft(FullName(), 15) + ") O: " + Open 
+ ",
> > H: " + High + ", L: " + Low + ", C: " + Close;
> >
> > // -- Plot basic candle chart
> > PlotOHLC(Open, High, Low, Close,
> > "BIdx = " + BarIndex() +
> > "\n" + "O = " + O + "\n"+"H = "+ H + "\n"+"L  = " + L
> > + "\n"+"C ",
> > colorBlack, styleCandle);
> >
> > GraphXSpace=7;
> >
> > // -- Create 0-initialized arrays the size of barcount
> > aHPivs = H - H;
> > aLPivs = L - L;
> >
> > // -- More for future use, not necessary for basic plotting
> > aHPivHighs = H - H;
> > aLPivLows = L - L;
> > aHPivIdxs = H - H;
> > aLPivIdxs = L - L;
> > 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);
> >
> > // -- Would like to set this up so pivots are calculated back from
> > //    last visible bar to make it easy to "go back" and see the 
pivots
> > //    this code would find. However, the first instance of
> > //    _Trace output will show a value of 0
> > aVisBars = Status("barvisible");
> > nLastVisBar = LastValue(Highest(IIf(aVisBars, BarIndex(), 0)));
> > _TRACE("Last visible bar: " + nLastVisBar);
> >
> > // -- Initialize value of curTrend
> > curBar = (BarCount-1);
> > curTrend = "";
> > if (aLLVBars[curBar] <
> > aHHVBars[curBar]) {
> > curTrend = "D";
> > }
> > else {
> > curTrend = "U";
> > }
> >
> > // -- Loop through bars. Search for
> > //    entirely array-based approach
> > //    in future version
> > for (i=0; i<120; i++) {
> >
> > curBar = (BarCount - 1) - 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
> > }
> >
> > // -- Basic attempt to add a pivot this logic may have missed
> >
> > // -- OK, now I want to look at last two pivots. If the most
> > //    recent low pivot is after the last high, I could
> > //    still have a high pivot that I didn't catch
> >
> > // -- Start at last bar
> > curBar = (BarCount-1);
> > candIdx = 0;
> > candPrc = 0;
> >
> > lastLPIdx = aLPivIdxs[0];
> > lastLPL = aLPivLows[0];
> >
> > lastHPIdx = aHPivIdxs[0];
> > lastHPH = aHPivHighs[0];
> >
> > if (lastLPIdx > lastHPIdx) {
> >
> > // -- Bar and price info for candidate pivot
> > candIdx = curBar - aHHVBars[curBar];
> > candPrc = aHHV[curBar];
> >
> > if (
> > lastHPH < candPrc AND
> > candIdx > lastLPIdx AND
> > candIdx < curBar) {
> >
> > // -- OK, we'll add this as a pivot...
> > aHPivs[candIdx] = 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] = candPrc ;
> > aHPivIdxs[0] = candIdx;
> > nHPivs++;
> >
> > }
> >
> > } else {
> >
> > // -- Bar and price info for candidate pivot
> > candIdx = curBar - aLLVBars[curBar];
> > candPrc = aLLV[curBar];
> >
> > if (
> > lastLPL > candPrc AND
> > candIdx > lastHPIdx AND
> > candIdx < curBar) {
> >
> > // -- OK, we'll add this as a pivot...
> > aLPivs[candIdx] = 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] = candPrc;
> > aLPivIdxs[0] = candIdx;
> > nLPivs++;
> >
> > }
> > }
> >
> > // -- Dump inventory of high pivots for debugging
> > /*
> > for (k=0; k<nHPivs; k++) {
> > _TRACE("High pivot no. " + k
> > + " at barindex: " + aHPivIdxs[k] + ", "
> > + WriteVal(ValueWhen(BarIndex()==aHPivIdxs[k],
> > DateTime(), 1), formatDateTime)
> > + ", " + aHPivHighs[k]);
> > }
> > */
> >
> > // -- OK, let's plot the pivots using arrows
> > PlotShapes(
> > IIf(aHPivs==1, shapeDownArrow, shapeNone), colorRed, 0,
> > High, Offset=-15);
> >
> > PlotShapes(
> > IIf(aLPivs==1, shapeUpArrow , shapeNone), colorGreen, 0,
> > Low, Offset=-15);
> >
> >
> >
> >
> >
> > Send BUG REPORTS to bugs@xxxx
> > Send SUGGESTIONS to suggest@xxxx
> > -----------------------------------------
> > Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx
> > (Web page: http://groups.yahoo.com/group/amiquote/messages/)
> > --------------------------------------------
> > Check group FAQ at:
> http://groups.yahoo.com/group/amibroker/files/groupfaq.html
> >
> > Your use of Yahoo! Groups is subject to 
http://docs.yahoo.com/info/terms/
> >
> >
> >


------------------------ Yahoo! Groups Sponsor ---------------------~-->
Buy Ink Cartridges or Refill Kits for your HP, Epson, Canon or Lexmark
Printer at MyInks.com. Free s/h on orders $50 or more to the US & Canada.
http://www.c1tracking.com/l.asp?cid=5511
http://us.click.yahoo.com/mOAaAA/3exGAA/qnsNAA/GHeqlB/TM
---------------------------------------------------------------------~->

Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx 
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html 

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/