Quantopian's community platform is shutting down. Please read this post for more information and download your code.
Back to Community
Stop-loss orders for long/short strategy using Optimize API

Hi,

Is it possible to have stoploss orders working when using the Optimize API? If it is, how is this supposed to be implemented? Reaching out to any kind souls on Q who want to help.

I've tried doing this in handle_data (shamelessly cloned and modified by something David Edwards coded), but I get the below error message. The error message seem to imply that stop orders are currently not supported by Optimize API? If it's not, is there any plan to support stop orders in the near future? Many thanks in advance.

def handle_data(context, data):  
    for stock in context.portfolio.positions:  
        position = context.portfolio.positions[stock].amount  
        price = data[stock].price

        if position <= 0:  
            order_target_percent(stock, 0, style=StopOrder(price + (price*0.005)))

        if position >= 0:  
            order_target_percent(stock, 0, style=StopOrder(price - (price*0.005)))

Error:

CannotOptimizeWithOpenNonMarketOrders: Can't run portfolio optimization while any non-market orders are open.
Orders were open for the following assets:
[[Equity(24 [AAPL]), Equity(266 [AJG]), Equity(337 [AMAT]), Equity(353 [AME]), Equity(368 [AMGN]), Equity(766 [BCE]), Equity(822 [BF_B]), Equity(939 [BLL]), Equity(1219 [CATO]), Equity(1524 [CHRS]), Equity(1746 [COG]), Equity(1751 [COHR]), Equity(1898 [CSC]), Equity(2119 [DD]), Equity(2237 [DNB]), Equity(2568 [EP]), Equity(2633 [ETN]), Equity(2663 [EXPD]), Equity(2754 [M]), Equity(2760 [FDO]), Equity(2893 [FMC]), Equity(3123 [GVA]), Equity(3306 [GPC]), Equity(3421 [GWW]), Equity(3460 [HAS]), Equity(3519 [HEI]), Equity(3522 [HELE]), Equity(3668 [HRL]), Equity(3895 [IMO]), Equity(3990 [IPG]), Equity(4620 [LZ]), Equity(4705 [MKC]), Equity(4727 [MCRS]), Equity(4823 [MGA]), Equity(4945 [MNRO]), Equity(4954 [MO]), Equity(5328 [NKE]), Equity(5376 [NNN]), Equity(5484 [ES]), Equity(5488 [NUE]), Equity(5509 [NVLS]), Equity(5601 [OFIX]), Equity(5626 [OI]), Equity(5639 [ONB]), Equity(5782 [PBT]), Equity(5787 [PCAR]), Equity(5956 [PH]), Equity(6119 [PPL]), Equity(6269 [PWR]), Equity(6396 [HTSI]), Equity(6543 [ROP]), Equity(6546 [ROST]), Equity(6704 [SCHW]), Equity(6736 [SMG]), Equity(6798 [SF]), Equity(6900 [SJI]), Equity(6949 [AOS]), Equity(7011 [SO]), Equity(7050 [CAA]), Equity(7171 [STR]), Equity(7211 [SUN]), Equity(7373 [TECH]), Equity(7623 [TTC]), Equity(7739 [UGI]), Equity(7800 [UNP]), Equity(7904 [VAR]), Equity(7998 [VMC]), Equity(8140 [WEC]), Equity(8265 [WR]), Equity(8329 [X]), Equity(8352 [XRAY]), Equity(8383 [FL]), Equity(8489 [GLBL]), Equity(8655 [INTU]), Equity(8783 [ATR]), Equity(8857 [ORLY]), Equity(9052 [SKT]), Equity(9156 [FLIR]), Equity(9349 [CRA]), Equity(9435 [PETM]), Equity(9704 [CLP]), Equity(9930 [IT]), Equity(10192 [ITRI]), Equity(10639 [MAA]), Equity(10931 [CPRT]), Equity(11044 [RYN]), Equity(11130 [GDI]), Equity(11369 [PSSI]), Equity(11668 [MATW]), Equity(11901 [SIRI]), Equity(12087 [O]), Equity(12652 [DLTR]), Equity(12662 [FMER]), Equity(12882 [DRI]), Equity(12898 [HLIT]), Equity(13508 [CLB]), Equity(13612 [BAP]), Equity(13698 [MYGN]), Equity(13962 [WAT]), Equity(14014 [CTXS]), Equity(14328 [ALXN]), Equity(14803 [SAPE]), Equity(15019 [SKS]), Equity(15139 [GWR]), Equity(15206 [QGEN]), Equity(15474 [ETFC]), Equity(15581 [SRCL]), Equity(16029 [ISCA]), Equity(16108 [STLD]), Equity(16129 [UNFI]), Equity(16140 [VPHM]), Equity(16348 [DGX]), Equity(16394 [OFG]), Equity(16586 [AMTD]), Equity(16838 [ALV]), Equity(17080 [MS]), Equity(17098 [PMCS]), Equity(17167 [BJ]), Equity(17553 [NAT]), Equity(17787 [YUM]), Equity(17895 [MTD]), Equity(17991 [CAR]), Equity(18142 [INGR]), Equity(18221 [VRSN]), Equity(18480 [RBA]), Equity(18529 [BRCM]), Equity(18634 [UMPQ]), Equity(19008 [ULTI]), Equity(19127 [KCG]), Equity(19773 [COCO]), Equity(19788 [CEB]), Equity(20133 [PNRA]), Equity(20374 [HCBK]), Equity(20394 [MDRX]), Equity(21231 [ALTH]), Equity(21284 [ITMN]), Equity(21608 [CYH]), Equity(21697 [NTRI]), Equity(21774 [ILMN]), Equity(22099 [TPR]), Equity(22110 [DVA]), Equity(22114 [EXC]), Equity(22247 [NXY]), Equity(22336 [RECN]), Equity(22443 [GPN]), Equity(22959 [BG]), Equity(23021 [ECA]), Equity(23047 [ZBH]), Equity(23113 [DB]), Equity(23267 [WOOF]), Equity(23276 [AYI]), Equity(23438 [GME]), Equity(23465 [ETP]), Equity(24551 [FNFG]), Equity(24566 [MFN]), Equity(24778 [SRE]), Equity(24789 [PLCE]), Equity(25006 [JPM]), Equity(25510 [AUQ]), Equity(25697 [SNX]), Equity(25705 [XPER]), Equity(25781 [NG]), Equity(25920 [MAR]), Equity(26315 [NILE]), Equity(26335 [ALNY]), Equity(26470 [IAC]), Equity(26500 [AUXL]), Equity(26693 [TXRH]), Equity(26881 [KNL]), Equity(26994 [DRYS]), Equity(27357 [LBTY_A]), Equity(27410 [FRG]), Equity(27480 [HITT]), Equity(27668 [TLEO]), Equity(27763 [NM]), Equity(27872 [VIAB]), Equity(27916 [EMS]), Equity(28231 [THI]), Equity(31638 [HRBN]), Equity(32724 [APKT]), Equity(33133 [TWC]), Equity(33480 [CLWR]), Equity(33772 [ORN]), Equity(33979 [INFN]), Equity(34360 [YONG]), Equity(34963 [CSR]), Equity(34997 [IQNT]), Equity(35064 [ES]), Equity(35230 [ENTR]), Equity(35268 [MDAS]), Equity(36930 [DISC_A]), Equity(38084 [MJN]), Equity(38150 [HTWR]), Equity(38388 [SWI]), Equity(38531 [IVR]), Equity(38650 [AVGO]), Equity(38765 [ART]), Equity(38817 [VRSK]), Equity(38865 [DOLE]), Equity(39047 [PEB]), Equity(39111 [PPC])]] There was a runtime error on line 336.

1 response

Would Q support canceling them before optimize, recreate after?

def cncl_oos(context, data):  
    oo = get_open_orders()  
    for s in oo:  
        for o in oo[s]:  
            cancel_order(o.id)  

One difficulty is partial fills. Could store order id's from order_optimal_portfolio, run through a copy (id_list[:]) of those each minute, set stop, limit only on those with completed status, removing from list as it goes.