All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.trickl.model.oanda.order.MarketIfTouchedOrder Maven / Gradle / Ivy

package com.trickl.model.oanda.order;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyDescription;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.trickl.model.oanda.instrument.HasInstrument;
import com.trickl.model.oanda.transaction.ClientExtensions;
import com.trickl.model.oanda.transaction.StopLossDetails;
import com.trickl.model.oanda.transaction.TakeProfitDetails;
import com.trickl.model.oanda.transaction.TrailingStopLossDetails;
import java.math.BigDecimal;
import java.time.Instant;
import java.util.List;
import lombok.Builder;
import lombok.Data;

/**
 * A MarketIfTouchedOrder is an order that is created with a price threshold, and will only be
 * filled by a market price that is touches or crosses the threshold.
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
    "id",
    "createTime",
    "state",
    "clientExtensions",
    "type",
    "instrument",
    "units",
    "price",
    "priceBound",
    "timeInForce",
    "gtdTime",
    "positionFill",
    "triggerCondition",
    "initialMarketPrice",
    "takeProfitOnFill",
    "stopLossOnFill",
    "trailingStopLossOnFill",
    "tradeClientExtensions",
    "fillingTransactionID",
    "filledTime",
    "tradeOpenedID",
    "tradeReducedID",
    "tradeClosedIDs",
    "cancellingTransactionID",
    "cancelledTime",
    "replacesOrderID",
    "replacedByOrderID"
})
@Builder
@Data
public class MarketIfTouchedOrder extends Order 
    implements HasInstrument, HasFilledTime, HasTimeInForce, HasUnits, HasPrice {
    
  /** The type of the Order. */
  @JsonPropertyDescription("The type of the Order.")
  private final OrderType type = OrderType.MARKET_IF_TOUCHED;

  /** The MarketIfTouched Order's Instrument. */
  @JsonPropertyDescription("The MarketIfTouched Order's Instrument.")
  private String instrument;

  /**
   * The quantity requested to be filled by the MarketIfTouched Order. A positive number of units
   * results in a long Order, and a negative number of units results in a short Order.
   */
  @JsonPropertyDescription(
      "The quantity requested to be filled by the MarketIfTouched Order."
          + " A posititive number of units results in a long Order, and a "
          + "negative number of units results in a short Order.")
  private BigDecimal units;

  /**
   * The price threshold specified for the MarketIfTouched Order. The MarketIfTouched Order will
   * only be filled by a market price that crosses this price from the direction of the market price
   * at the time when the Order was created (the initialMarketPrice). Depending on the value of the
   * Order's price and initialMarketPrice, the MarketIfTouchedOrder will behave like a Limit or a
   * Stop Order.
   */
  @JsonPropertyDescription(
      "The price threshold specified for the MarketIfTouched Order. The MarketIfTouched "
          + "Order will only be filled by a market price that crosses this price "
          + "from the direction of the market price at the time when the Order "
          + "was created (the initialMarketPrice). Depending on the value of the"
          + " Order's price and initialMarketPrice, the MarketIfTouchedOrder "
          + "will behave like a Limit or a Stop Order.")
  private BigDecimal price;

  /** The worst market price that may be used to fill this MarketIfTouched Order. */
  @JsonPropertyDescription(
      "The worst market price that may be used to fill this MarketIfTouched Order.")
  private String priceBound;

  /**
   * The time-in-force requested for the MarketIfTouched Order. Restricted to "GTC", "GFD" and "GTD"
   * for MarketIfTouched Orders.
   */
  @JsonPropertyDescription(
      "The time-in-force requested for the MarketIfTouched Order. Restricted "
          + "to \"GTC\", \"GFD\" and \"GTD\" for MarketIfTouched Orders.")
  private TimeInForce timeInForce;

  /** The date/time when the MarketIfTouched Order will be cancelled if its timeInForce is "GTD". */
  @JsonPropertyDescription(
      "The date/time when the MarketIfTouched Order will be cancelled if its "
          + "timeInForce is \"GTD\".")
  private String gtdTime;

  /** Specification of how Positions in the Account are modified when the Order is filled. */
  @JsonPropertyDescription(
      "Specification of how Positions in the Account are modified when the Order is filled.")
  private OrderPositionFill positionFill;

  /**
   * Specification of which price component should be used when determining if an Order should be
   * triggered and filled. This allows Orders to be triggered based on the bid, ask, mid, default
   * (ask for buy, bid for sell) or inverse (ask for sell, bid for buy) price depending on the
   * desired behaviour. Orders are always filled using their default price component. This feature
   * is only provided through the REST API. Clients who choose to specify a non-default trigger
   * condition will not see it reflected in any of OANDA's proprietary or partner trading platforms,
   * their transaction history or their account statements. OANDA platforms always assume that an
   * Order's trigger condition is set to the default value when indicating the distance from an
   * Order's trigger price, and will always provide the default trigger condition when creating or
   * modifying an Order. A special restriction applies when creating a guaranteed Stop Loss Order.
   * In this case the TriggerCondition value must either be "DEFAULT", or the "natural" trigger side
   * "DEFAULT" results in. So for a Stop Loss Order for a long trade valid values are "DEFAULT" and
   * "BID", and for short trades "DEFAULT" and "ASK" are valid.
   */
  @JsonPropertyDescription(
      "Specification of which price component should be used when determining if an "
          + "Order should be triggered and filled. This allows Orders to be "
          + "triggered based on the bid, ask, mid, default (ask for buy, bid for"
          + " sell) or inverse (ask for sell, bid for buy) price depending on "
          + "the desired behaviour. Orders are always filled using their default "
          + "price component.\nThis feature is only provided through the REST API."
          + " Clients who choose to specify a non-default trigger condition"
          + "will not see it reflected in any of OANDA's proprietary or partner"
          + " trading platforms, their transaction history or their account statements."
          + " OANDA platforms always assume that an Order's trigger condition is set "
          + "to the default value when indicating the distance from an Order's "
          + "trigger price, and will always provide the default trigger condition "
          + "when creating or modifying an Order.\nA special restriction applies "
          + "when creating a guaranteed Stop Loss Order. In this case the TriggerCondition"
          + " value must either be \"DEFAULT\", or the \"natural\" trigger side "
          + "\"DEFAULT\" results in. So for a Stop Loss Order for a long trade valid "
          + "values are \"DEFAULT\" and \"BID\", and for short trades \"DEFAULT\" "
          + "and \"ASK\" are valid.")
  private OrderTriggerCondition triggerCondition;

  /** The Market price at the time when the MarketIfTouched Order was created. */
  @JsonPropertyDescription(
      "The Market price at the time when the MarketIfTouched Order was created.")
  private String initialMarketPrice;

  private TakeProfitDetails takeProfitOnFill;

  private StopLossDetails stopLossOnFill;

  private TrailingStopLossDetails trailingStopLossOnFill;

  private ClientExtensions tradeClientExtensions;

  /**
   * ID of the Transaction that filled this Order (only provided when the Order's state is FILLED).
   */
  @JsonProperty("fillingTransactionID")
  @JsonPropertyDescription(
      "ID of the Transaction that filled this Order (only provided when the Order's"
          + " state is FILLED)")
  private String fillingTransactionId;

  /** Date/time when the Order was filled (only provided when the Order's state is FILLED). */  
  @JsonPropertyDescription(
      "Date/time when the Order was filled (only provided when the Order's state is FILLED)")  
  @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss.nnnnnnnnnX", timezone = "UTC")
  private Instant filledTime;

  /**
   * Trade ID of Trade opened when the Order was filled (only provided when the Order's state is
   * FILLED and a Trade was opened as a result of the fill).
   */
  @JsonProperty("tradeOpenedID")
  @JsonPropertyDescription(
      "Trade ID of Trade opened when the Order was filled (only provided when the Order's"
          + " state is FILLED and a Trade was opened as a result of the fill)")
  private String tradeOpenedId;

  /**
   * Trade ID of Trade reduced when the Order was filled (only provided when the Order's state is
   * FILLED and a Trade was reduced as a result of the fill).
   */
  @JsonProperty("tradeReducedID")
  @JsonPropertyDescription(
      "Trade ID of Trade reduced when the Order was filled (only provided when "
          + "the Order's state is FILLED and a Trade was reduced as a result"
          + " of the fill)")
  private String tradeReducedId;

  /**
   * Trade IDs of Trades closed when the Order was filled (only provided when the Order's state is
   * FILLED and one or more Trades were closed as a result of the fill).
   */
  @JsonProperty("tradeClosedIDs")
  @JsonPropertyDescription(
      "Trade IDs of Trades closed when the Order was filled (only provided "
          + "when the Order's state is FILLED and one or more Trades were"
          + " closed as a result of the fill)")
  private List tradeClosedIds = null;

  /**
   * ID of the Transaction that cancelled the Order (only provided when the Order's state is
   * CANCELLED).
   */
  @JsonProperty("cancellingTransactionID")
  @JsonPropertyDescription(
      "ID of the Transaction that cancelled the Order (only provided when the"
          + " Order's state is CANCELLED)")
  private String cancellingTransactionId;

  /**
   * Date/time when the Order was cancelled (only provided when the state of the Order is
   * CANCELLED).
   */
  @JsonProperty("cancelledTime")
  @JsonPropertyDescription(
      "Date/time when the Order was cancelled (only provided when the state of the Order"
          + " is CANCELLED)")
  private String cancelledTime;

  /**
   * The ID of the Order that was replaced by this Order (only provided if this Order was created as
   * part of a cancel/replace).
   */
  @JsonProperty("replacesOrderID")
  @JsonPropertyDescription(
      "The ID of the Order that was replaced by this Order (only provided if this "
          + "Order was created as part of a cancel/replace).")
  private String replacesOrderId;

  /**
   * The ID of the Order that replaced this Order (only provided if this Order was cancelled as part
   * of a cancel/replace).
   */
  @JsonProperty("replacedByOrderID")
  @JsonPropertyDescription(
      "The ID of the Order that replaced this Order (only provided if this Order"
          + " was cancelled as part of a cancel/replace).")
  private String replacedByOrderId;
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy