PureBytes Links
Trading Reference Links
|
Chande's VIDYA is in place in 6.5 with the VAR MA. There are many other ways
to get there, such as:
............................................................................
........
TimPer:= Input( "Enter Time Periods (1<=TP<=99)",1,99,89);
VI:=Abs( Fml("TCCMO" ) );
If( PREV > 0,
{THEN}((2/(TimPer + 1) * VI * C) + (1 - ((2 / (TimPer + 1)) * VI)) *
PREV),
{ELSE}Ref(C, -1))
where TCCMO is:
Periods:=9;
SumUp:=Sum(If(C>Ref(C,-1),C-Ref(C,-1),0),Periods);
SumDn:=Sum(If(C<Ref(C,-1),-(C-Ref(C,-1)),0),Periods);
((SumUp-SumDn)/(SumUp+SumDn))
............................................................................
.............................
OR:
Length:=Input("Length",1,200,21);
Smooth:=Input("Smoothing",1,200,5);
AbsCMO:=(Abs(CMO( C ,Length)))/100;
SC:=2/(Smooth+1);
VIDYA:=If(Cum(1)<=(Length+1), C ,(SC*AbsCMO* C )+(1-(SC*AbsCMO))*PREV);
VIDYA
............................................................................
....................
But the one I like using my favorite 89 periods is the one using vhf as in
5.11 version, found in 6.5 like this:
periods:=Input("periods",1,244,89);
VariableMA511( C , periods)
............................................................................
........................
Richard Estes
-----Original Message-----
From: J.W.E Roberts <jan.roberts@xxxxxxxxxxxxxxxxx>
To: Steven Buss <sbuss@xxxxxxxxxxx>
Cc: Richard Estes <restes@xxxxxxxxx>; metastock-list@xxxxxxxxxxxxx
<metastock-list@xxxxxxxxxxxxx>
Date: Wednesday, February 11, 1998 1:48 PM
Subject: Re: Multi-Period Indicators
>Hi Folks,having gotten so much free advice & tips from this forum, I
thought
>it's time to contribute something myself.
>
>> Paul Chivers on 1/14/98 wrote:
>>
>> "I agree that MetaStock DOES NOT SUPPORT Multi-Period Market Indicators."
>
>Yeah... After buying The New Technical Trader, I was all fired up to try
out
>VIDYA in MS6.5. Alas, no dice. Now, I'm a programmer, and programmers
cannot
>take no for an answer (careful with this species, ladies), and do I wrote a
>kludge to do it anyhow that I'd like to present here for Your August
Opinion.
>
>The problem is that it behaves rather erratically, and I cannot quite
figure out
>wether this is caused by
>A. an error on my side (near impossible (programmers have the second
largest
>egos in the world (right after fighter pilots))), or
>B. something inherent to The Kludge, or
>C. becaus Vidya _does_ kind of jump all over the place.
>
>OK, here goes:
>1. Create a function for the number of days. I'll use CMO(10) as an
example:
>Function Name: "DaysCMO10"
>Formula: Int(0.5*Abs(Mov(CMO(C,10),3,S)))
>-------------------
>(I use a bit of smoothing, else the # of days changes too abruptly.)
>==============
>2. Create a function that calls this function - the rationale will become
clear
>soon:
>Function Name: "VidyaDays"
>Formula:
>Fml("DaysCMO10")
>{Fml("DaysRsquared") } {(another one to play around with)}
>==============
>3. Now create 4 funs that return a moving average:
>3A:
>Function Name: "Vidya00_15"
>Formula:
>x:= Fml("VidyaDays");
>
>If(x>15,
> 0
>{else: Present Range},
> If(x<8,
> If(x<4,
> If(x<2,
> Mov( C, 1, E ) {an interesting MA, isn't it}
> {# else x>=2},
> If(x<3,
> Mov( C, 2, E )
> {# else},
> Mov( C, 3, E )
> )
> ){x<2?}
> {# else x>=4},
> If(x<6,
> If(x<5,
> Mov( C, 4, E )
> {# else},
> Mov( C, 5, E )
> )
> {# else x>=6},
> If(x<7,
> Mov( C, 6, E )
> {# else},
> Mov( C, 7, E )
> )
> ){x<6?}
> ){x<4?}
> {# else x>=8},
> If(x<12,
> If(x<10,
> If(x<9,
> Mov( C, 8, E )
> {# else},
> Mov( C, 9, E )
> )
> {# else x>=10},
> If(x<11,
> Mov( C, 10, E )
> {# else},
> Mov( C, 11, E )
> )
> ){x<10?}
> {# else x>=12},
> If(x<14,
> If(x<13,
> Mov( C, 12, E )
> {# else},
> Mov( C, 13, E )
> )
> {# else x>=14},
> If(x<15,
> Mov( C, 14, E )
> {# else},
> Mov( C, 15, E )
> )
> ){x<14?}
> ){x<12?}
> ){x<8?}
>)
>-----------------------------------
>This beastie does a kind of binary search for the MA we wish as its result.
>This is the fastest way. Throw out the comments & spaces at will.
>Because I know what a lazy bunch you all are, here come the other three:
>3B.:
>Function Name: "Vidya16_31"
>Formula:
>x:= Fml("VidyaDays");
>
>If(x<16 OR x>31,
> 0
>{else: Present Range},
> If(x<24,
> If(x<20,
> If(x<18,
> If(x<17,
> Mov( C, 16, E )
> {# else},
> Mov( C, 17, E )
> )
> {# else x>=18},
> If(x<19,
> Mov( C, 18, E )
> {# else},
> Mov( C, 19, E )
> )
> ){x<18?}
> {# else x>=20},
> If(x<22,
> If(x<21,
> Mov( C, 20, E )
> {# else},
> Mov( C, 21, E )
> )
> {# else x>=22},
> If(x<23,
> Mov( C, 22, E )
> {# else},
> Mov( C, 23, E )
> )
> ){x<22?}
> ){x<20?}
> {# else x>=24},
> If(x<28,
> If(x<26,
> If(x<25,
> Mov( C, 24, E )
> {# else},
> Mov( C, 25, E )
> )
> {# else x>=26},
> If(x<27,
> Mov( C, 26, E )
> {# else},
> Mov( C, 27, E )
> )
> ){x<26?}
> {# else x>=28},
> If(x<30,
> If(x<29,
> Mov( C, 28, E )
> {# else},
> Mov( C, 29, E )
> )
> {# else x>=30},
> If(x<31,
> Mov( C, 30, E )
> {# else},
> Mov( C, 31, E )
> )
> ){x<30?}
> ){x<28?}
> ){x2<24?}
>)
>-----------------------------------
>3C:
>Function Name: "Vidya32_47"
>Formula:
>x:= Fml("VidyaDays");
>
>If(x<32 OR x>47,
> 0
>{else: Present Range},
> If(x<40,
> If(x<36,
> If(x<34,
> If(x<33,
> Mov( C, 32, E )
> {# else},
> Mov( C, 33, E )
> )
> {# else x>=34},
> If(x<35,
> Mov( C, 34, E )
> {# else},
> Mov( C, 35, E )
> )
> ){x<34?}
> {# else x>=36},
> If(x<38,
> If(x<35,
> Mov( C, 36, E )
> {# else},
> Mov( C, 37, E )
> )
> {# else x>=38},
> If(x<39,
> Mov( C, 38, E )
> {# else},
> Mov( C, 39, E )
> )
> ){x<38?}
> ){x<36?}
> {# else x>=40},
> If(x<44,
> If(x<42,
> If(x<41,
> Mov( C, 40, E )
> {# else},
> Mov( C, 41, E )
> )
> {# else x>=42},
> If(x<43,
> Mov( C, 42, E )
> {# else},
> Mov( C, 43, E )
> )
> ){x<42?}
> {# else x>=44},
> If(x<46,
> If(x<45,
> Mov( C, 44, E )
> {# else},
> Mov( C, 45, E )
> )
> {# else x>=46},
> If(x<47,
> Mov( C, 46, E )
> {# else},
> Mov( C, 47, E )
> )
> ){x<46?}
> ){x<44?}
> ){x<40?}
>)
>-----------------------------------
>3D:
>Function Name: "Vidya48_63"
>Formula:
>x:= Fml("VidyaDays");
>
>If(x<32 OR x>63,
> 0
>{else: Present Range},
> If(x<56,
> If(x<52,
> If(x<50,
> If(x<49,
> Mov( C, 48, E )
> {# else},
> Mov( C, 49, E )
> )
> {# else x>=50},
> If(x<51,
> Mov( C, 50, E )
> {# else},
> Mov( C, 51, E )
> )
> ){x<50?}
> {# else x>=52},
> If(x<54,
> If(x<53,
> Mov( C, 52, E )
> {# else},
> Mov( C, 53, E )
> )
> {# else x>=54},
> If(x<55,
> Mov( C, 54, E )
> {# else},
> Mov( C, 55, E )
> )
> ){x<54?}
> ){x<52?}
> {# else x>=56},
> If(x<60,
> If(x<58,
> If(x<57,
> Mov( C, 56, E )
> {# else},
> Mov( C, 57, E )
> )
> {# else x>=58},
> If(x<59,
> Mov( C, 58, E )
> {# else},
> Mov( C, 59, E )
> )
> ){x<58?}
> {# else x>=60},
> If(x<62,
> If(x<61,
> Mov( C, 60, E )
> {# else},
> Mov( C, 61, E )
> )
> {# else x>=62},
> If(x<63,
> Mov( C, 62, E )
> {# else x>=63!!!},
> Mov( C, 63, E )
> )
> ){x<62?}
> ){x<60?}
> ){x<56?}
>)
>==============
>4. Almost done; the last one pulls it all together:
>Function Name: "VidyaUpTo64"
>Formula:
>x:=Fml("VidyaDays");
>
>If(x<5,
> {Arbitrarily use 5 days as the minimum time frame}
> Mov(C,5,E)
>{else},
> If(x>=64,
> {64 days is the maximum we can handle (so far)}
> Mov(C,64,E)
> {else},
> If(x<32,
> If(x<16,
> Fml("Vidya00_15")
> {else x>=16},
> Fml("Vidya16_31")
> )
> {else x>=32},
> If(x<48,
> Fml("Vidya32_47")
> {else x>=48},
> Fml("Vidya48_63")
> )
> )
> )
>)
>============================
>It really works - somehow. Don't take my word for it but please try it out
for
>yourselves.
>
>It would have been easy to extend the time frames but this is how far my
>masochism would carry me. Of course I started out with one _big_ binary
search
>but MS won't let you: The maximum number of different numerical constants
it
>accepts is 20.
>
>If you want different formulas for the variable time frames, eg. using
Linear
>Regression, Directional Movement or whatever, just create a function, call
it in
>VidyaDays, and presto, you have a different Vidya. The disadvantage being
that
>no direct comparisons are possible without more cutting & pasting but a
kludge
>is a kludge is ...
>
>Have fun & happy trading,
>Jan Willem Roberts
>
|