Topic: Multi-Market validator in Express Generator

Hello Traders,

I've started working on a Multi-Market functionality for Express Generator.

Why is it necessary?

I'm using Express Generator on two servers to generate and validate strategies for the Top 10 Robots App.

My current workflow is:
1) Generate strategies for each symbol and period (16 symbols and 4 periods). The Generator exports collections with capacitty of 1000 strategies.
2) Validate the strategies against the Acceptance Criteria (AC). The exported collections are up to 100 strategies.
3) Validate the AC collections with Monte Carlo (MC).
4) Cross-validation - Validate passed MC collections with data from another server sequentially. I validate M15, M30, and M30 on one additional server, and M5 on 5 servers. M5 collections also go to an application called Prop Firm Robots.
5) All new strategies are validated with already collected strategies.

My Acceptance Criteria are rather strict, and only a few strategies can progress through the workflow.

Now I decided to change the approach. Instead of throwing off the strategies at the beginning of the workflow, I want to reduce the AC and to move it into the Application itself.
Instead of strict AC, I want to use a Multi-Market validation, like:
1) Generator
2) Monte Carlo
3) Multi-Market
4) Cross-validation
5) AC in the applications

The problem is that the current implementation of Express Generator makes it easy to do sequential validations:
- generate
- test on the market A
- which pass A, test on market B
- ...

We cannot test strategies on 5 markets and take those that pass 3 markets.

I'm going to solve that problem this week.

Re: Multi-Market validator in Express Generator

New Multi-Market script is introduced: .\bin\mm.js

Intended usage:

With a custom settings file:

node .\bin\mm.js --settings mm.ini

With CLI options:

node .\bin\mm.js ^
  --input  Collection-[SERVER]-[SYMBOL]-[PERIOD].json    ^
  --output Collection-[SERVER]-[SYMBOL]-[PERIOD]-MM.json ^
  --server Premium     ^
  --symbol EURUSD      ^
  --period M15         ^
  --test-symbols auto  ^
  --count-of-tests   5 ^
  --min-passed-tests 3

By specifying the symbols manually:

node .\bin\mm.js ^
  --input  Collection-[SERVER]-[SYMBOL]-[PERIOD].json ^
  --output Collection-[SERVER]-[SYMBOL]-[PERIOD].json ^
  --output-replace true ^
  --server Premium      ^
  --symbol EURUSD       ^
  --period M15          ^
  --test-symbols EURUSD GBPUSD AUDUSD USDCHF USDJPY  ^
  --count-of-tests   5  ^
  --min-passed-tests 3

The input and the output formats will be as in the Generator "gen.js".

For example, the upper --output-replace true serves to override the same strategy instead of adding a suffix to the name or using another naming format.


The parameters "server", "symbol", and "period" determine the data origin, symbol information, and placeholders in the input/output templates.

The actual Multi-Market data are specified in the "--test-symbols" parameter.

There are two options:
- "auto" - the program will select symbols automatically
- concrete symbols:  EURUSD GBPUSD AUDUSD USDCHF USDJPY

Re: Multi-Market validator in Express Generator

Thee new tool can fetch data and load collections

https://image-holder.forexsb.com/store/ex-gen-multi-market-loading-data-and-collection-thumb.png

It loads an input collection in a similar way as "./bin/node.js".

The parameters ""--server",  "--symbol", "--period", and "--input" serve to determine the input collection. I'm using template variables in the example, but it can be a simple collection file path.

It shows loaded 28 strategies here. I'll make it showing the collection name also.

The Multi-Market markets are set as a combination of "--test-servers", "--test-periods", and "--test-symbols". The program will load a combination of them (Cartesian product ) until it reaches the "--count-of-tests" value.

It loaded 8 markets because I set 4 symbols, 2 servers, and 1 period.

Here is more extreme example:

https://image-holder.forexsb.com/store/ex-gen-multi-market-load-a-lot-of-data-thumb.png

Here I intentionally skip fetching fresher than 20 minutes data. (loaded during the first example).

I mark the Monday complete.

Happy Trading!