studerw / td-ameritrade-client

TD Ameritrade Java Client
Apache License 2.0
69 stars 47 forks source link

how to create a trail stop order? #25

Closed vdzoba closed 4 years ago

vdzoba commented 4 years ago

In case I want to create buy order which will trigger trail stop order

studerw commented 4 years ago

Can you give me a concrete example? For example, how bout this scenario:

_EXAMPLE You want to buy MEOW, but you think it will fall in value and want to wait to purchase it. You also think that if MEOW goes up by a defined amount (let’s say 5%) it may go even higher. In an attempt to help minimize potential costs, you set your trail to 5%. Your stop price will always remain 5% above MEOW’s lowest price.

MEOW is currently trading at $110 per share. Your stop price will start at $115.50, which is 5% higher than the current price of MEOW.

If MEOW stays between $110 and $115.50, the stop price will stay at $115.50. If MEOW falls to $100, the stop price will update to $105, 5% above than the new lowest price. If MEOW rises to the stop price ($105) or higher, it triggers a buy market order. MEOW will be purchased at the best price currently available. These examples are shown for illustrative purposes only. In general, understanding order types can help you manage risk and execution speed. However, you can never eliminate market and investment risks entirely. It’s usually best to choose an order type based on your investment goals and objectives.__

vdzoba commented 4 years ago

Thank you for the detailed answer. My questions was more about how to write code instruction for this. Do you have an example?

studerw commented 4 years ago

@vdzoba

Take a look at the last example for Sell Trailing Stop on the TDA Dev site.

I think you'd just change the OrderLegInstruction.instruction from SELL to BUY, everything else would be the same. If this doesn't work or you're still confused, I can help you later this week if I've got time and you still want to make a similar trade.

studerw commented 4 years ago

@vdzoba, I think this Java would be similar, which I figured out from the link in the last comment. If you're doing a percent instead of dollar amount for the trailing, then a few parameters are different, of course:

    Order order = new Order();
    order.setOrderType(OrderType.TRAILING_STOP);
    order.setSession(Session.NORMAL);
    order.setStopPriceLinkBasis(StopPriceLinkBasis.BID);
    order.setStopPriceLinkType(StopPriceLinkType.VALUE);
    order.setStopPriceOffset(new BigDecimal("1"));
    order.setDuration(Duration.DAY);
    order.setOrderStrategyType(OrderStrategyType.SINGLE);
    order.setComplexOrderStrategyType(ComplexOrderStrategyType.NONE);

    OrderLegCollection olc = new OrderLegCollection();
    olc.setInstruction(Instruction.BUY);
    olc.setQuantity(new BigDecimal("100"));
    olc.setQuantityType(QuantityType.SHARES);
    order.getOrderLegCollection().add(olc);

    Instrument instrument = new EquityInstrument();
    instrument.setSymbol("F");
    instrument.setAssetType(AssetType.EQUITY);
    olc.setInstrument(instrument);
    LOGGER.debug(order.toString());
    return order;
vdzoba-clgx commented 4 years ago

Thank you! It helped me!