Don’t forget to periodically delete the Cache folder inside TS 9.x. Remember this is inside C:\Program Files\TradeStation 9.1\Program…
Volatility Break Out Day Trader
Here is a nice template to use when testing a volatility break out system to daytade. Note I haven’t yet finished the filter coding.
{OPEN RANGE BREAK OUT with Trade Management} {:data1 = 5 minbars :data2 = daily bars} inputs: atrLookBack(10),brkOutAmt(.20),initProtStop$(500),profitThresh$(300),percentTrail(0.3),waitNumBars(3),endTradeEntryTime(1430); inputs: tradeFilterNum(1); {tradeFilterNum indicates how you want to filter the trades: filter #1 : prior day was a narrow range filter #2 : prior day was a NR4 filter #3 : buy/sell day only base on today's open filter #4 : combo of filter #1 and filter #3 filter #5 : combo of filter #2 and filter #3 } vars: buysToday(0),sellsToday(0),atrVal(0),todaysOpen(0),canBuy(false),canSell(false); vars: trailLong(false),trailShort(false),trailLongStop(0),trailShortStop(999999); vars: myBuysToday(0),mySellsToday(0); if tradeFilterNum = 1 then begin canBuy = false; canSell = false; if range of data2 < avgTrueRange(atrLookBack) of data2 and time < endTradeEntryTime then begin canBuy = true; canSell = true; end; end; if date <> date[1] then begin todaysOpen = open; {Capture Today's Open} trailLongStop = 0; trailShortStop = 9999999; myBuysToday = 0; mySellsToday = 0; end; if marketPosition = 1 then myBuysToday = 1; if marketPosition = -1 then mySellsToday = -1; atrVal = avgTrueRange(atrLookBack) of data2; if canBuy and myBuysToday = 0 and marketPosition <> 1 then buy("BBO") next bar at todaysOpen + atrVal * brkOutAmt stop; if canSell and mySellsToday = 0 and marketPosition <>-1 then sellshort("SBO") next bar at todaysOpen - atrVal *brkOutAmt stop; if marketPosition <> 1 then trailLong = false; if marketPosition <> -1 then trailShort = false; if marketPosition = 1 then begin sell("LongExit") next bar at entryPrice - initProtStop$/bigPointValue stop; if h > entryPrice + profitThresh$/bigPointValue then trailLong = true; if trailLong then begin trailLongStop = maxList(trailLongStop,h - (h - entryPrice)*percentTrail); sell("LongTrail") next bar at trailLongStop stop; end; end; if marketPosition = -1 then begin buyToCover("ShrtExit") next bar at entryPrice + initProtStop$/bigPointValue stop; if l < entryPrice - profitThresh$/bigPointValue then trailShort = true; if trailShort then begin trailShortStop = minList(trailShortStop,l + (entryPrice - l)*percentTrail); buyToCover("ShortTrail") next bar at trailShortStop stop; end; end; setExitOnClose;
{finished}
Zone Analysis System
I posted some research on zone analysis at www.futurestruth/wordpress.com. Based on this research I created a very simple system framework. Here is some trade examples and performance results for the past four years.
//Zone Program by George Pruitt// Buy when market opens in zone 1 and dips into zone 3 // Sell when market opens in zone 4 and rises into zone 2 vars: myZone1B(0),myZone2T(0),myZone2B(0),myZone3T(0),myZone3B(0),myzone4T(0); vars:oz1cz1(0),oz1cz2(0),oz1cz3(0),oz1cz4(0); vars:oz2cz1(0),oz2cz2(0),oz2cz3(0),oz2cz4(0); vars:oz3cz1(0),oz3cz2(0),oz3cz3(0),oz3cz4(0); vars:oz4cz1(0),oz4cz2(0),oz4cz3(0),oz4cz4(0); vars:myBarCount(0),buysToday(0),sellsToday(0); inputs: profitAmt$(1000),riskAmt$(500),stopEntryTime(1300); if date <> date[1] then begin buysToday = 0; sellsToday = 0; myBarCount = 1; end; if(marketPosition = 1) then buysToday = 1; if(marketPosition =-1) then sellsToday = 1; if date<> date[1] then myBarCount = myBarCount + 1; myZone1B = highD(1) + minMove/PriceScale; myZone2T = highD(1); myZone2B = (highD(1) + lowD(1))/2 + minMove/PriceScale; myZone3T = (highD(1) + lowD(1))/2; myZone3B = lowD(1); myZone4T = lowD(1) - minMove/PriceScale; //if openD(0) > myZone1B and low > myZone1B and myBarCount > 1 and sellsToday = 0 and time <> Sess1endtime then sellshort next bar at low stop; //if openD(0) < myZone4T and high < myZone4T and myBarCount > 1 and buysToday = 0 and time <> Sess1endtime then buy next bar at high stop; if openD(0) > myZone1B and low < myZone2B and myBarCount > 1 and buysToday = 0 and time < stopEntryTime then buy next bar at low limit; if openD(0) < myZone4T and high > myZone3T and myBarCount > 1 and sellsToday = 0 and time < stopEntryTime then sellshort next bar at high limit; myBarCount = myBarCount + 1; //print(date," ",time," ",buysToday," ",openD(0) > myZone1B and low > myZone1B and myBarCount > 1 and buysToday = 0); setProfitTarget(profitAmt$); setStopLoss(riskAmt$); setExitOnClose;
Check out Futures Truth Blog
Futures Truth has started a new blog. Check it out at www.futurestruth.wordpress.com.
Download Link From John Wiley for BWSwTS 2nd Ed. Source Code
I have had a few emails stating the link in the book wasn’t working correctly so here is the one I use and it seems to work fine. Please let me know if you have any problems. The password is in the back of the book.
http://www.wiley.com/WileyCDA/Section/id-813170.html
King Keltner Source Code
Looking for a trend follower – give this one a try!
[LegacyColorValue = true]; {King Keltner Program King Keltner by George Pruitt -- based on trading system presented by Chester Keltner -- an example of a simple, robust and effective strategy} Inputs: avgLength(40),atrLength(40); Vars: upBand(0),dnBand(0),liquidPoint(0),movAvgVal(0); movAvgVal = Average((High + Low + Close)/3.0,avgLength); upBand = movAvgVal + AvgTrueRange(atrLength); dnBand = movAvgVal - AvgTrueRange(atrLength); {Remember buy stops are above the market and sell stops are below the market -- if the market gaps above the buy stop, then the order turns into a market order vice versa for the sell stop} if(movAvgVal > movAvgVal[1]) then Buy ("KKBuy") tomorrow at upBand stop; if(movAvgVal < movAvgVal[1]) then Sell("KKSell")tomorrow at dnBand stop; liquidPoint = movAvgVal; if(MarketPosition = 1) then Sell tomorrow at liquidPoint stop; if(MarketPosition =-1) then BuyTocover tomorrow at liquidPoint stop;
Pyramaniac
Code to pyramid up to N contracts on a day trade basis.
input: maxSize(5),startTime(1000),endTime(1555); var: stb(0),sts(0),tpAmt(0),lprft(0),sprft(0); stb = High + minMove/priceScale; sts = Low - minMove/priceScale; print(date," ",time," ",stb," ",sts," ",currentShares); if (time > startTime and time < endTime ) then begin tpAmt = average(range,10); if(high>high[1]) then lprft = highD(0)+1*tpAmt; if(low < low[1]) then sprft = lowD(0) -1*tpAmt; if(currentShares < maxSize and c < average(c,9) and low < low[1] and close < close[1]) then buy("pyrabuy")next bar at sts limit; if(currentShares < maxSize and c < average(c,9) and high >high[1] and close > close[1]) then sellShort("pyrasell") next bar at stb limit; end; //if(currentShares >= maxSize and marketPosition = 1) then sell("longmaxliq") next bar sts stop; //if(currentShares >= maxSize and marketPosition =-1) then buyToCover("shortmaxliq") next bar stb stop; if(marketPosition = 1) then sell("longProf") next bar lprft limit; if(marketPosition =-1) then buytoCover("shortProf") next bar at sprft limit; setexitonclose;
Final Version of Geo’s Turtle with Virtual Trading
Final version posted below. A little advanced but if you can follow and make sense of it then you are well along on becoming an EasyLanguage programmer.
inputs: absEntryChanLen(55),entryChanlen(20),exitChanLen(10), lastTradeLoserFilter(false),accountSize(100000),riskPerTradePer(.01); vars:lastTradeLoser(true),mp(0),virtmp(0),tradeProfit(0), virtBuyPrice(0),virtSellPrice(0), virtLongLiqPrice(0),virtShortLiqPrice(0), virtLongLoss(0),virtShortLoss(0), myFillPrice(0),N(0),N$(0),dollarRisk(0),lotSize(0), stopLoss(0),buyPrice(0),sellPrice(0), hh20(0),hh55(0),ll20(0),ll55(0),iCnt(0),initPrice(0),stopLossPts(0),debug(false); mp = marketPosition; if mp = 0 then begin N = AvgTrueRange(20); N$ = N*BigPointValue; dollarRisk = AccountSize * riskPerTradePer; lotSize = IntPortion(DollarRisk/N$); if lotSize < 1 then lotSize = 1; StopLoss = 2 * N$ * lotSize; StopLossPts = 2 * N * lotSize; hh20 = highest(high,entryChanLen); hh55 = highest(high,absEntryChanLen); ll20 = lowest(low,entryChanLen); ll55 = lowest(low,absEntryChanLen); end; If mp <> 1 and mp[1] = 1 then Begin tradeProfit = ExitPrice(1) - EntryPrice(1); lastTradeLoser = true; If tradeProfit > 0 then lastTradeLoser = false; if debug then print(date," Long Trader ",tradeProfit*bigPointValue," ",lastTradeLoser, " ExitPrice ",ExitPrice(1):6:6," entryPrice ",entryPrice(1):6:6); end; If mp <> -1 and mp[1] = -1 then Begin tradeProfit = EntryPrice(1) - ExitPrice(1); lastTradeLoser = true; If tradeProfit > 0 then lastTradeLoser = false; if debug then print(date," **** Short Trader ",tradeProfit*bigPointValue," ",lastTradeLoser, " mp ",mp," ",mp[1]); end; If lastTradeLoserFilter = False then lastTradeLoser = True; If lastTradeLoser = False then Begin if debug then print(date," In Virtual Section And VirtTmp = ",virTmp); If(virtmp = 1) then Begin virtLongLiqPrice = maxList(lowest(low[1],exitChanLen),virtLongLoss); if(virtualLongExit(virtLongLiqPrice,1,myFillPrice) =1) then Begin tradeProfit = myFillPrice - virtBuyPrice; If tradeProfit < 0 then lastTradeLoser = true; virtmp = 0; if debug then print(" Long Exit @ ",myFillPrice); end; end; If(virtmp = -1) then Begin virtShortLiqPrice = minList(highest(high[1],exitChanLen),virtShortLoss); if(virtualShortExit(highest(high[1],exitChanLen),1,myFillPrice) =1) then Begin tradeProfit = virtSellPrice - myFillPrice; If tradeProfit < 0 then lastTradeLoser = true; virtmp = 0; if debug then print(" ShortExit @ ",myFillPrice); end; end; if(virtualBuy(highest(high[1],entryChanLen),1,myFillPrice) = 1) then Begin if virtmp <> 1 then begin virtBuyPrice = myFillPrice; virtLongLoss = myFillPrice - 2*N; virtmp = 1; tradeProfit = 0; If virtmp[1] = -1 then tradeProfit = virtSellPrice - virtBuyPrice; If tradeProfit < 0 then lastTradeLoser = true; if debug then print(" Long @ ",myFillPrice); end; end; if(virtualSell(lowest(low[1],entryChanLen),1,myFillPrice) = 1) then Begin if virtmp <> -1 then begin virtsellPrice = myFillPrice; virtShortLoss = myFillPrice + 2*N; virtmp = -1; tradeProfit = 0; If virtmp[1] = 1 then tradeProfit = virtBuyPrice - virtSellPrice; If tradeProfit < 0 then lastTradeLoser = true; if debug then print(" Short @ ",myFillPrice); end; end; if debug then print("End of Virtual Module : virTmp = ",virTmp); end; for iCnt = 0 to 3 begin if lastTradeLoser then begin if mp <> -1 and currentContracts = iCnt * lotSize then begin buyPrice = hh20 + iCnt * N/2; end; if mp <> 1 and currentContracts = iCnt * lotSize then begin sellPrice = ll20 - iCnt * N/2; end; virTmp = 0; end; if lastTradeLoser = false then begin if mp <> -1 and currentContracts = iCnt * lotSize then begin buyPrice = hh55 + iCnt * N/2; end; if mp <> 1 and currentContracts = iCnt * lotSize then begin sellPrice = ll55 - iCnt * N/2; end; // virTmp = 0; end; end; if lastTradeLoser then begin if currentContracts < 4 * lotsize then Buy ("Turtle20Buy") lotSize contracts next bar at buyPrice stop; if currentContracts < 4 * lotsize then Sellshort ("Turtle20Sell") lotsize contracts next bar at sellPrice stop; if currentContracts < 4 * lotsize and debug then print(date," 20sellPrice ",sellPrice:6:6," ",currentContracts); end; if lastTradeLoser = false then begin if currentContracts < 4 * lotsize then Buy ("Turtle55Buy") lotSize contracts next bar at buyPrice stop; if currentContracts < 4 * lotsize then Sellshort ("Turtle55Sell") lotsize contracts next bar at sellPrice stop; if debug then print(date," ",iCnt," 55sellPrice ",sellPrice:6:6); end; If mp = 1 then Sell ("TurtleLExit") next bar at lowest(low,exitChanLen) stop; If mp = -1 then BuyToCover("TurtleSExit") next bar at highest(high,exitChanLen) stop; If mp = 1 then Sell ("TurtleLExit2N") next bar at entryPrice - stopLossPts stop; If mp = -1 then BuyToCover("TurtleSExit2N") next bar at entryPrice + stopLossPts stop;
Developing Winning Trading Systems…. being translated into Chinese in 2014
Just got word the 2nd edition is being published in Chinese.
One System From The Book
Just wanted to bring one of the systems that I developed for the book to everybody’s attention. This is a simple system that puts on two contracts and peels one off after a certain profit and then lets the other one ride. Its a mini-Russell system. Full code is disclosed in the book – source code can be imported into other applications. The object of this code is to demonstrate multiple contracts and money management techniques. Remember –