@@ -709,6 +709,7 @@ def get_value(self):
709709 bt .Order .Limit : 'limit' ,
710710 bt .Order .Stop : 'stop' ,
711711 bt .Order .StopLimit : 'stop_limit' ,
712+ bt .Order .StopTrail : 'trailing_stop' ,
712713 }
713714
714715 def broker_threads (self ):
@@ -766,7 +767,7 @@ def order_create(self, order, stopside=None, takeside=None, **kwargs):
766767 okwargs ['side' ] = 'buy' if order .isbuy () else 'sell'
767768 okwargs ['type' ] = self ._ORDEREXECS [order .exectype ]
768769 okwargs ['time_in_force' ] = "gtc"
769- if order .exectype != bt .Order .Market :
770+ if order .exectype not in [ bt .Order .Market , bt . Order . StopTrail ] :
770771 okwargs ['limit_price' ] = str (order .created .price )
771772
772773 if order .exectype in [bt .Order .StopLimit , bt .Order .Stop ]:
@@ -785,6 +786,18 @@ def order_create(self, order, stopside=None, takeside=None, **kwargs):
785786 if stopside or takeside :
786787 okwargs ['order_class' ] = "bracket"
787788
789+ if order .exectype == bt .Order .StopTrail :
790+ if order .trailpercent and order .trailamount :
791+ raise Exception ("You can't create trailing stop order with "
792+ "both TrailPrice and TrailPercent. choose one" )
793+ if order .trailpercent :
794+ okwargs ['trail_percent' ] = order .trailpercent
795+ elif order .trailamount :
796+ okwargs ['trail_price' ] = order .trailamount
797+ else :
798+ raise Exception ("You must provide either trailpercent or "
799+ "trailamount when creating StopTrail order" )
800+
788801 okwargs .update (** kwargs ) # anything from the user
789802
790803 self .q_ordercreate .put ((order .ref , okwargs ,))
0 commit comments