Thanks jcl, i undesrtand you. Time is glod, and your i guess is more gold than mine. Happy you have the "script fixing service". By the way congratulations on your Zorro Project, i am near tu buy it

After serveral days working on it + AI aid, i attach the working system, just in case it helps others, notice system is only for testings purpose, i am sure it is overfitted

// Weekly entry/exit test - QQQ daily bars - trainable
//
// Parameters (all describe the ACTUAL fill moment, not the signal day):
// EntryDay / ExitDay : 1=Mon .. 5=Fri, 0 = every day
// EntryOpen / ExitOpen : 0 = fill at the CLOSE of that day
// 1 = fill at the OPEN of that day
//
// How it is done (run() executes at the close of each bar):
// fill at CLOSE of day D -> signal on D, Fill = 1
// fill at OPEN of day D -> signal on previous day, Fill = 3
//
// Same-bar ordering: close-fills happen before open-fills.
// - entry at close + exit at next open (overnight): entry first, then exit
// - everything else: exit first, then entry

int EntryDay, EntryOpen, ExitDay, ExitOpen;
TRADE* Cur = 0; // the one trade we manage

int prevDay(int d) // Mon -> Fri, otherwise d-1
{
if(d <= 1) return 5;
return d - 1;
}

void doExit()
{
if(!Cur) return;
if(ExitOpen) Fill = 3; else Fill = 1;
exitTrade(Cur);
Cur = 0;
}

void doEntry()
{
if(Cur) return;
if(EntryOpen) Fill = 3; else Fill = 1;
Cur = enterLong();
}

function run()
{
set(LOGFILE, PARAMETERS);
BarPeriod = 1440;
LookBack = 0;

StartDate = 20160101;
EndDate = 20171231;

asset("QQQ");
Spread = 0; Slippage = 0; Commission = 0;
RollLong = 0; RollShort = 0;

if(is(INITRUN)) Cur = 0; // never keep a stale pointer between runs

// optimize(Start, Min, Max, Step) - same calls, same order, every bar
// Start values = your earlier test: buy Tue open, sell next Mon close
EntryDay = (int)round(optimize("EntryDay",2, 0, 5, 1),1);
EntryOpen = (int)round(optimize("EntryOpen",1, 0, 1, 1),1);
ExitDay = (int)round(optimize("ExitDay",1, 0, 5, 1),1);
ExitOpen = (int)round(optimize("ExitOpen",1, 0, 1, 1),1);

int d = dow(0);
int eSig = EntryDay;
if(EntryOpen) eSig = prevDay(EntryDay); //So, if true (1) enter at open
int xSig = ExitDay;
if(ExitOpen) xSig = prevDay(ExitDay); //So, if true (1) enter at open
int doE = (EntryDay == 0) || (d == eSig);
int doX = (ExitDay == 0) || (d == xSig);

if(!EntryOpen && ExitOpen) { // close -> open (overnight)
if(doE) doEntry();
if(doX) doExit();
} else {
if(doX) doExit();
if(doE) doEntry();
}


//PlotBars
set(LOGFILE,PLOTNOW);
plot("EntryDay", EntryDay,NEW,BLUE);
plot("ExitDay", ExitDay,0,RED);
}