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

[EquisMetaStock Group] Re: Rules Management for Trading System



PureBytes Links

Trading Reference Links


Hi Eric,

I am not at the office at the moment, and all of these are just off
the cuff.  I suggest you pick one of the following ideas:
 1. combine it into a single signal
 2. react to the most recent signal
 3. weigh the signals

We mostly use 1 and often 3.  Using 3 is very similar to using 2, and
sort of a way to combine 1 and 2 into one - hope you are less confused
than I am at the moment....

Anyhow, here are some suggestions.  Using 1, you could combine it into
 single signal by e.g. netting the two singals, so that the stronger
one will determine the position.  The problem is that the faster RSI
will normally dominate, but in the example they are close enough to
try.  So, from

> Vs = RSI(9) - 70
> Vl = RSI(14) - 30
> 
> Ts = min(0,Vs)*(Ss<0);
> Tl = max(0,Vl)*(Sl>0);

calculate a single signal as something like

Tls = Tl + Ts;

The second suggestion, reacting to the most recent signal, entails
monitoring when each one fired, using something like

Bl := BarsSince(Sl=0);
Bs := BarsSince(Ss=0);

which gives the bars since each signal fired.  Now, use the most
recent one, so

Tls := ( Bl < Bs ) - ( Bs < Bl );

I haven't tested this, but I hope that it will be zero if both Bl and
Bs are zero, +1 if Bl fired more recently than Bs and -1 if Bs was the
most recent one that fired.

Finally, the third suggestion.  This is sort of an advanced way to
combine the two into a single indicator but also taking into account
the number of bars since it last fired.  You can optimise it or apply
something like the Kalman filter, but I suggest you just play around a
bit with it and see if it works or not.  We will basically add an
exponential decay to each signal.  So as soon as a signal 'fires' we
start to diminish its strength exponentially so that, if the other one
fires, it will be strong.  To illustrate, say we diminish the strength
by 10% each bar, then, suppose the signal strength is 100 for the next
ten bars, we will adjust this to something like

100, 90, 81,  72.9, 65.6, 59.0, 53.1, 47.8, 43.0, 38.7

Note that, by the tenth bar, we are using 0.387 of the original
signal.  The 'idea' behind this is that, when a signal changes, it has
maximum impact but this impact dies out over time.  If you just went
long based on a model, we suppose it to be a good signal but if the
model still is long ten say weeks from now we treat it with much more
caution.  To do this, we still use the BarsSince function, something like

Vs = RSI(9) - 70
Vl = RSI(14) - 30

Ts = min(0,Vs)*(Ss<0);
Tl = max(0,Vl)*(Sl>0);

Bl := BarsSince(Sl=0);
Bs := BarsSince(Ss=0);

Fl := Exp( Bl * Ln( 0.9 ) );
Fs := Exp( Bs * Ln( 0.9 ) );

Tls = Tl * Fl + Ts * Fs;

What we want to do is something like dampening factor raised to the
power of the number of bars since the signal fired, but MSFL does not
allow a time series as a parameter in the 'Power' function.  So we
have to use exps and lns.  Note, it may be Log in stead of Ln in the
above, I am not sure exactly which one MSFL uses.  In the end, we
calculate a factor Fl and Fs with which we adjust the long and short
signal and then we use this to combine them.  To have the signal
strength fall by 10% in each bar, use 0.9 as above.  To make it fall
by 1%, use 0.99 and so on.  These are the type of values you should
play with.  If you use something big like 20 or 50%, it will fall too
quick.

You can also consider using different factors since the signals use
different time periods.  Since the short one in your example is
quicker, we dampen it more, say something like

Fl := Exp( Bl * Ln( 0.95 ) );
Fs := Exp( Bs * Ln( 0.90 ) );

so that the short signal falls by 10% and the long by 5%.  In
practise, unless the signals fire fairly close to one another, this
will not produce results substantially different to the one where you
use just the most recent signal.  You can also use a linear dampening
or very small factors (something like Ln( 0.99 ) or Ln( 0.999 ) in the
above) to get signals that are not totally dominated by this dampening.

To use a linear factor, do something like

Fl := 1 - Bl / 100;
Fs := 1 - Bs / 100;

This has some additional problems, as it will reverse after 100 bars
and is a bit slow, but at least something else to experiment with.

Regards
MG Ferreira
TsaTsa EOD Programmer and trading model builder
http://www.ferra4models.com
http://fun.ferra4models.com


--- In equismetastock@xxxxxxxxxxxxxxx, chichungchoi <no_reply@xxxx> wrote:
> 
> Hi MG Ferreira:
> 
> How about to define LONG AND SHORT signals separately? such as
> LONG:  RSI(14)>30;
> SHORT: RSI(9)<70;
> 
> Ss =-(RSI(9)<70)*(Ref(RSI(9),-1)>=70);
> we get a -1 value every time we have to short. 
> Sl =+(RSI(14)>30)*(Ref(RSI(14),-1)<=30);
> and we get a +1 every time we have to go long.
> 
> At this moment, I cannot combine all of this into a single indicator, 
> because I want to apply penalty function for LONG and SHORT signals 
> separately.
> Do you have any suggestion on how to approach Kalman filter in this 
> case?
> 
> Indicating the strength for each sigals, then 
> we add the following:
> 
> Vs = RSI(9) - 70
> Vl = RSI(14) - 30
> 
> Ts = min(0,Vs)*(Ss<0);
> Tl = max(0,Vl)*(Sl>0);
> 
> Normalization between -1 and +1
> Ts_Norm = Ts/ABS(min(Ts));
> Tl_Norm = Tl/max(Tl);
> 
> At this moment, LONG AND SHORT signals could occur at the same time.
> Do you have any idea how to handle the signals in this case?
> Under different kinds of situation, LONG signal will be triggered.
> For example, Tl_Norm > 30% or Ts_Norm>Ref(Ts_Norm,-1)
> Do you have any more suggestion on how to trigger the LONG signal in 
> another way?
> 
> Thank you
> Eric





------------------------ Yahoo! Groups Sponsor --------------------~--> 
Has someone you know been affected by illness or disease?
Network for Good is THE place to support health awareness efforts!
http://us.click.yahoo.com/Rcy2bD/UOnJAA/cosFAA/BefplB/TM
--------------------------------------------------------------------~-> 

 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/equismetastock/

<*> To unsubscribe from this group, send an email to:
    equismetastock-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/