Based on this: Counting instances at position
I made this script:
ret = argument3;
show_debug_message(instance_place(argument0 /*x*/, argument1/*y*/,argument2 /*obj*/))
with(instance_place(argument0 /*x*/, argument1/*y*/,argument2 /*obj*/))
ret = CountColliding(argument0,argument1,argument2,ret+1) ;
y are your objects in question x and y and
obj is the object to check collision with.
But I didn't like it very much so I made this one which I suppose it may be less error prone:
for (i = 0; i < instance_number(argument); i += 1)
Which you use in your objects scope just bu passing as an argument the object that you want to check collision with.
Both return the number of colliding objects and both seem to work just fine but I don't know which one is more efficient performance wise.
Also I suppose you shouldn't use them in every step.