@ will check the condition each 0.5 seconds, just like a trigger does. If you don't need it checked that fast, go with the loop and add a delay in it.
The straight forward answer to your question would be
@ mycondition
myConsequence
This is processed every 0.5 seconds.
#loop
? mycondition: goto "here"
goto "loop"
This is processed as fast as your computer can and needs (and uses) as much resources from your computer as it gets. Terrible.
#loop
? mycondition: goto "here"
~1
goto "loop"
This would be the best way when you think about saving your computer resources. It's looped every 1 seconds, so it's even better than the @ statement.. if it suits your needs.
Oh and it makes no difference wether your checking multiple variables or not. The @ statement isn't suitable for as many things as a loop is, but you can check multiple variables and conditions with the @.
@!(alive (leader mygroup)) || myunit distance enemyunit > 300 && myvariable