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" );

Reply via email to