Tutorial 95 | Sorting a vector using a recursive method

Fast sort function for vectors

Welcome to Markplex tutorial 95 in this collection of tutorials designed to help you learn TradeStation EasyLanguage programming skills. Please join our email list if you have not already done so and we will let you know when we release new tutorials or programs.

Tutorial 95 demonstrates how to create a function that sorts a vector. It applies a fast sort methodology that uses recursive calls to a method. This makes the program relatively simple, although conceptually a little difficult to understand.

If you want to save yourself some typing, an unprotected version of the tutorial 95 function is available immediate download for $19.95.

With the download I have included:

  • the sort function (_VectorQuickSort)
  • two show-me studies that I demonstrate in the video below that show how to call the function (_VectorQuickSortTest and _VectorQuickSortTest2)
  • an annotated print out from the function (as explained in the video) ( tutorial 95 processing.pdf) and
  • the schematic in PDF format (tutorial 95 schematic.pdf)
A schematic to explain the functioning of the recursive method.

A schematic to explain the functioning of the recursive method. I explain this is the video below.

 _VectorQuickSort function

The function contains a sort method which picks a position in the array at random and then compares the value stored at that index with those in the rest of the vector. The random value (in the initial iteration, 76 – see the above schematic) is added to a ‘middle’ vector. Values higher than this value are stored in a higher vector and values lower in a lower vector. These new higher and lower vectors are then fed back into the method to go through the same process recursively. The recursion continues until the size of the vector being processed is equal to 1.

This function also includes a concatenate method that concatenates the 3 vectors. This simple method uses For Begin…End loops to add values from two input vectors to the back of another one.

The program also contains some commented out print statements that can be uncommented and placed at line 33 in order to see the ‘inner workings’ of the program. tutorial 95 processing.pdf is an annotated example print out using these statements.

The print statements are as follows:

// Print statements used in debugging

// Place starting at line 33
Print( File("c:\quicksort.txt"),"Iteration ",iteration," ", D, T, " wholevector.count ", wholevector.count, " lowerEnd.count ", lowerEnd.count, " higherEnd.count ", higherEnd.count," select ", select, " selectval ", selectval );

For Value1 = 0 to wholevector.count - 1
Begin
Print( File("c:\quicksort.txt"), " Wholevector Iteration ",iteration," ", Value1," ", wholevector[Value1] astype double );
End;

For Value1 = 0 to higherend.count - 1
Begin
Print( File("c:\quicksort.txt"), " Higherend Iteration ",iteration," ", Value1," ", higherend[Value1] astype double );
End;

For Value1 = 0 to middle.count - 1
Begin
Print( File("c:\quicksort.txt"), " Middle Iteration ",iteration," ", Value1," ", middle[Value1] astype double );
End;

For Value1 = 0 to lowerend.count - 1
Begin
Print( File("c:\quicksort.txt"), " Lowerend Iteration ",iteration," ", Value1," ", lowerend[Value1] astype double );
End;

In this case the print statement created a text file at: c:\quicksort.txt on my hard drive. Adding these lines of code will reduce the speed of the function significantly and should only be used when sorting small arrays.

_VectorQuickSortTest show-me study

The show me study: _VectorQuickSortTest creates a vector containing an arbitrary, unsorted list of numbers: 76, 20, 0, 100, 87, 1, 1, 876. This show me study calls the _VectorQuickSort function.  It also prints the contents of the vector before and after the sort.

 _VectorQuickSortTest2 show-me study

The show me study: _VectorQuickSortTest2 creates a vector containing randomly generated numbers. It sorts this vector and times how long the sort takes. Finally it prints the sorted vector.

The number of elements in the vector to be sorted is determined by the following statement:

// Store random values in array testvect
For Value1 = 1 to 1000000
Begin
testvect.push_back( Random( 100000 ) );
End;

In this case 1,000,000 values are stored in the vector.

An unprotected version of the tutorial 95 function together with the PDFs and test programs are available for download for $19.95.

Gold Pass members get an additional 20% discount off all program and tutorial prices. If you are a Gold Pass member make sure you enter the special coupon code to get 20% discount off these prices. You can find the coupon code on the Gold Pass page.

TO THE BEST OF MARKPLEX CORPORATION’S KNOWLEDGE, ALL OF THE INFORMATION ON THIS PAGE IS CORRECT, AND IT IS PROVIDED IN THE HOPE THAT IT WILL BE USEFUL. HOWEVER, MARKPLEX CORPORATION ASSUMES NO LIABILITY FOR ANY DAMAGES, DIRECT OR OTHERWISE, RESULTING FROM THE USE OF THIS INFORMATION AND/OR PROGRAM(S) DESCRIBED, AND NO WARRANTY IS MADE REGARDING ITS ACCURACY OR COMPLETENESS. USE OF THIS INFORMATION AND/OR PROGRAMS DESCRIBED IS AT YOUR OWN RISK.

ANY EASYLANGUAGE OR POWERLANGUAGE TRADING STRATEGIES, SIGNALS, STUDIES, INDICATORS, SHOWME STUDIES, PAINTBAR STUDIES, PROBABILITYMAP STUDIES, ACTIVITYBAR STUDIES, FUNCTIONS (AND PARTS THEREOF) AND ASSOCIATED TECHNIQUES REFERRED TO, INCLUDED IN OR ATTACHED TO THIS TUTORIAL OR PROGRAM DESCRIPTION ARE EXAMPLES ONLY, AND HAVE BEEN INCLUDED SOLELY FOR EDUCATIONAL PURPOSES. MARKPLEX CORPORATION. DOES NOT RECOMMEND THAT YOU USE ANY SUCH TRADING STRATEGIES, SIGNALS, STUDIES, INDICATORS, SHOWME STUDIES, PAINTBAR STUDIES, PROBABILITYMAP STUDIES, ACTIVITYBAR STUDIES, FUNCTIONS (OR ANY PARTS THEREOF) OR TECHNIQUES. THE USE OF ANY SUCH TRADING STRATEGIES, SIGNALS, STUDIES, INDICATORS, SHOWME STUDIES, PAINTBAR STUDIES, PROBABILITYMAP STUDIES, ACTIVITYBAR STUDIES, FUNCTIONS AND TECHNIQUES DOES NOT GUARANTEE THAT YOU WILL MAKE PROFITS, INCREASE PROFITS, OR MINIMIZE LOSSES.

Tutorial 95 Video

An unprotected version of the tutorial 95 function is available for download for $19.95.

With the download I have included:

  • the sort function (_VectorQuickSort)
  • two show-me studies that demonstrate how to call the function (_VectorQuickSortTest and _VectorQuickSortTest2)
  • an annotated print out from the function (as explained in the video) ( tutorial 95 processing.pdf) and
  • the infographic in PDF format (tutorial 95 schematic.pdf)

Gold Pass members get an additional 20% discount off all program and tutorial prices. If you are a Gold Pass member make sure you enter the special coupon code to get 20% discount off these prices. You can find the coupon code on the Gold Pass page.

If you see any errors in this tutorial – or we have not made something clear, we would be most grateful if you could please let us know. E-mail us at: tutorials@markplex.com. Also, let us know if you have any ideas for new tutorials.

Disclaimer The information, materials, products and services on this Web site are made available subject to the following terms and conditions. Markplex Corporation reserves the right to change these terms and conditions at its sole discretion. This Web site and any downloads, videos, tutorials, programs and information contained herein is presented solely for educational, informational, and/or entertainment use and under no circumstances should be used for actual trading. We at Markplex Corporation are not Broker/Dealers, Financial Advisers or Registered Analysts. No offer or solicitation to buy or sell securities, securities derivatives, futures products or off-exchange foreign currency (forex) transactions of any kind, or any type of trading or investment advice, recommendation or strategy, is made, given or in any manner endorsed by Markplex Corporation. You are fully responsible for any investment or trading decisions you make. Futures and options trading has a large potential risk. You must be aware of the risks and be willing to accept them in order to invest in the futures and options markets. This Web site is neither a solicitation nor an offer to buy and/or sell futures or options. No representation is being made that any account will or is likely to achieve profits or losses similar to those discussed on this Web site. Past performance, whether actual or indicated by historical tests of strategies, is no guarantee of future performance or success. No warranties of profitability are being made or given. There is a possibility that you may sustain a loss equal to or greater than your entire investment regardless of which asset class you trade (equities, options futures or forex); therefore, you should not invest or risk money that you cannot afford to lose. CFTC RULE 4.41 - Hypothetical or simulated performance results have certain inherent limitations. Unlike an actual performance record, simulated results do not represent actual trading. Also, since the trades have not actually been executed, the results may have under- or over-compensated for the impact, if any, of certain market factors, such as lack of liquidity. 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 or is likely to achieve profits or losses similar to those shown. Screen shots on this site are examples and are not meant to imply that any of the programs or tutorials available on this Web site will generate profitable trades. EasyLanguage or PowerLanguage trading strategies, signals, studies, indicators, showme studies, paintbar studies, probabilitymap studies, activitybar studies, functions (and parts thereof) and associated techniques referred to, included in or attached to this tutorial or program description are examples only, and have been included solely for educational, informational, and entertainment use. Markplex Corporation does not recommend that you use any such trading strategies, signals, studies, indicators, showme studies, paintbar studies, probabilitymap studies, activitybar studies, functions (or any parts thereof) or techniques. The use of any such trading strategies, signals, studies, indicators, showme studies, paintbar studies, probabilitymap studies, activitybar studies, functions and techniques does not guarantee that you will make profits, increase profits, or minimize losses. Markplex Corporation assumes no liability for any damages, direct or otherwise, resulting from the use of this information and/or program(s) described, and no warranty is made regarding its accuracy or completeness. Use of this Web site including the information, tutorials and/or programs included on it is at your own risk. You shall indemnify and hold Markplex Corporation harmless from any and all liability, loss, trading losses, costs, damage, or expense, including attorneys' fees you or third party may suffer (other than damage to your tangible property or injuries to employees occurring during the course of work) as a result of claims, demands, costs, or judgments arising out of third party and any other claims based on Markplex Corporation's performance, including, but not limited to losses resulting from the use of Markplex Corporation developed software, programs, web sites, tutorials, or the TradeStation charting and/or trading platform. Any testimonials on this Web site may not be representative of the experience of other clients and are not indicative of future results or success.
This Web site contains or may contain references and links to other companies and/or their Web sites, none of which is under the control of Markplex Corporation. Markplex Corporation makes no representations, warranties or endorsements whatsoever about any other Web sites to which you may have access through the Markplex Corporation Web site, or any products or services of those other companies, even if the products or services of those other companies or their Web sites are described or offered on the Markplex Corporation Web site or integrated with Markplex Corporation's products or services. TradeStation®, EasyLanguage® and PowerEditor® are registered trademarks of TradeStation Technologies, Inc. Other brand and product names which appear on this site are the trademarks or service marks of their respective owners, including: Microsoft® is a registered trademark in the United States Microsoft®Excel® is a registered trademark of Microsoft® Neither TradeStation Technologies nor any of its affiliates has reviewed, certified, endorsed, approved, disapproved or recommended, and neither does or will review, certify, endorse, approve, disapprove or recommend, any product or service that offers training, education or consulting regarding the use of EasyLanguage.

By continuing to use and navigate our sites, services, applications, tools or messaging, you are agreeing to our Terms and Conditions and the use of cookies, web beacons and similar technologies as described in our Privacy Policy and Privacy Policy on the use of cookies.