Have been working on a trailing stop code to lock the profits but hv not been able get the desired resuts, below is the code I have written, pls identify my mistake.
The problem is that TSL is giving 0 value and TSLLDIFFARR is giving {Empty} value.
TSLMLong = Param("Initial Long SL %", 3.0,4,15,0.50);//12, 12.50
TSLMShort = Param("Initial Short SL %", 3.0, 6, 13,0.50);//9.0, 9.50
TSLLDIFF = Param("Trailing SL Long % Diff", 10,10,80,5);//85,90,100
TSLSDIFF = Param("Trailing SL Short % Diff", 10,10,80,5);//75,80,85,90,95,100
BuyFlag = ShortFlag= 0;
TSL=TSLS=0;
TSLLDIFFARR = TSLSDIFFARR = Null;
TSLSDIFFARR = 100000;
for(i=0; i<BarCount; i++)
{
if(buy0[i] AND BuyFlag ==0 )
{
Buy[i] = 1;
BuyFlag = 1;
HHVSinceBuy = Null;
HHVSinceBuy = HighestSince(Buy, H, 1);
TSL = (HHVSinceBuy[i] - (((HHVSinceBuy[i] - BuyPrice[i]) * TSLLDIFF)/100));
if(Buy0[i]) BuyPrice[i]= Open[i];
printf(" HHVSinceBuy = "+ HHVSinceBuy );
printf(" TSL = "+ TSL );
printf(" BuyPrice = "+ BuyPrice[i] );
}
if(Buyflag AND (HHVSinceBuy[i] > (BuyPrice[i] + (BuyPrice [i] * TSLMLong / 100))))
{
TSLLDIFFARR[i] = Max(TSLLDIFFARR[i-1], (HHVSinceBuy[i] - (((HHVSinceBuy[i] - BuyPrice[i]) * TSLLDIFF)/100)));
printf(" TSLLDIFFARR = "+ TSLLDIFFARR[i]);
}
if((Sell0[i] OR L[i]<TSLLDIFFARR[i] )
AND buyFlag ==1)
{
Sell[i]=1;
BuyFlag=0;
if(sell0[i]) SellPrice[i] = Open[i];
else if (L[i]<TSLLDIFFARR[i]) SellPrice[i] = TSLLDIFFARR[i];
}
if(short0[i] AND ShortFlag ==0 )
{
Short[i] = 1;
ShortFlag = 1;
LLVSinceShort = LowestSince(Short[i], L, 1);
if(Short0[i]) ShortPrice[i]= Open[i];
TSLS = (LLVSinceShort[i] + (((ShortPrice[i] - LLVSinceShort[i]) * TSLSDIFF)/100));
}
if(ShortFlag AND (LLVSinceShort[i] < (ShortPrice[i] - (ShortPrice[i] * TSLMShort /100))))
{
TSLSDIFFARR[i] = Min(TSLSDIFFARR[i-1], (LLVSinceShort[i] + (((ShortPrice[i] - LLVSinceShort[i]) * TSLSDIFF)/100)));
}
if ((Cover0[i] OR H[i] >TSLSDIFFARR[i] )
AND ShortFlag == 1)
{
Cover [i] =1;
ShortFlag = 0;
if(Cover0[i]) CoverPrice[i] = Open[i];
else if (H[i] > TSLSDIFFARR[i]) (CoverPrice[i] = TSLSDIFFARR[i]);
}
}