Works for me. See if taking out setbarsrequred()
helps.
----- Original Message -----
Sent: Wednesday, September 26, 2007 1:00
AM
Subject: [amibroker] please help
I keep getting error message with the following exploration.
TIA
SetBarsRequired (0,350);
function TriMA(array,periods)
{
pds = (periods+ 1)/2;
pds = IIf(frac(pds)==0, pds,
pds+1);
return
MA( MA(array,pds), pds);
}
function CycleHighlighter(Periods,Price)
{
P1 = int(Periods*1.5);
//due to lag characteristics of Tri
MA
P1 = IIf(frac(P1/2)==0,P1+1,P1);
P2 = int(p1/2);
P2 = IIf(frac(P2/2)==0,P2+1,P2);
MA1 = TriMA(Price,P1);
MA2 = TriMA(Price,P2);
PC1 = (P1- 1)/2; //Centre MAs
PC2 = (P2- 1)/2;
CMA1 = Ref(MA1,PC1);
CMA2 = Ref(MA2,PC2);
Cyhi = CMA2-CMA1;
global
Revcount;
global
end;
Revcount = LastValue(
BarIndex() ) -
BarIndex();
end = revcount<PC1;
return
IIf(end, ValueWhen(revcount==PC1,Cyhi,1), Cyhi);
}
function
AnchoredSine(BaseCycle,LookbackCycles,Method,Periods) //input should be a cycle function from the cycle
highlighter
{
global
BCpk;
global
BCtr;
global
BCStart;
global
sineamplitude;
//define "best fit" window from BC peaks
and troughs over # of lookbackcycles
BCpk = HHVBars(Basecycle,5)==2 AND
BaseCycle<Ref(Basecycle,-1)
AND end==0;
BCtr = LLVBars(Basecycle,5)==2 AND
BaseCycle>Ref(Basecycle,-1)
AND end==0;
BCStart = IIf(ValueWhen(BCpk
OR BCtr,BCpk,1),
ValueWhen(BCpk,BarIndex(),1+Lookbackcycles), ValueWhen(BCtr,BarIndex(),1+Lookbackcycles) ) ;
BCStart = BarIndex()==LastValue(
ValueWhen(end==0,BCStart,1)
);
//derive *recent* average wavelength of
Base Cycle (over # of lookbackcycles) from peaks and troughs
BCpkpds = LastValue(
ValueWhen(BCpk,BarIndex(),1) -
ValueWhen(BCpk,BarIndex(),1+LookbackCycles) ) / LookbackCycles;
BCtrpds = LastValue(
ValueWhen(BCtr,BarIndex(),1) -
ValueWhen(BCtr,BarIndex(),1+LookbackCycles) ) / LookbackCycles;
BCpds = (BCpkpds+BCtrpds)/ 2;
Periods = IIf(Method==0,
Periods, BCpds);
//now determine suitable amplitude from
StDev of Base Cycle during "best fit" window
sineamplitude = LastValue( StDev(
BaseCycle, LastValue(BarsSince(BCStart)) ) *1.5);
//now determine where sine wave is
anchored to BaseCycle
//i.e., most recent of a BaseCycle Peak
or Trough
pkOffset = LastValue(
ValueWhen(BCpk,BarIndex(),1)
)-2;
trOffset = LastValue(
ValueWhen(BCtr,BarIndex(),1)
)-2;
//Offset =
(pkOffset+trOffset)/2;
if (
LastValue( ValueWhen(BCpk OR
BCtr,BCpk,1) ) )
//RECENT ANCHOR POINT IS A
PEAK
{ sine = sin(
(Cum(1)-pkOffset+Periods/4)/Periods * 6.283185 ); }
if (
LastValue( ValueWhen(BCpk OR
BCtr,BCtr,1) ) )
//RECENT ANCHOR POINT IS A
TROUGH
{ sine = sin(
(Cum(1)-trOffset+Periods*3/4)/Periods * 6.283185 ); }
return
sine*sineamplitude;
}
//----------------------------------------------------------------------------------//
Price = IIf(ParamToggle("Price Field",
"Mid Price | Close",
0)==0, (H+L)/2 , C);
MincycNo = 5;
MinWL = 20;
MaxWL = 250;
Method = ParamToggle("Sine Wavelength", "As Base Cycle | Best
Fit", 0);
Method2 = ParamToggle("Correlate Sine to:", "Price | Cycle
Highlighter", 0);
RefCor = 0;
for (Cyc=5; Cyc>=MincycNo; Cyc--)
for (
pds=MaxWL; pds>=MinWL; pds=pds-2)
{
LoopCycle = CycleHighlighter(Pds,Price);
Loopsine = AnchoredSine(LoopCycle,Cyc,Method,Pds);
//define peaks/troughs in reference
anchored sine
Sinepk = HHVBars(Loopsine,5)==2 AND
Loopsine<Ref(Loopsine,-1);
Sinetr = LLVBars(Loopsine,5)==2 AND
Loopsine>Ref(Loopsine,-1);
//Find difference between Reference Sine
and Base Cycle start points over entire length of "lookback"
cycles
SineStart = IIf(ValueWhen(BCpk
OR BCtr,BCpk,1),
ValueWhen(Sinepk,BarIndex(),1+Cyc),
ValueWhen(Sinetr,BarIndex(),1+Cyc) ) ;
SineStart = BarIndex()==LastValue(
ValueWhen(end==0,SineStart,1)
);
//Correlation between Sine and base Cycle
over "lookback" window
LookbackBars = LastValue( Max(BarsSince(BCStart),BarsSince(sineStart))-BarsSince(end==0) );
//CorSineBC = LastValue(
ValueWhen(end==0,Correlation(Price,LoopSine,Lookbackbars),1)
);
CorSinePr = LastValue( ValueWhen(end==0,Correlation(Price,Loopsine,Lookbackbars),1) );
CorSineBC = LastValue( ValueWhen(end==0,Correlation(LoopCycle,LoopSine,Lookbackbars),1) );
//Correlation between Sine and Price in
"end" period
EndBars = LastValue(
BarsSince(end==0) );
CorEnd = LastValue(
Correlation(Price,LoopSine,EndBars) );
CorPr = ( (CorSinePr*Lookbackbars)+(CorEnd*Endbars) ) /
(Lookbackbars+Endbars);
CorCycHi = ( (CorSineBC*Lookbackbars)+(CorEnd*Endbars) ) /
(Lookbackbars+Endbars);
Cor = IIf(Method2==0,CorPr,CorCycHi);
if (
Cor>RefCor AND LastValue(IsTrue(Loopsine)) )
{ Cycle = LoopCycle;
Refsine = Loopsine;
Endplot = End;
CycPds = pds;
CycNo = Cyc;
RefCor = Cor;
RefCorSineBC = CorSineBC;
RefCorEnd = CorEnd;
BCst = BCStart;
Sst = sinestart;
SineWavelength = LastValue( ValueWhen(sinepk OR sinetr,BarIndex(),1) - ValueWhen(sinepk OR sinetr,BarIndex(),3) );
NextPk = Max(
0, sinewavelength -
LastValue(BarsSince(sinepk)) - 2 );
NextTr = Max(
0, sinewavelength -
LastValue(BarsSince(sinetr)) - 2 );
sinamp = IIf(LastValue(ValueWhen(BCpk
OR BCtr,BCpk,1)),
sineamplitude, -sineamplitude); }
}
//-------------------------------------------------------------------------------//
//Predicted date & time of next peak or trough (for
title)
Bars = IIf(Nextpk<Nexttr,nextPk,nextTr);
Type = WriteIf(Nextpk<NextTr,"peak","trough");
Title = EncodeColor(colorDarkGreen) + "SELF-ADJUSTING Cycle Highlighter\n" + EncodeColor(colorGrey50) +
"Base Cycle Wavelength = "
+ EncodeColor(colorBlue) + NumToStr(CycPds,1.0) + "
bars\n" + EncodeColor(colorGrey50)
+ "Sine Wavelength = " + NumToStr(SineWavelength,1.0) + "bars\n"
+ "correlated " +
EncodeColor(colorBlue) + "over
" + WriteVal(CycNo,1.0) +
WriteIf(CycNo>1," base cycles"," base cycle") +
EncodeColor(colorGrey50)
+ "\nprojected next: " + EncodeColor(colorDarkRed) + Type + " in
" + NumToStr(Bars,1.0) +
WriteIf(Bars>1," bars"," bar") +
EncodeColor(colorGrey50)
+ "\ncorrelation = "
+ EncodeColor(colorGreen) + NumToStr(RefcorSineBC,1.2) + EncodeColor(colorRed) + " (" + NumToStr(RefCorEnd,1.2) + ")";
Plot (Refsine,"",colorRed,styleNoLabel);
Plot ( 0, "",
colorLightGrey, styleNoLabel);
Plot (BCst*sinamp,"",colorGreen,styleNoLabel);
Plot (SSt*sinamp,"",colorRed,styleNoLabel);
Plotcolour = IIf(endplot, colorLightGrey, ParamColor("Colour",colorGreen) );
Plot ( Cycle, "", Plotcolour, ParamStyle("Style",styleThick) | styleNoLabel );
Filter=RefcorSineBC>.7 AND RefCorEnd>.7;
AddColumn (SineWavelength,"WaveLength");
AddColumn (CycPds,"Cyclelength");
AddColumn ( RefcorSineBC, "highlighter+sine" );
AddColumn ( RefCorEnd, "price_sin" );
__._,_.___
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
__,_._,___
|