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;
Discover more from George Pruitt
Subscribe to get the latest posts sent to your email.