About ARM Technology

What is "ARM"?

ARM stands for Adaptive Reasoning Model. In the Nirvana Club, we have taken ARM several levels above OmniTrader through the use of applied Artificial Intelligence.

  • Overview
  • arm 2
  • arm 3
  • arm 4
  • ARM 5
  • ARM 6

Announcing ARM6...

The Genetic Algorithm has 20+ major enhancements that were implemented from December 2018 through July of 2019.  If you are simply using ARM6 Strategies, you will appreciate how much faster the Signals are generated, and how much better the Back Test and Forward Tests match. 

Do you develop?  Many of the enhancements benefit those who want to create the best possible Genetic Algorithm.

The speed of operation is about 100x faster, bringing time to execute 10,000 iterations down to just 20 minutes.

The new Equity Curve Fitness Function provides the best metric for comparing Rules, since it simulates trading performance of each Rule.

In Training, the Inputs and Rules are automatically managed. Automatic Binning make it easier to define “Super Inputs” that can lead to phenomenally profitable Rules, assisted by the new Internal Validation feature. Finally, users can experiment with the new SETI project to retrieve and test Inputs from our servers, and change the way the GA works by changing experimental settings in the INI file.


There are two areas of the Genetic Algorithm that require a lot of CPU processing time: Training and Signal Generation. Multi-threading on multiple cores was successfully applied in these crifical areas for dramatic speed increases.

Modern CPUs have multiple Processor Cores

Multi-Core Training

The Genetic Algorithm Training code was enhanced so that multiple cores can be used to achieve parallelism. 

The GA works by creating 1,000 random Rules, and then measuring each Rules across all the data so statistics can be calculated (Hit Rate, PPT, etc.) This used to be done one Rule at a time. Now many can simultaneously be measured on multiple CPUs (cores) on the computer.

Prior to the enhancement, the GA would produce new Rules at a rate of about 1 Rule every 3 Seconds. Now, it can produce 10 Rules per Second.

Multi-Core Signal Generation

At Signal Generation time, each bar of data must be evaluated on all Rules in the Knowledge Base to see which Rules are generating a Signal on that bar. This used to be done one bar at a time. Now, many Rules can be evaluated simultaneously, using separate cores of the CPU.

On Knowledge Bases with many Rules (30,000+) it used to take up to a minute to generate Signals on a single Symbol. Now, the same KB can generate Signals in 2-3 seconds – speeding it up by a factor of 30 to 50 times.


A Rule with high Hit Rates can have low Profit per Trade values.  Similarly, a Rule with a large Profit per Trade can have very low Hit Rates.   A better way to compare Rules is to measure the approximate profitability of each Rule. 

Equity Curve Fitness

Equity Curve is a new Fitness Function that measures Gains & Losses for each Rule to determine which Rules have the best Trading Performance. 

This is done by running a quick simulation on all Hits for a Rule to arrive at an average profit percentage per bar. The effect of having more trades active at the same time is taken into account by the simulation.

Max Positions

Specifies the maximum number of trades that can be open during the simulation.  This helps ensure that Rules with a large number of trades are not automatically inflated, since not all trades can be taken in a live account. 


How the Genetic Algorithm works.

Automatic Training Constraints

The [x] Automatic check box on Minimum Requirements allows the GA to automatically increase Profit per Trade, Hit Rate, and or Min EC to encourage it to find better and better Rules. It can temporarily reduce Minimum Requirements to “jump start” the process, but will only save Rules that meet the Minimums.

Automatic Input Reduction

Whenever the GA sees an Input that has a Delta Fitness of 0 for a given Rule, the Input will be removed from the Rule before the Rule is saved. Using this approach, Inputs that are “kept” in any Rule are the ones that make a difference in that Rule. This has the effect of creating simpler, better rules.

Manual Input Reduction

If we measure Delta Fitness for ALL Rules for an Input, we end up with an average value for how much the Rules are affected if we remove this Input. This is called Mean Delta Fitness and is shown in the Input Table under Settings.

Table in Settings showing Delta Fitness Statistics for each Input

Continue Training after Deleting or Adding Inputs

In prior releases of the GA, if any inputs were deleted or added, the GA would have to be re-trained.  This is no longer the case.   If an Input is deleted, all Rules that have that Input will be deleted.  But those that do NOT have the Input will be preserved. 

This means you can delete Inputs and/or Copy/Paste Inputs from other GA’s and Continue Training, to keep getting a better and better Knowledge Base.

Automatic Rule Reduction

We have seen Knowledge Bases grow to 50,000 Rules. This causes processing to slow because every Rule must be evaluated on every bar at Signal Generation time. One of the ways we address this is by eliminating duplicate Rules. 

We discovered that when two Rules have virtually identical Statistics (Hit Rate, Number of Trades, and Average PPT) they are almost always measuring the same thing, even though their Inputs are different.  By deleting these Rules we avoid saving Rules to the Knowledge Base that are substantially identical.

Internal Validation

We always train in a “Back Test” period.  However, if we reserve data within the same period for validation, we can tell if a Rule we have discovered is consistently valid. We use two kinds of internal validation, “Symbol” and “Time Period” validation.

For Symbol Validation we reserve Symbols to validate Rules on. If the INI file specifies 1 Validation Segment, the list will be divided in half.

For Time Period Validation with 1 Validation Period, the Training Segments and Validation Segments will be the same number of bars.  In the illustration to the right, 30 bars was used.  When the GA is training, it looks for Rules across ALL of the Training Segments at the same time.  When a valid Rule is found, it then measures occurrences and performance of the Rule in the Validation Segments. 

For Time Period Validation, we have found that it is best if the number of bars used for validation is greater than 20 to avoid training and validating occurrences of a Rule that are too close together and therefore not independent.

Time-Based Internal Validation with 1 Validation Period of 30 bars

Lock Trained Dynamic Periods

A feature was added a few years ago to train new Knowledge Bases on an interval, such as Quarterly. 

We never want Signals to change in a Knowledge Base we are using, but if we are developing them, we may want to be able to Continue Training on the prior segments before trading with the KB.

Using this setting means we can CONTINUE Training on the Segments, which is useful to continue making them more effective.   As we do this, Signals will change because more rules are generated.  Once we release the Knowledge Base(s), we would no longer want to train the older segments to avoid changing Signals, so we check the “Lock trained dynamic periods” setting.


In the 80’s, scientists wanted to accelerate the search for life in the universe.  One idea was to “divide” the sky into many thousands of parcels and engage individuals to contribute their computers to examine the data in each parcel.  This was the foundation of SETI, which stands for the “Search for Extra Terrestrial Intelligence.” 

At Nirvana, SETI stands for the “Search for Extra Terrific Inputs.”  SETI (a) allows individuals to invent new indicators or relationship metrics and upload them to a Server, and (b) others to download the Inputs to test and use. 

How SETI Works:

When enabled, at the start of each Training, Inputs with the lowest Fitness (equal to the “Work Space” setting) are removed and replaced with inputs from the server. The INI file variable ExploratoryPercent controls this. If ExploratoryPercent is “80”, then 80% of the Inputs will be pulled randomly from the Server, and 20% will be those with the highest values of Delta Fitness (matching the Fitness Function used in the GA) on the Server. 

When Training is resumed in another run of the ToDo List, Inputs are replaced again.  Note that SETI is still experimental, and performance can drop as a result of Input Replacement. 

Preserving Inputs

Often, we design Inputs that we want in the GA, even if they have lower Delta Fitness values.  For example, we may add indicators on the market that are used rarely but effectively keep us out of Long trades if the market is weak.  In this case, the protection offered by these inputs is more important than how they perform.

There is a feature in the GA that allows us to “preserve” inputs from being swapped out by SETI.

Important Information:
Futures, options and securities trading has risk of loss and may not be suitable for all persons. No system can guarantee profits or freedom from loss. Past results are not necessarily indicative of future results. Hypothetical or simulated performance results have certain inherent limitations. Unlike an actual performance record, simulated results do not represent actual trading. Simulated trading programs in general are also subject to the fact that they are designed with the benefit of hindsight. No representation is being made that any account will achieve profits or losses similar to those shown.