Being a member of "Halloween Sale" does not mean that the item is always on sale. The "rule trigger" should also take into account the date. Example:
HALLOWEEN = 18 // See example tables above
if memberOf(item,HALLOWEEN) and month(today()) = "October" then
item.price = item.price * 0.9
end if
http://www.geocities.com/tablizer/sets1.htm