@@ -90,26 +90,81 @@ def buy(self, req: TradeRequest) -> TradeResponse:
9090 '''execute a buy order'''
9191 params = GDAXExchange .trade_req_to_params (req )
9292 log .warn ("Buy params: %s" , str (params ))
93- res = self ._client .buy (** params )
94- return TradeResponse (request = req ,
93+ order = self ._client .buy (** params )
94+ '''{
95+ "id": "d0c5340b-6d6c-49d9-b567-48c4bfca13d2",
96+ "price": "0.10000000",
97+ "size": "0.01000000",
98+ "product_id": "BTC-USD",
99+ "side": "buy",
100+ "stp": "dc",
101+ "type": "limit",
102+ "time_in_force": "GTC",
103+ "post_only": false,
104+ "created_at": "2016-12-08T20:02:28.53864Z",
105+ "fill_fees": "0.0000000000000000",
106+ "filled_size": "0.00000000",
107+ "executed_value": "0.0000000000000000",
108+ "status": "pending",
109+ "settled": false
110+ }'''
111+
112+ # FIXME check these
113+ slippage = req .price - float (order ['price' ])
114+ txn_cost = float (order .get ('fill_fees' ))
115+ status = TradeResult .NONE
116+
117+ if (float (order ['filled_size' ]) - req .volume ) < 0.001 or order ['status' ] == 'done' :
118+ status = TradeResult .FILLED
119+ elif False : # FIXME
120+ status = TradeResult .REJECTED
121+ elif float (order .get ('filled_size' , 0.0 )) == req .size :
122+ status = TradeResult .PARTIAL
123+ else :
124+ status = TradeResult .PENDING
125+
126+ resp = TradeResponse (request = req ,
95127 side = req .side ,
96- volume = 0.0 ,
97- price = 0.0 ,
98- currency = CurrencyType .BTC ,
99- slippage = 0.0 ,
100- transaction_cost = 0.0 ,
101- status = TradeResult .FILLED )
128+ volume = float (order ['filled_size' ]),
129+ price = float (order ['price' ]),
130+ currency = req .currency ,
131+ slippage = slippage ,
132+ transaction_cost = txn_cost ,
133+ status = status ,
134+ order_id = str (order ['order_id' ]),
135+ remaining = float (order .get ('remaining_amount' , 0.0 )),
136+ )
137+ return resp
102138
103139 def sell (self , req : TradeRequest ) -> TradeResponse :
104140 '''execute a sell order'''
105141 params = GDAXExchange .trade_req_to_params (req )
106142 log .warn ("Sell params: %s" , str (params ))
107- res = self ._client .sell (** params )
108- return TradeResponse (request = req ,
143+ order = self ._client .sell (** params )
144+
145+ # FIXME check these
146+ slippage = req .price - float (order ['price' ])
147+ txn_cost = float (order .get ('fill_fees' ))
148+ status = TradeResult .NONE
149+
150+ if (float (order ['filled_size' ]) - req .volume ) < 0.001 or order ['status' ] == 'done' :
151+ status = TradeResult .FILLED
152+ elif False : # FIXME
153+ status = TradeResult .REJECTED
154+ elif float (order .get ('filled_size' , 0.0 )) == req .size :
155+ status = TradeResult .PARTIAL
156+ else :
157+ status = TradeResult .PENDING
158+
159+ resp = TradeResponse (request = req ,
109160 side = req .side ,
110- volume = 0.0 ,
111- price = 0.0 ,
112- currency = CurrencyType .BTC ,
113- slippage = 0.0 ,
114- transaction_cost = 0.0 ,
115- status = TradeResult .FILLED )
161+ volume = float (order ['filled_size' ]),
162+ price = float (order ['price' ]),
163+ currency = req .currency ,
164+ slippage = slippage ,
165+ transaction_cost = txn_cost ,
166+ status = status ,
167+ order_id = str (order ['order_id' ]),
168+ remaining = float (order .get ('remaining_amount' , 0.0 )),
169+ )
170+ return resp
0 commit comments