here's a solution using vex
i@id = @ptnum;
float speed = chf('speed');
float rand = rand(@id) * PI;
float randintensity = chf('randintensity');
rand = lerp(1, rand, randintensity);
rand = sin(@Time * speed + rand);
rand = fit11(rand, 0, 1);
rand = chramp('falloff', rand);
vector colorramp = chramp('colorramp', rand);
@Cd = colorramp;
if your particles are coming from POP, just use the existing id attribute. instead of the random function, you could also use a noised attribute that you created with an attribute noise sop (float)
i like this setup because you can gradually introduce randomness and using the falloff ramp create even more complex blinking patterns. make sure to change the colorramp from float to rgb in the "edit parameter interface" menu