我想知道状态机是否适合这种情况。
假设我有以下触发器:
enum Trigger
{
None,
RSIGt70,
RSILt30,
TrendUp,
TrendDown
}
我有以下状态
enum State
{
Flat,
ShortUnit1,
ShortUnit2,
LongUnit1,
LongUnit2
}
var position= new StateMachine<State, Trigger>(State.Flat);
position.Configure(State.Flat)
.Permit(Trigger.RSIGt70, State.Flat);
.Permit(Trigger.TrendingUp, State.Flat);
.Permit(Trigger.RSIGt70, State.ShortUnit1);
.Permit(Trigger.TrendingUp, State.ShortUnit1);
我试图摆脱 if 语句并用状态机替换交易逻辑。不确定它是否有效,因为它可能是从一种状态转换到另一种状态的触发器的汇合。问题是,状态机如何处理这种情况?他们足够富有还是我必须使用标准的图灵机,即if
有记忆的语句?
问题是两个以上(在这种情况下)条件必须为真,才能从平仓过渡到多头或空头头寸之一。
所以我要说的是,例如,如果 RSI > 70和TrendingUp,则转换为空头头寸。或者,如果 TrendingUp和RSI > 70,则转换为空头头寸。因为这两个条件发生的顺序无关紧要。对于其他可能的情况,反之亦然。但如果只有一个条件为真,则不会触发任何仓位。但是如果我处于一个状态,我怎么知道我是来自None
哪个不触发位置,还是来自其他触发位置的条件?
如果系统变得更复杂,我会尽量避免容易出错的 if/else 语句。不确定这是否可以使用 FSM 处理,因为它取决于当前状态如何随着时间的推移而形成的历史。