So here I will use a difficult term myself, just to sound smarter than I am. In today's post I will implement a WFCMAESFISMICOPT( pronounced "woo-foo-smash-efis-mee-copt") model.

It stands for: A Walk-Forward Covariance-Matrix-Adaptation-Evolution-Strategy on a Fuzzy-Inference System On Multiple Instruments and A Custom Optimization Target. How is that for a title!

You think that's complicated? It's not. We 'll start with Matlab's standard ANFIS model to see where the idea comes from.

Matlab's Fuzzy Logic module includes what is called ANFIS or Adaptive Neuro-Fuzzy Inference Systems.

Now that sounds complicated too. Well it is, if you were to built it. But the concept behind it is simple.

An ANFIS system is a fuzzy model where the parameters are not set by an "expert" but are found using Neural Networks.

In a normal Fuzzy Model an "expert" is invited to give statements like

1. "I consider RSI to be Low when it is between 0 and 40. The closer to 0 the "Lower" it is".

2. "A Low RSI(3) gives a possible Buy signal".

read part 1 and part 2 of this article.

An ANFIS system needs no expert. Given a optimizing target (i.e.,profit), it comes up with both the membership functions and the rules. So in theory it can expose relationships that humans may not be able to see. One can argue, why not use Neural Networks directly? Anfis has the advantage that once we get the results, the results are translatable to Human understandable concepts like "Buy at Low RSI and Mid-month".

ANFIS models get bogged down at 5+ Inputs and the optimization target is usually tomorrow's return. Matlab's ANFIS cannot (without custom code) optimize for Profit% or CAR/MDD or Sharpe Ratio.

Now Amibroker (a Software for under $300) can do that. It may not have Neural Nets but has something possibly better for optimizing the parameters: the CMA-ES optimizer. And it's fast.

That means we can build the Fuzzy model in an Amibroker script and optimize all the parameters, using whatever optimizing target we want (i.e., the default CARMDD or our own custom). We can also run it on a portfolio of multiple instruments as well as Walk-Forward it so that we know it has no "prior knowledge" built into it.

You may want to read part 1 and part 2 of this article.

if RSI(3) is between 0 and 40 it is "Low". The close to 0 the lower it is.

if RSI(3) is between 10 and 90, its "Mid" where it's most "Mid" at RSI(3)=50

if RSI(3) is between 60 and 100, its "High". The closer to 100 the higher it is.

Here's the TRIMember function:

TRIMember(variable, leftBottom, MidHigh, RightBottom)

So these can be written as

SetMember( "rsi3", "Low", TRIMember( rsi3, 0, 0, 40 ) );

SetMember( "rsi3", "Neutral", TRIMember( rsi3, 10, 50, 90 ) );

SetMember( "rsi3", "High", TRIMember( rsi3, 60, 100, 100 ) );

or for that matter

SetMember( "rsi3", "Low", TRIMember( rsi3, a, a+b, a+b+c) );

SetMember( "rsi3", "Neutral", TRIMember( rsi3, d, d+e, d+e+f) );

SetMember( "rsi3", "High", TRIMember( rsi3, g, g+k, g+k+m) );

and as Amibroker users know we can do this:

a=optimize("a",0,0,50,10);

b=optimize("b",0,0,50,10);

c=optimize("c",0,0,50,10);

etc...

We do have a practical problem here: Too many overlaping parameters. We can help a bit by using Membership Function with 2 parameters like Gaussian Membership Function and Sigmoid Membership function. Or we can forget about optimizing the membership functions and just optimize the rules.

That we will do in the next post:

**How to uncover hidden relationships in the markets in under 5 minutes.**

and as Amibroker users know we can do this:

a=optimize("a",0,0,50,10);

b=optimize("b",0,0,50,10);

c=optimize("c",0,0,50,10);

etc...

We do have a practical problem here: Too many overlaping parameters. We can help a bit by using Membership Function with 2 parameters like Gaussian Membership Function and Sigmoid Membership function. Or we can forget about optimizing the membership functions and just optimize the rules.

That we will do in the next post:

Labels: Amibroker, Anfis, fuzzy, logic, Market, Matlab, optimize cmaes, RSI(3), strategy.stock, system, trading