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;

Discover more from George Pruitt

Subscribe to get the latest posts sent to your email.

Leave a Reply