This code seems to work, but it's not perfect - it looks too complicated. In programming, simpler and shorter is always better. I see no reason in your code for a "crossed" variable.

Code:
int Delay = 3;
if(crossOver(LP5,LP10))
  SkillLong[0] = Delay;
else if(crossUnder(LP5,LP10))
  SkillLong[0] = -Delay;

if(SkillLong[0] > 0 && crossOver(RSI10,50))) {
  enterLong();
  SkillLong[0] = 0;
} else if(SkillLong[0] < 0 && crossUnder(RSI10,50))) {
  enterShort();
  SkillLong[0] = 0;
} else
  SkillLong[0] -= sign(SkillLong[0]);



Here's an easier method without any SkillLong:

Code:
var *Signals = series(0);
if(crossOver(LP5,LP10))
  *Signals = 1;
else if(crossUnder(LP5,LP10))
  *Signals = -1;

if(Sum(Signals,3) > 0 && crossOver(RSI10,50)))
  enterLong();
else if(Sum(Signals,3) < 0 && crossUnder(RSI10,50)))
  enterShort();



This method to check if some signal happened within the last 3 bars is explained in Workshop 4:

http://zorro-trader.com/manual/en/tutorial_trade.htm