From d61324c208ce6f45fd18cab8c685cad751c88ba5 Mon Sep 17 00:00:00 2001 From: aryzach Date: Tue, 14 Sep 2021 14:04:45 -0500 Subject: [PATCH] allow set account allocation on buy/sell orders --- .../larroy/ibclient/contract/FXContract.scala | 16 ++++++++++++++++ .../scala/com/larroy/ibclient/order/Buy.scala | 2 +- .../scala/com/larroy/ibclient/order/Order.scala | 11 +++++++++-- .../scala/com/larroy/ibclient/order/Sell.scala | 2 +- .../com/larroy/ibclient/order/kind/Limit.scala | 1 + 5 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 src/main/scala/com/larroy/ibclient/contract/FXContract.scala diff --git a/src/main/scala/com/larroy/ibclient/contract/FXContract.scala b/src/main/scala/com/larroy/ibclient/contract/FXContract.scala new file mode 100644 index 0000000..ca37eaf --- /dev/null +++ b/src/main/scala/com/larroy/ibclient/contract/FXContract.scala @@ -0,0 +1,16 @@ +package com.larroy.ibclient.contract + +import com.ib.client.Contract +import com.ib.client.Types.SecType + +// TODO: add more params + +/** + * @param symbol + */ +class FXContract(symbol: String) extends Contract { + symbol(symbol) + secType(SecType.CASH.name()) + exchange("IDEALPRO") + currency("GBP") +} diff --git a/src/main/scala/com/larroy/ibclient/order/Buy.scala b/src/main/scala/com/larroy/ibclient/order/Buy.scala index 8a60b47..8fdbdcb 100644 --- a/src/main/scala/com/larroy/ibclient/order/Buy.scala +++ b/src/main/scala/com/larroy/ibclient/order/Buy.scala @@ -7,4 +7,4 @@ import com.larroy.ibclient.order.kind.Kind * Buy Order * @author piotr 19.02.15 */ -case class Buy(override val kind: Kind, override val quantity: Int) extends Order +case class Buy(override val kind: Kind, override val quantity: Int, override val account: Option[String] = None) extends Order diff --git a/src/main/scala/com/larroy/ibclient/order/Order.scala b/src/main/scala/com/larroy/ibclient/order/Order.scala index 39f6302..a59f093 100644 --- a/src/main/scala/com/larroy/ibclient/order/Order.scala +++ b/src/main/scala/com/larroy/ibclient/order/Order.scala @@ -9,17 +9,24 @@ import com.larroy.ibclient.order.kind.Kind trait Order { def kind: Kind = ??? def quantity: Int = ??? + def account: Option[String] = ??? def toIBOrder: IBOrder = { import com.larroy.ibclient.order.kind._ val iBOrder = new IBOrder() this match { - case Buy(_, qty) ⇒ { + case Buy(_, qty, acct) ⇒ { iBOrder.action("BUY") iBOrder.totalQuantity(qty) + acct.collect { + case acctStr => iBOrder.account(acctStr) + } } - case Sell(_, qty) ⇒ { + case Sell(_, qty, acct) ⇒ { iBOrder.action("SELL") iBOrder.totalQuantity(qty) + acct.collect { + case acctStr => iBOrder.account(acctStr) + } } } this.kind match { diff --git a/src/main/scala/com/larroy/ibclient/order/Sell.scala b/src/main/scala/com/larroy/ibclient/order/Sell.scala index f4d8be1..fdcea99 100644 --- a/src/main/scala/com/larroy/ibclient/order/Sell.scala +++ b/src/main/scala/com/larroy/ibclient/order/Sell.scala @@ -6,4 +6,4 @@ import com.larroy.ibclient.order.kind.Kind * Sell order * @author piotr 19.02.15 */ -case class Sell(override val kind: Kind, override val quantity: Int) extends Order +case class Sell(override val kind: Kind, override val quantity: Int, override val account: Option[String] = None) extends Order diff --git a/src/main/scala/com/larroy/ibclient/order/kind/Limit.scala b/src/main/scala/com/larroy/ibclient/order/kind/Limit.scala index 54f2659..cec5121 100644 --- a/src/main/scala/com/larroy/ibclient/order/kind/Limit.scala +++ b/src/main/scala/com/larroy/ibclient/order/kind/Limit.scala @@ -2,5 +2,6 @@ package com.larroy.ibclient.order.kind /** * @author piotr 19.02.15 + * @param limit price of max limit to buy */ case class Limit(limit: Double) extends Kind