[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 Jose,

As in the reply to Eric, if you want x = a ^ b, use something like

x := Exp( b * Log( a ) )

Please, I am sidestepping one of your rules here, so just test it
before you use it!  It may be Ln in MSFL, I am not sure and can not
test it from here.  Regarding the world economy, we are up to our ears
in work regarding the local economy at the moment.  Must have
something to do with sudden changes in interest rates.......  Of
course our model predicted this, but we did not believe it.....

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



--- In equismetastock@xxxxxxxxxxxxxxx, "Jose Silva" <josesilva22@xxxx>
wrote:
> 
> ChiChungChoi, simultaneous entry/exits can be manipulated in two 
> simple ways:
> 
>  #1 Ignore:
>       entry/exit signals cancel each other.
> 
>  #2 Preference given to:
>       new entry if currently Short,
>       new exit if currently Long.
> 
> Take a look at the MS code here:
> http://www.metastocktools.com/#metastock
> "System/signal indicators" section, "Trade signals" link.
> 
> 
> > MSFL does not allow a time series as a parameter in the 'Power'
> > function.  So we have to use exps and lns.
> 
> MG, if you're not too busy modeling the World's economy, do you know 
> of a simple way to use the Log() (natural Logarithm) and Exp() 
> functions to calculate Power(DataArray,VariablePower)?
> 
> Example:
> DataArray:=C;
> VarPower:=Mov(C,21,E)/C;
> Pwr(DataArray,VarPower) <-- only constant data allowed.
> 
> 
> jose '-)
> http://www.metastocktools.com
> 
> 
> 
> --- In equismetastock@xxxxxxxxxxxxxxx, "MG Ferreira" <quant@xxxx> 
> wrote:
> > 
> > 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 --------------------~--> 
What would our lives be like without music, dance, and theater?
Donate or volunteer in the arts today at Network for Good!
http://us.click.yahoo.com/Tcy2bD/SOnJAA/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/