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;