These books cover a wide range of technical analysis and trading topics. I have read and/or utilized ideas from these books for developing trading ideas and in help writing my own books. I wanted to see what I could get for less than $13 a book. I was pleasantly surprised at what I could get at Thriftbooks.com for this price or lower. If you go a little higher in price, you will get some really great deals too. Yes, these books are old, and I am sure I have left out some great names, but the bang for the buck is ridiculous.
Note – I captured the Add to Cart button in the IMAGES – IT DOES NOT WORK. I wanted to show the various editions of each book. Go to www.thriftbooks.com and search for the title or author and you should be able to find these books just like I did. Also check out amazon.com
The Gallacher, Taleb, McKay, Schwager, and Livermore (Lefevre) books are fun reads that give an honest view of trading in general. Elders’ book just needs to be any trader’s library.
The Edwards and Magee, Sklarew and Darvas books are classics.
Sunny Harris’ book is great for beginners.
The Stridsman and Rotella books are concrete methods to systematic trading.
Kaufman and McCormick/Katz are great reference books.
The Conway book has great EasyLanguage examples.
You can learn a lot from Schwager’s first book.
Learn optimization from Robert Pardo and money management from Fred Gehm’s classic.
If you go up in price a little bit, you will get Ralph Vince, Larry Williams, John Carter, Rober Carver, Andreas Clenow, and Ernie Chan. If you are just starting out, you must have a trading library, and this would be a great start for the first shelf.
If letting profits run is key to the success of a trend following approach, is there a way to take profit without diminishing returns?
Most trend following approaches win less than 40% of the time. So, the big profitable trades are what saves the day for this type of trading approach. However, it is pure pain to simply sit there and watch a large profit erode, just because the criteria to exit the trade takes many days to be met.
Three methods to take a profit on a Trend Following algorithm
Simple profit objective – take a profit at a multiple of market risk.
Trail a stop (% of ATR) after a profit level (% of ATR) is achieved.
Trail a stop (Donchian Channel) after a profit level (% of ATR) is achieved.
Use an input switch to determine which exit to incorporate
Inputs: initCapital(200000),rskAmt(.02), useMoneyManagement(False),exitLen(13), maxTradeLoss$(2500), // the following allows the user to pick // which exit to use // 1: pure profit objective // exit1ProfATRMult allows use to select // amount of profit in terms of ATR // 2: trailing stop 1 - the user can choose // the treshhold amount in terms of ATR // to be reached before trailing begins // 3: trailing stop 2 - the user can chose // the threshold amount in terms of ATR // to be reached before tailing begins whichExit(1), exit1ProfATRMult(3), exit2ThreshATRMult(2),exit2TrailATRMult(1), exit3ThreshATRMult(2),exit3ChanDays(5);
Exit switch and the parameters needed for each switch.
The switch determines which exit to use later in the code. Using inputs to allow the user to change via the interface also allows us to use an optimizer to search for the best combination of inputs. I used MultiCharts Portfolio Trader to optimize across a basket of 21 diverse markets. Here are the values I used for each exit switch.
MR = Market risk was defined as 2 X avgTrueRange(15).
Pure profit objective -Multiple from 2 to 10 in increments of 0.25. Take profit at entryPrice + or – Profit Multiple X MR
Trailing stop using MR – Profit Thresh Multiple from 2 to 4 in increments of 0.1. Trailing Stop Multiple from 1 to 4 in increments of 0.1.
Trailing stop using MR and Donchian Channel – Profit Thresh Multiple from 2 to 4 in increments of 0.1. Donchian length from 3 to 10 days.
//Reinvest profits? - uncomment the first line and comment out the second //workingCapital = Portfolio_Equity-Portfolio_OpenPositionProfit; workingCapital = initCapital;
if not(useMoneyManagement) then begin numContracts1 = 1; numContracts2 =1; end;
numContracts1 = maxList(numContracts1,intPortion(numContracts1)); {Round down to the nearest whole number} numContracts2 = MaxList(numContracts2,intPortion(numContracts1));
if c < buyLevel then buy numContracts1 contracts next bar at buyLevel stop; if c > shortLevel then Sellshort numContracts2 contracts next bar at shortLevel stop;
buytocover next bar at shortExit stop; Sell next bar at longExit stop;
vars: marketRiskPoints(0); marketRiskPoints = marketRisk/bigPointValue; if marketPosition = 1 then begin if whichExit = 1 then sell("Lxit-1") next bar at entryPrice + exit1ProfATRMult * marketRiskPoints limit; if whichExit = 2 then if maxcontractprofit > (exit2ThreshATRMult * marketRiskPoints ) * bigPointValue then sell("Lxit-2") next bar at entryPrice + maxContractProfit/bigPointValue - exit2TrailATRMult*marketRiskPoints stop; if whichExit = 3 then if maxcontractprofit > (exit3ThreshATRMult * marketRiskPoints ) * bigPointValue then sell("Lxit-3") next bar at lowest(l,exit3ChanDays) stop; end;
if marketPosition = -1 then begin if whichExit = 1 then buyToCover("Sxit-1") next bar at entryPrice - exit1ProfATRMult * marketRiskPoints limit; if whichExit = 2 then if maxcontractprofit > (exit2ThreshATRMult * marketRiskPoints ) * bigPointValue then buyToCover("Sxit-2") next bar at entryPrice - maxContractProfit/bigPointValue + exit2TrailATRMult*marketRiskPoints stop; if whichExit = 3 then if maxcontractprofit > (exit3ThreshATRMult * marketRiskPoints ) * bigPointValue then buyToCover("Sxit-3") next bar at highest(h,exit3ChanDays) stop; end;
setStopLoss(maxTradeLoss$);
Here’s the fun code from the complete listing.
vars: marketRiskPoints(0); marketRiskPoints = marketRisk/bigPointValue; if marketPosition = 1 then begin if whichExit = 1 then sell("Lxit-1") next bar at entryPrice + exit1ProfATRMult * marketRiskPoints limit; if whichExit = 2 then if maxContractProfit > (exit2ThreshATRMult * marketRiskPoints ) * bigPointValue then sell("Lxit-2") next bar at entryPrice + maxContractProfit/bigPointValue - exit2TrailATRMult*marketRiskPoints stop; if whichExit = 3 then if maxContractProfit > (exit3ThreshATRMult * marketRiskPoints ) * bigPointValue then sell("Lxit-3") next bar at lowest(l,exit3ChanDays) stop; end;
if marketPosition = -1 then begin if whichExit = 1 then buyToCover("Sxit-1") next bar at entryPrice - exit1ProfATRMult * marketRiskPoints limit; if whichExit = 2 then if maxContractProfit > (exit2ThreshATRMult * marketRiskPoints ) * bigPointValue then buyToCover("Sxit-2") next bar at entryPrice - maxContractProfit/bigPointValue + exit2TrailATRMult*marketRiskPoints stop; if whichExit = 3 then if maxContractProfit > (exit3ThreshATRMult * marketRiskPoints ) * bigPointValue then buyToCover("Sxit-3") next bar at highest(h,exit3ChanDays) stop; end;
The first exit is rather simple – just get out on a limit order at a nice profit level. The second and third exit mechanisms are a little more complicated. The key variable in the code is the maxContractProfit keyword. This value stores the highest level, from a long side perspective, reached during the life of the trade. If max profit exceeds the exit2ThreshATRMult, then trail the apex by exit2TrailATRMult. Let’s take a look at the math from a long side trade.
if maxContractProfit > (exit2ThreshATRMult * marketRiskPoints ) * bigPointValue
Since maxContractProfit is in dollar you must convert the exit2ThreshATRMult XmarketRiskPoints into dollars as well. If you review the full code listing you will see that I convert the dollar value, marketRisk, into points and store the value in marketRiskPoints. The conversion to dollars is accomplished by multiplying the product by bigPointValue.
sell("Lxit-2") next bar at
entryPrice + maxContractProfit / bigPointValue - exit2TrailATRMult * marketRiskPoints stop;
I know this looks complicated, so let’s break it down. Once I exceed a certain profit level, I calculate a trailing stop at the entryPrice plus the apex in price during the trade (maxContractProfit / bigPointValue) minus the exit2TrailATRMult X marketRiskPoints. If the price of the market keeps rising, so will the trailing stop. That last statement is not necessarily true, since the trailing stop is based on market volatility in terms of the ATR. If the market rises a slight amount, and the ATR increases more dramatically, then the trailing stop could actually move down. This might be what you want. Give the market more room in a noisier market. What could you do to ratchet this stop? Mind your dollars and your points in your calculations.
The third exit uses the same profit trigger, but simply installs an exit based on a shorter term Donchian channel. This is a trailing stop too, but it utilizes a chart point to help define the exit price.
Results of the three exits
Exit 1 – Pure Profit Objective
Take a profit on a limit order once profit reaches a multiple of market risk aka 2 X ATR(15).
The profit objective that proved to be the best was using a multiple of 7. A multiple of 10 basically negates the profit objective. With this system several profit objective multiples seemed to work.
Exit – 2 – Profit Threshold and Trailing Stop in terms of ATR or market risk
Trail a stop a multiple of ATR after a multiple of ATR in profit is reached.
3-D view of parameters
This strategy liked 3 multiples of ATR of profit before trailing and applying a multiple of 1.3 ATR as a stop.
Like I said in the video, watch out for 1.3 as you trailing amount multiple as it seems to be on a mountain ridge.
Exit – 3 – Profit Threshold in terms of ATR or market risk and a Donchain Channel trailing stop
Trail a stop using a Donchian Channel after a multiple of ATR in profit is reached. Here was a profit level is reached, incorporate a tailing stop at the lowest low or the highest high of N days back.
3-D view of parameters
Conclusion
The core strategy is just an 89-day Donchian Channel for entry and a 13-Day Donchian Channel for exit. The existing exit is a trailing exit and after I wrote this lengthy post, I started to think that a different strategy might be more appropriate. However, as you can see from the contour charts, using a trailing stop that is closer than a 13-day Donchian might be more productive. From this analysis you would be led to believe the ATR based profit and exit triggers (Exit #2) is superior. But this may not be the case for all strategies. I will leave this up to you to decide. Here is the benchmark performance analysis with just the core logic.
If you like this type of explanation and code, make sure you check at my latest book at amazon.com. Easing into EasyLanguage – Trend Following Edition.
Backtesting with [Trade Station,Python,AmiBroker, Excel]. Intended for informational and educational purposes only!
Get All Five Books in the Easing Into EasyLanguage Series - The Trend Following Edition is now Available!
Announcement – A Trend Following edition has been added to my Easing into EasyLanguage Series! This edition will be the fifth and final installment and will utilize concepts discussed in the Foundation editions. I will pay respect to the legends of Trend Following by replicating the essence of their algorithms. Learn about the most prominent form of algorithmic trading. But get geared up for it by reading the first four editions in the series now. Get your favorite QUANT the books they need!
This series includes five editions that covers the full spectrum of the EasyLanguage programming language. Fully compliant with TradeStation and mostly compliant with MultiCharts. Start out with the Foundation Edition. It is designed for the new user of EasyLanguage or for those you would like to have a refresher course. There are 13 tutorials ranging from creating Strategies to PaintBars. Learn how to create your own functions or apply stops and profit objectives. Ever wanted to know how to find an inside day that is also a Narrow Range 7 (NR7?) Now you can, and the best part is you get over 4 HOURS OF VIDEO INSTRUCTION – one for each tutorial.
This book is ideal for those who have completed the Foundation Edition or have some experience with EasyLanguage, especially if you’re ready to take your programming skills to the next level. The Hi-Res Edition is designed for programmers who want to build intraday trading systems, incorporating trade management techniques like profit targets and stop losses. This edition bridges the gap between daily and intraday bar programming, making it easier to handle challenges like tracking the sequence of high and low prices within the trading day. Plus, enjoy 5 hours of video instruction to guide you through each tutorial.
The Advanced Topics Edition delves into essential programming concepts within EasyLanguage, offering a focused approach to complex topics. This book covers arrays and fixed-length buffers, including methods for element management, extraction, and sorting. Explore finite state machines using the switch-case construct, text graphic manipulation to retrieve precise X and Y coordinates, and gain insights into seasonality with the Ruggiero/Barna Universal Seasonal and Sheldon Knight Seasonal methods. Additionally, learn to build EasyLanguage projects, integrate fundamental data like Commitment of Traders, and create multi-timeframe indicators for comprehensive analysis.
The Day Trading Edition complements the other books in the series, diving into the popular approach of day trading, where overnight risk is avoided (though daytime risk still applies!). Programming on high-resolution data, such as five- or one-minute bars, can be challenging, and this book provides guidance without claiming to be a “Holy Grail.” It’s not for ultra-high-frequency trading but rather for those interested in techniques like volatility-based breakouts, pyramiding, scaling out, and zone-based trading. Ideal for readers of the Foundation and Hi-Res editions or those with EasyLanguage experience, this book offers insights into algorithms that shaped the day trading industry.
For thirty-one years as the Director of Research at Futures Truth Magazine, I had the privilege of collaborating with renowned experts in technical analysis, including Fitschen, Stuckey, Ruggiero, Fox, and Waite. I gained invaluable insights as I watched their trend-following methods reach impressive peaks, face sharp declines, and ultimately rebound. From late 2014 to early 2020, I witnessed a dramatic downturn across the trend-following industry. Iconic systems like Aberration, CatScan, Andromeda, and Super Turtle—once thriving on robust trends of the 1990s through early 2010s—began to falter long before the pandemic. Since 2020 we have seen the familiar trends return. Get six hours of video instruction with this edition.
Pick up your copies today – e-Book or paperback format – at Amazon.com