I've simplified the strategy so I can publish the script below. I made a few changes already and seems the TMF works better now. However, the TrailLock function remains a mystery to me - it simply doesnt execute at (in my case) 90% of the max profit of a trade. Do you have any advice for that too?

// ============== TRADER SCRIPT UPL, simplified for bug fixing ==============

int TMFLong()
{
Stop = priceLow(1)-Spread;
Trail = 2.9*ATR(1);

bool Cond_LongStop = priceHigh(0)<=priceHigh(1)<=priceHigh(2);

if(TradeResult>Trail) TrailLock = 90;

if(Cond_LongStop and TradeResult>Trail){
// exitLong();
return 1;
}

return 0;
}

int TMFShort()
{
Stop = priceHigh(1)+Spread;
Trail = 2.9*ATR(1);

bool Cond_ShortStop = priceLow(0)>=priceLow(1)>=priceLow(2);

if(TradeResult>Trail) TrailLock = 90;

if(Cond_ShortStop and TradeResult>Trail){
// exitShort();
return 1;
}

return 0;
}


// ============== DEFINE GLOBAL VARIABLES ==============

static bool initRun = true;
static int startHour = 8; // 8 is standard
static int endHour = 22; // 22 is standard

static string autoTradesCSV = "C:\\PROJECTS AND COMPANIES\\Project Watchdog\\results\\autoTrades.csv";

set(TICKS);

function run()
{

// ============== DEFINE LOCAL VARIABLES FOR EACH ITERATION ==============

char output[400];
var currEMA,valSRoC,stochDVal,deltaD0,CBand;
bool isLookBackPeriod,noConsolidation,withinVolatility, canTrade,closingHour;
double val;

var* Prices = series(price());
val = Prices[0];


//=================TRADING PARAMETERS ==============

BarPeriod = 2;
BarOffset = 0;

StartDate = 20130730;
EndDate = 20130731;

StartWeek = 10600; // start Monday 6 am
EndWeek = 52200; // end Friday 10 pm
Weekend = 3; // log off during the weekend


// ============== DEFINE STATIC VARIABLES ==============

static bool SRoC_Short_Prev = false;
static bool SRoC_Long_Prev = false;


// ============== INDICATORS ==============

// ============== SRoC ==============

currEMA = EMA(Prices,13);
var* EMAVals = series(currEMA);
valSRoC = (EMAVals[0]- EMAVals[21])*100/EMAVals[21];
var* SRoC = series(valSRoC);


// ============== INDICATOR ANALYSIS ==============

// ============== SRoC Analysis ==============

var DELTASROC_THRESH = 0.00;

var deltaSRoC_Curr = SRoC[0]-SRoC[1];

bool SRoC_Cond_Long = deltaSRoC_Curr>DELTASROC_THRESH;
bool SRoC_Cond_Short = deltaSRoC_Curr<-DELTASROC_THRESH;


// ============== SET TRADING HOURS ==============

isLookBackPeriod = (year()*10000+month()*100+day()<StartDate);

canTrade = workday and lhour(CET,0)>=startHour and lhour(CET,0)<endHour and !(isLookBackPeriod);

bool Cond_LongEntry = priceHigh(0)<priceHigh(1);
bool Cond_ShortEntry = priceLow(0)>priceLow(1);


// ============== PLOT LONG SHORT DOTS AND CALCULATE LONG / SHORT POSITIONS ==============

EntryTime = 1;

if(Cond_LongEntry and canTrade and SRoC_Cond_Long and NumOpenLong==0 and NumPendingLong==0){

Entry = priceHigh(0)+Spread;
enterLong(TMFLong);
}

if(Cond_ShortEntry and canTrade and SRoC_Cond_Short and NumOpenShort==0 and NumPendingShort==0){

Entry = priceLow(0)-Spread;
enterShort(TMFShort);
}


// ============== CLOSE ALL POSITIONS AT END OF THE DAY AND OUTPUT P&L ==============

closingHour = lhour(CET,0)==endHour-1 and minute()==60-2*BarPeriod and (!isLookBackPeriod);

if(closingHour){
closingHour = false;

exitLong();
exitShort();

sound("optimize.wav");
}
}C:\\PROJECTS AND COMPANIES\\Project Watchdog\\results\\autoTrades.csv

Attached Files
Capture.jpg (9 downloads)
Here are 2 examples where TrailLock = 90 obviously doesn't execute at 90% of intra-bar profit...
Last edited by UPL; 12/23/13 10:30.