Hey Erin,
I would use the "Opportunity Was Updated" / "Added to Opportunity" triggers combined with wait steps.
The idea being that you have a listener campaign that resets the clock each time a status changes and a wait campaign that will send the alert if nothing happens. This will form an iterative loop. I would cap it off with a campaign that removes them completely once the opportunity is Closed Won/Lost.
E.g.,
Listener Campaign
SMART LIST
Added to Opportunity
Opportunity Was Updated - Stage (new value is not Closed Won/Lost)
FLOW
Remove from flow [Wait Campaign]
Request Wait Campaign
Wait Campaign
SMART LIST
Campaign is Requested
FLOW
Wait [your max # of days]
Send Alert
Closed Campaign
SMART LIST
Opportunity is Updated - Stage is Closed Won or Closed Lost
FLOW
Remove from Flow [Wait Campaign]
This will work well unless there are multiple open opportunities at a time. Marketo won't be able to distinguish them. You could also try doing this via a Process or Workflow Rule in SFDC, which may make it easier to work with multiple open opportunities.