**D****ictionary Recap**

Last month’s post on using the **elcollections** dictionary was a little thin so I wanted to elaborate on it and also develop a trading system around the best patterns that are stored in the dictionary. The concept of the dictionary exists in most programming languages and almost all the time uses the (key)–>value model. Just like a regular dictionary a word or a key has a unique definition or value. In the last post, we stored the cumulative 3-day rate of return in keys that looked like “+ + – –” or “+ – – +“. We will build off this and create a trading system that finds the best pattern historically based on average return. Since its rather difficult to store serial data in a Dictionary I chose to use **Wilder’s** smoothing average function.

## Ideally, I Would Have Liked to Use a Nested Dictionary

Initially, I played around with the idea of the pattern key pointing to another dictionary that contained not only the cumulative return but also the frequency that each pattern hit up. A dictionary is designed to have unique key–> to one value paradigm. Remember the keys are strings. I wanted to have unique key–> to multiple values. And you can do this but it’s rather complicated. If someone wants to do this and share, that would be great. AndroidMarvin has written an excellent manual on **OOEL **and it can be found on the TradeStation forums**. **

## E**nded Up Using A Dictionary With 2*Keys Plus an Array**

So I didn’t want to take the time to figure out the nested dictionary approach or a vector of dictionaries – it gets deep quick. So following the dictionary paradigm I came up with the idea that words have synonyms and those definitions are related to the original word. So in addition to having keys like “+ + – -” or “- – + -” I added keys like “0”, “1” or “15”. For every + or – key string there exists a parallel key like “0” or “15”. Here is what it looks like:

– – – – | = | “0” |

– – – + | = | “1” |

– – + – | = | “2” |

You can probably see the pattern here. Every “+” represents a 1 and every “0” represent 0 in a binary-based numbering system. In the + or – key I store the last value of Wilders average and in the numeric string equivalent, I store the frequency of the pattern.

## Converting String Keys to Numbers [Back and Forth]

To use this pattern mapping I had to be able to convert the “++–” to a number and then to a string. I used the numeric string representation as a dictionary key and the number as an index into an array that store the pattern frequency. Here is the method I used for this conversion. Remember a method is just a function local to the analysis technique it is written.

This is a simple method that parses the string from left to right and if there is a “+” it is raised to the power(2,idx) where idx is the location of “+” in the string. So “+ + – – ” turns out to be 8 + 4 + 0 + 0 or 12.

Once I retrieve the number I used it to index into my array and increment the frequency count by one. And then store the frequency count in the correct slot in the dictionary.

## Calculating Wilder’s Average Return and Storing in Dictionary

Once I have stored an instance of each pattern [16] and the frequency of each pattern[16] I calculate the average return of each pattern and store that in the dictionary as well.

When you extract a value from a collection you must us an identifier to expresses its data type or you will get an error message : **patternDict[patternString]** holds a double value {a real number} as well as **patternDict[patternStringNum] – **so I have to use the keyword **asType. **Once I do my calculation I ram the new value right back into the dictionary in the exact same slot. If the pattern string is not in the dictionary (first time), then the **Else** statement inserts the initial three-day rate of return.

**Sort Through All of The Patterns and Find the Best!**

The values in a dictionary are stored in alphabetic order and the string patterns are arranged in the first 16 keys. So I loop through those first sixteen keys and extract the highest return value as the “best pattern.”

If Today’s Pattern Matches the Best Then Take the Trade

If today matches the best pattern then buy and cover after the second day.

## Conclusion

I didn’t know if this code was worth proffering up but I decided to posit it because it contained a plethora of programming concepts: dictionary, method, string manipulation, and array. I am sure there is a much better way to write this code but at least this gets the point across.

## Contents of Dictionary at End of Run

## Example of Trades

## Code in Universum