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

Re: [amibroker] Re: functions to take an array as a parameter



PureBytes Links

Trading Reference Links

Not everything came through -- try this one:

/////////////////////////////

// from Ehlers, John F. Cybernetic Analysis for Stocks and Futures. Wiley. 2004.
// Chapter 9, p. 107. Code on p. 111.

function varPeriodRSI( priceField, period )
{
    Chg = priceField - Ref( priceField, -1 );
    pc = Max( Chg, 0 );
    nc = Max( -Chg, 0 );

    pa = AMA( pc, 1/period );
    na = AMA( nc, 1/period );

    return 100 * pa / ( pa + na );
}

SetBarsRequired(200, 0);

// Ehlers Dominant Cycle Period
// from Ehlers, John F. Cybernetic Analysis for Stocks and Futures. Wiley. 2004.
// Chapter 9, p. 107. Code on p. 111.

function CyclePeriod(array, alpha)
// Figure 9.4 on p. 111
{
smooth = (array + 2*Ref(array, -1) + 2*Ref(array, -2) + Ref(array, -3))/6;

// for(i = 0; i < 7; i++) cycle[i]=array[i]; // Initialize early values and as array

for(i = 0; i < 6; i++)
{
InstPeriod[i] = 0; // Initialize early values and as array
DeltaPhase[i] = 0;
cycle[i]=0;
Period[i]=0;
}

for(i = 6; i < BarCount; i++)
{
cycle[i] = (1 - .5*alpha)*(1 - .5*alpha)*(smooth[i] - 2*smooth[i-1] + smooth[i-2]) +
2*(1 - alpha)*cycle[i-1] - (1 - alpha)*(1 - alpha)*cycle[i-2];
Q1[i] = (.0962*cycle[i] + .5769*cycle[i-2] -.5769*cycle[i-4] - .0962*cycle[i-6])*(.5 + .08*InstPeriod[i-1]);
I1[i] = cycle[i-3];

if(Q1[i] != 0 AND Q1[i-1] != 0)
DeltaPhase[i] = (I1[i]/Q1[i] - I1[i-1]/Q1[i-1])/(1 + I1[i]*I1[i-1]/(Q1[i]*Q1[i-1]));
if(DeltaPhase[i] < 0.1) DeltaPhase[i] = 0.1;
if(DeltaPhase[i] > 1.1) DeltaPhase[i] = 1.1;

//----- Speed up the median calculation by placing it inline

mlen = 5;
for(k = mlen - 1; k >= 0; k--) {temparray[k] = DeltaPhase[i + k - (mlen - 1)];}

temp=0;
for(k = mlen - 1; k > 0; k--)
{for (j = mlen - 1; j > 0; j--)
{if (temparray[j-1] > temparray[j])
{
temp = temparray[j-1];
temparray[j-1] = temparray[j];
temparray[j] = temp;
}
}
}
MedianDelta[i] = temparray[mlen - 1 - (mlen / 2)];

//----- End median calculation

if(MedianDelta[i] == 0) DC[i] = 15;
else DC[i] = 6.28318/MedianDelta[i] + .5;

InstPeriod[i] = .33*DC[i] + .67*InstPeriod[i-1];
Period[i] = .15*InstPeriod[i] + .85*Period[i-1];
}
return Period;
}

Med = (H+L)/2;

// CyclePeriod
CP = CyclePeriod(Med, .07);
//Plot(CP, "CyclePeriod", colorRed, styleLine);
// Graph0BarColor=IIf(CP>Ref(CP,-1),colorGreen,colorBlue);//----------------------------------------


Med = (H+L)/2;

// CyclePeriod
CP = (CyclePeriod(Med, .07))/2;


//#include_once <varPeriodRSI.afl>

Vp = Varperiodrsi(C,LastValue(Cp));
VpSm = DEMA(Vp,3);

Buy = Cross(Vp,Vpsm);
//Sell=Cross(vpsm,vp);
Sell = BarsSince(Buy) >=5;

Plot(C,"C",colorBlack,styleCandle);
PlotShapes(Buy*shapeUpArrow+Sell*shapeDownArrow,
        IIf(Buy,colorGreen,colorRed));



Plot(Vp,"VPRSI", colorRed, styleLine|styleLeftAxisScale);
Plot(VpSm,"VPRSISM",colorGreen,styleLine|styleLeftAxisScale);

_SECTION_END();


///////////////////////////////////

Thanks,
Howard







On Jan 17, 2008 7:01 PM, Howard B <howardbandy@xxxxxxxxx> wrote:
Greetings --

See if this is what you want:

////////////////////////////////////////////////


// from Ehlers, John F. Cybernetic Analysis for Stocks and Futures. Wiley. 2004.
// Chapter 9, p. 107. Code on p. 111.

function varPeriodRSI( priceField, period )
{
    Chg = priceField - Ref( priceField, -1 );
    pc = Max( Chg, 0 );
    nc = Max( -Chg, 0 );

    pa = AMA( pc, 1/period );
    na = AMA( nc, 1/period );

    return 100 * pa / ( pa + na );
}

SetBarsRequired(200, 0);

// Ehlers Dominant Cycle Period

// from Ehlers, John F. Cybernetic Analysis for Stocks and Futures. Wiley. 2004.
// Chapter 9, p. 107. Code on p. 111.

function CyclePeriod(array, alpha)
// Figure 9.4 on p. 111
{
smooth = (array + 2*Ref(array, -1) + 2*Ref(array, -2) + Ref(array, -3))/6;

// for(i = 0; i < 7; i++) cycle[i]=array[i]; // Initialize early values and as array

for(i = 0; i < 6; i++)
{
InstPeriod[i] = 0; // Initialize early values and as array
DeltaPhase[i] = 0;
cycle[i]=0;
Period[i]=0;
}

for(i = 6; i < BarCount; i++)
{
cycle[i] = (1 - .5*alpha)*(1 - .5*alpha)*(smooth[i] - 2*smooth[i-1] + smooth[i-2]) +
2*(1 - alpha)*cycle[i-1] - (1 - alpha)*(1 - alpha)*cycle[i-2];
Q1[i] = (.0962*cycle[i] + .5769*cycle[i-2] -.5769*cycle[i-4] - .0962*cycle[i-6])*(.5 + .08*InstPeriod[i-1]);
I1[i] = cycle[i-3];

if(Q1[i] != 0 AND Q1[i-1] != 0)
DeltaPhase[i] = (I1[i]/Q1[i] - I1[i-1]/Q1[i-1])/(1 + I1[i]*I1[i-1]/(Q1[i]*Q1[i-1]));
if(DeltaPhase[i] < 0.1) DeltaPhase[i] = 0.1;
if(DeltaPhase[i] > 1.1) DeltaPhase[i] = 1.1;

//----- Speed up the median calculation by placing it inline

mlen = 5;
for(k = mlen - 1; k >= 0; k--) {temparray[k] = DeltaPhase[i + k - (mlen - 1)];}

temp=0;
for(k = mlen - 1; k > 0; k--)
{for (j = mlen - 1; j > 0; j--)
{if (temparray[j-1] > temparray[j])
{
temp = temparray[j-1];
temparray[j-1] = temparray[j];
temparray[j] = temp;
}
}
}
MedianDelta[i] = temparray[mlen - 1 - (mlen / 2)];

//----- End median calculation

if(MedianDelta[i] == 0) DC[i] = 15;
else DC[i] = 6.28318/MedianDelta[i] + .5;

InstPeriod[i] = .33*DC[i] + .67*InstPeriod[i-1];
Period[i] = .15*InstPeriod[i] + .85*Period[i-1];
}
return Period;
}

Med = (H+L)/2;

// CyclePeriod
CP = CyclePeriod(Med, .07);
//Plot(CP, "CyclePeriod", colorRed, styleLine);
// Graph0BarColor=IIf(CP>Ref(CP,-1),colorGreen,colorBlue);//----------------------------------------



Med = (H+L)/2;

// CyclePeriod
CP = (CyclePeriod(Med, .07))/2;


//#include_once <varPeriodRSI.afl>

Vp = Varperiodrsi(C,LastValue(Cp));
VpSm = DEMA(Vp,3);

Buy = Cross(Vp,Vpsm);
//Sell=Cross(vpsm,vp);
Sell = BarsSince(Buy) >=5;

Plot(C,"C",colorBlack,styleCandle);
PlotShapes(Buy*shapeUpArrow+Sell*shapeDownArrow,
        IIf(Buy,colorGreen,colorRed));



Plot(Vp,"VPRSI", colorRed, styleLine|styleLeftAxisScale);
Plot(VpSm,"VPRSISM",colorGreen,styleLine|styleLeftAxisScale);

_SECTION_END();

/////////////////////////////////////////////

Thanks,
Howard
www.quantitativetradingsystems.com



On Jan 17, 2008 4:30 PM, jeffro861 <jeffro861@xxxxxxxxx > wrote:

I'm still getting a blank in the chart.

thanks,
Jeff H.

// from Ehlers, John F. Cybernetic Analysis for Stocks and Futures.
Wiley. 2004.
// Chapter 9, p. 107. Code on p. 111.

function CyclePeriod(array, alpha)
// Figure 9.4 on p. 111
{
smooth = (array + 2*Ref(array, -1) + 2*Ref(array, -2) + Ref(array, -
3))/6;

// for(i = 0; i < 7; i++) cycle[i]=array[i]; // Initialize early
values and as array

for(i = 0; i < 6; i++)
{
InstPeriod[i] = 0; // Initialize early values and as array
DeltaPhase[i] = 0;
cycle[i]=0;
Period[i]=0;
}

for(i = 6; i < BarCount; i++)
{
cycle[i] = (1 - .5*alpha)*(1 - .5*alpha)*(smooth[i] - 2*smooth[i-
1] + smooth[i-2]) +
2*(1 - alpha)*cycle[i-1] - (1 - alpha)*(1 - alpha)
*cycle[i-2];
Q1[i] = (.0962*cycle[i] + .5769*cycle[i-2] -.5769*cycle[i-4] -
.0962*cycle[i-6])*(.5 + .08*InstPeriod[i-1]);
I1[i] = cycle[i-3];

if(Q1[i] != 0 AND Q1[i-1] != 0)
DeltaPhase[i] = (I1[i]/Q1[i] - I1[i-1]/Q1[i-1])/(1 + I1[i]*I1
[i-1]/(Q1[i]*Q1[i-1]));
if(DeltaPhase[i] < 0.1) DeltaPhase[i] = 0.1;
if(DeltaPhase[i] > 1.1) DeltaPhase[i] = 1.1;

//----- Speed up the median calculation by placing it inline

mlen = 5;
for(k = mlen - 1; k >= 0; k--) {temparray[k] = DeltaPhase[i + k -
(mlen - 1)];}

temp=0;
for(k = mlen - 1; k > 0; k--)
{for (j = mlen - 1; j > 0; j--)
{if (temparray[j-1] > temparray[j])
{
temp = temparray[j-1];
temparray[j-1] = temparray[j];
temparray[j] = temp;
}
}
}
MedianDelta[i] = temparray[mlen - 1 - (mlen / 2)];

//----- End median calculation

if(MedianDelta[i] == 0) DC[i] = 15;
else DC[i] = 6.28318/MedianDelta[i] + .5;

InstPeriod[i] = .33*DC[i] + .67*InstPeriod[i-1];
Period[i] = .15*InstPeriod[i] + .85*Period[i-1];
}
return Period;
}

Med = (H+L)/2;

// CyclePeriod
CP = (CyclePeriod(Med, .07))/2;

#include_once <varPeriodRSI.afl>
Plot(Varperiodrsi(C,Cp),"CyclePeriod", colorRed, styleLine);
_SECTION_END();



--- In amibroker@xxxxxxxxxxxxxxx, "bilbo0211" <bilbod@xxx> wrote:
>
> --- In amibroker@xxxxxxxxxxxxxxx, "jeffro861" <jeffro861@> wrote:
> >
> > Thanks for the response! This seems like it would work but when
I
> > try and plot this function it doesn't show anything, but at least
I'm
> > not getting an error message. Does anybody have any idea why?
>
> #include_once <varPeriodRSI.afl>
>
> Plot(varPeriodRSI(C,14),"",colorRed);
>
> period=IIf(C>O,5,25);
>
> Plot(varPeriodRSI((H+L)/2,period),"",colorBlue);
>
> The above code works for me, show the code you are using.
>
> Bill
>



__._,_.___

Please note that this group is for discussion between users only.

To get support from AmiBroker please send an e-mail directly to
SUPPORT {at} amibroker.com

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

For other support material please check also:
http://www.amibroker.com/support.html




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

__,_._,___