alexwang7777 發表於 10-6-11 17:53

ShenbaKumar pivots

_SECTION_BEGIN("ShenbaKumar pivots");
/* **********************************
Code to automatically identify pivots
By Kumaresan Selvaraj
********************************** */
// -- what will be our lookback range for the hh and ll?
farback = Param("How Far back to go", 100, 50, 5000, 10);
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 < aHHVBars)
{
curTrend = "D";
}
else
{
curTrend = "U";
}
// -- Loop through bars. Search for
// entirely array-based approach
// in future version
for (i = 0; i < farback; i++)
{
curBar = (BarCount - 1) - i;
// -- Have we identified a pivot? If trend is down...
if (aLLVBars < aHHVBars)
{
// ... and had been up, this is a trend change
if (curTrend == "U")
{
curTrend = "D";
// -- Capture pivot information
curPivBarIdx = curBar - aLLVBars;
aLPivs = 1;
aLPivLows = L;
aLPivIdxs = curPivBarIdx;
nLPivs++;
}
// -- or current trend is up
}
else
{
if (curTrend == "D")
{
curTrend = "U";
curPivBarIdx = curBar - aHHVBars;
aHPivs = 1;
aHPivHighs = H;
aHPivIdxs = 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;
lastLPL = aLPivLows;
lastHPIdx = aHPivIdxs;
lastHPH = aHPivHighs;

if (lastLPIdx > lastHPIdx)
{
// -- Bar and price info for candidate pivot
candIdx = curBar - aHHVBars;
candPrc = aHHV;
if (
lastHPH < candPrc AND
candIdx > lastLPIdx AND
candIdx < curBar)
{
// -- OK, we'll add this as a pivot...
aHPivs = 1;
// ...and then rearrange elements in the
// pivot information arrays
for (j = 0; j < nHPivs; j++)
{
aHPivHighs = aHPivHighs[nHPivs -
(j + 1)];
aHPivIdxs = aHPivIdxs;
}
aHPivHighs = candPrc;
aHPivIdxs = candIdx;
nHPivs++;
}
}
else
{
// -- Bar and price info for candidate pivot
candIdx = curBar - aLLVBars;
candPrc = aLLV;
if (lastLPL > candPrc AND candIdx > lastHPIdx AND candIdx < curBar)
{
// -- OK, we'll add this as a pivot...
aLPivs = 1;
// ...and then rearrange elements in the
// pivot information arrays
for (j = 0; j < nLPivs; j++)
{
aLPivLows = aLPivLows;
aLPivIdxs = aLPivIdxs;
}
aLPivLows = candPrc;
aLPivIdxs = candIdx;
nLPivs++;
}
}
// -- Dump inventory of high pivots for debugging
/*
for (k=0; k<nHPivs; k++) {
_TRACE("High pivot no. " + k
+ " at barindex: " + aHPivIdxs + ", "
+ WriteVal(ValueWhen(BarIndex()==aHPivIdxs,
DateTime(), 1), formatDateTime)
+ ", " + aHPivHighs);
}
*/
// -- 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);
_SECTION_END();

aaqqww93 發表於 10-6-11 19:21

{:4_89:}

bbdcd 發表於 11-3-29 11:17

曾經想過要學習用程式交易....
但實在是沒時間.
頁: [1]
查看完整版本: ShenbaKumar pivots