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!
Take Advantage of George's Black Friday Special until Christmas
George Pruitt’s Easing into EasyLangauge – Academy
A video-based approach to teaching EasyLanguage. Learn at your own pace.
Module #1
and Pattern Smasher 2024 too!
From the creator of the bestselling Easing into EasyLanguage series comes his latest project – Easing into EasyLanguage Academy. In this introductory course, George shows you to program a George Taylor Technique into a day trading system. You will start with a blank slate and learn everything you need to take advantage of Taylor’s Buy and Short – day techniques. Give the gift the keeps on giving – knowledge.
Can You Program This Trading Strategy?
Imagine this: On a buy day, you want to:
Enter: Place a buy order for tomorrow if the market:
Trades a certain amount below today’s low, and
Then travels back up to today’s low.
Protect: Use a protective stop at tomorrow’s low (before the buy stop is triggered).
Risk Manage: If the entry and exit levels are too large, limit your risk to a predefined amount.
Profit Secure: When a specific profit level is reached, implement a ratcheting trailing stop to lock in a percentage of the maximum open trade equity.
Time Manage: If still in the trade at a specific time of day, exit the position.
PURCHASE NOW AND GET PATTERN SMASHER 2024 FOR FREE!
Learn how to do this and then pick intelligent and robust paremeter sets.s
Get the Pattern Smasher Cheat Code to create this strategy. This is a 4 Pattern relationship based on the last three day’s closing relationships. You can learn more at George’s Digital Store.