一、SetStop调试
1、SetStop是止损指标,由OpenQuant自身维护,相当于告诉OpenQuant我应该在什么价位或者什么时间止损,
不需要写代码判断,并没有挂单,而是达到触发指标时,直接触发在onStopExcuted中的动作。
而BuyStop和SellStop则是直接报限价单到交易所,由交易所维护,触发时,由交易所自动转为市价单成交。
2、 使用SetStop必须要有持仓,若在PositionChanged中SetStop,则不同的单有不同的止损价。
3、 SetStop需要正确使用,他也许会在持续的上涨行情中触发。(若要避免,TraceOnBar = false即可。必然tick已经到了高位,但最终current位又回到低位)。
当TraceOnBar = true时,fcurrPrice = Bar.Low(在OnBar中不断更新,即一个bar走完后。OnBarOpen中不作更新),
而止损价却是fstopPrice = Bars.Highest - L(即,自下单之日起,一段时间内的最高价为base),因此在一个急拉行情中,即大阳线中多单也许会被止损。
4、当TraceOnBar, TraceOnQuote, TraceOnTrade均为true时,每个tick均会更新fcurrPrice,但只要OnBar一触发,则立即更新到bar.Low。
5、 SetSopt的止损价总是按照当前行情来更新,而非入场价。
调试总结: SetStop的trailing Type是始终在追踪最高价位,在最高价位下浮多少点时止损。属于单边趋势上涨行情时,巩固当前部分盈利,追求更大盈利的利器。
二、订单管理
1、Order被创建时,状态为IsPendingNew
2、在回溯中,当Order被Send将依次调用:(因为回溯中Send后就自动成交)
开仓市价单:OnNewOrder -> OnOrderStatusChanged -> OnOrderStatusChanged -> OnPositionOpened
-> OnPositionChanged -> OnOrderFilled -> OnOrderDone.
(此处2次调用OnOrderStatusChanged是因为每一笔entryBuy随之都会有止损和止盈两单)
(此时状态为IsDone, IsFilled,即在回溯中的OnBar下单,Order立即成交,而非实盘中的在第二天第一个 trade到来时下单成交)
普通市价单:OnNewOrder -> OnOrderStatusChanged -> OnOrderStatusChanged
-> OnPositionChanged -> OnOrderFilled -> OnOrderDone.
普通限价单:OnNewOrder -> OnOrderStatusChanged
(普通限价单在Send后,只要还未达到目标较为没有转为市价单,状态为IsNew。
当普通限价单转为市价单触发后,首先调用OnOrderStatusChanged -> OnPositionChanged)
3、OCA取消订单:
OCA的cancel模式,顾名思义,One Cancel All,当某一个限价单fill掉后,openquant会自动cancel屌具有相同OCAGroup的限价单,(OnOrderStatusChanged -> OnOrderCancelled)* N:N表示具有相同OCAGroup属性的限价单。
4、SetStop订单管理:
因为每一单都应当有止盈+止损(止盈可以是目标价格止盈,也可以是追踪止损)
若是限价单止盈或止损,每一单(打到止盈或止损出场)成交后,另一具有相同OCAGroup的限价单将自动Cancel。
若是追踪止损,则在触发止损条件后调用OnStopExecuted,动作写在里面,若采用市价成交,无需cancel。
<转自论坛:
在OpenQuant中,Order的状态(Status)共有10种(参考API文档),分别为PendingNew(0),New(1),PartiallyFille(2),Filled(3),PendingCancel(4),Cancelled(5),Expired(6), PendingReplace(7), Replaced(8), Rejected(9)。无论何种交易情况,都从PendingNew状态开始,最终Order结束时都会触发OnOrderDone事件。
由命名规律,PendingNew,PendingCancel,PendingReplace的状态之后都会有2种可能,成功或Rejected。由此触发事件分别为OnNewOrder,OnOrderCancelled,OnOrderReplaced或OnOrderRejected,OnOrderCancelRejected,OnOrderReplaceRejected。
交易所同意报单之后,在交易过程中,若一次性直接满足了报单手数,直接进入Filled状态,触发OnOrderFilled事件;若只满足了部分会先进入PartiallyFilled状态,触发OnOrderPartiallyFilled事件。此时,状态发生了改变(由New变为PartiallyFilled或Filled)。会触发OnOrderStatusChanged事件。(注:变为PartiallyFilled状态,会先触发OnOrderPartiallyFilled ,再触发OnOrderStatusChanged;变为Filled状态会先触发OnOrderStatusChanged再触发OnOrderFilled。)
若直到合约到期报单未成交,会触发OnOrderExpired事件。
一次正常的交易触发的事件先后为OnNewOrder,OnOrderPartiallyFilled,OnOrderFilled,OnOrderDone。
OnOrderStatusChanged只在状态变为PartiallyFilled,Filled,Cancelled,Expired,Replaced, Rejected时触发。
来源: <http://www.smartquant.cn/forum/forum.php?mod=viewthread&tid=12>>
三、仓位管理
1、在持仓条件下,仓位的买卖调用OnPositionChanged
(Position.Amount,即持仓,发生变化后才调用OnPositionChanged)
2、若最后一笔交易后空仓,即 OnPositionChanged 后还会再调用OnPositionClosed



雷达卡





京公网安备 11010802022788号







