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

Re: Multi-Period Indicators



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
>