19
19
using QuantConnect . Benchmarks ;
20
20
using QuantConnect . Brokerages ;
21
21
using QuantConnect . Data . Market ;
22
+ using QuantConnect . Data . Shortable ;
22
23
using QuantConnect . Interfaces ;
23
24
using QuantConnect . Orders ;
24
25
using QuantConnect . Orders . Fees ;
@@ -195,7 +196,12 @@ public IBenchmark GetBenchmark(SecurityManager securities)
195
196
{
196
197
using ( Py . GIL ( ) )
197
198
{
198
- return ( _model . GetBenchmark ( securities ) as PyObject ) . GetAndDispose < IBenchmark > ( ) ;
199
+ var benchmark = _model . GetBenchmark ( securities ) as PyObject ;
200
+ if ( benchmark . TryConvert < IBenchmark > ( out var csharpBenchmark ) )
201
+ {
202
+ return csharpBenchmark ;
203
+ }
204
+ return new BenchmarkPythonWrapper ( benchmark ) ;
199
205
}
200
206
}
201
207
@@ -208,7 +214,12 @@ public IFeeModel GetFeeModel(Security security)
208
214
{
209
215
using ( Py . GIL ( ) )
210
216
{
211
- return ( _model . GetFeeModel ( security ) as PyObject ) . GetAndDispose < IFeeModel > ( ) ;
217
+ var feeModel = _model . GetFeeModel ( security ) as PyObject ;
218
+ if ( feeModel . TryConvert < IFeeModel > ( out var csharpFeeModel ) )
219
+ {
220
+ return csharpFeeModel ;
221
+ }
222
+ return new FeeModelPythonWrapper ( feeModel ) ;
212
223
}
213
224
}
214
225
@@ -224,16 +235,9 @@ public IFillModel GetFillModel(Security security)
224
235
var fillModel = _model . GetFillModel ( security ) as PyObject ;
225
236
if ( fillModel . TryConvert < IFillModel > ( out var csharpFillModel ) )
226
237
{
227
- return ( _model . GetFillModel ( security ) as PyObject ) . GetAndDispose < FillModel > ( ) ;
228
- }
229
- else if ( Extensions . TryConvert < IFillModel > ( fillModel , out _ , allowPythonDerivative : true ) )
230
- {
231
- return ( new FillModelPythonWrapper ( fillModel ) ) ;
232
- }
233
- else
234
- {
235
- throw new Exception ( $@ "{ _model . __class__ . __name__ } Fill Model type is not supported!") ;
238
+ return csharpFillModel ;
236
239
}
240
+ return ( new FillModelPythonWrapper ( fillModel ) ) ;
237
241
}
238
242
}
239
243
@@ -259,23 +263,12 @@ public ISettlementModel GetSettlementModel(Security security)
259
263
{
260
264
using ( Py . GIL ( ) )
261
265
{
262
- return ( _model . GetSettlementModel ( security ) as PyObject ) . GetAndDispose < ISettlementModel > ( ) ;
263
- }
264
- }
265
-
266
- /// <summary>
267
- /// Gets a new settlement model for the security
268
- /// </summary>
269
- /// <param name="security">The security to get a settlement model for</param>
270
- /// <param name="accountType">The account type</param>
271
- /// <returns>The settlement model for this brokerage</returns>
272
- [ Obsolete ( "Flagged deprecated and will remove December 1st 2018" ) ]
273
- public ISettlementModel GetSettlementModel ( Security security , AccountType accountType )
274
- {
275
- using ( Py . GIL ( ) )
276
- {
277
- return ( _model . GetSettlementModel ( security , accountType )
278
- as PyObject ) . GetAndDispose < ISettlementModel > ( ) ;
266
+ var settlementModel = _model . GetSettlementModel ( security ) as PyObject ;
267
+ if ( settlementModel . TryConvert < ISettlementModel > ( out var csharpSettlementModel ) )
268
+ {
269
+ return csharpSettlementModel ;
270
+ }
271
+ return new SettlementModelPythonWrapper ( settlementModel ) ;
279
272
}
280
273
}
281
274
@@ -288,7 +281,12 @@ public ISlippageModel GetSlippageModel(Security security)
288
281
{
289
282
using ( Py . GIL ( ) )
290
283
{
291
- return ( _model . GetSlippageModel ( security ) as PyObject ) . GetAndDispose < ISlippageModel > ( ) ;
284
+ var slippageModel = _model . GetSlippageModel ( security ) as PyObject ;
285
+ if ( slippageModel . TryConvert < ISlippageModel > ( out var csharpSlippageModel ) )
286
+ {
287
+ return csharpSlippageModel ;
288
+ }
289
+ return new SlippageModelPythonWrapper ( slippageModel ) ;
292
290
}
293
291
}
294
292
@@ -317,23 +315,12 @@ public IBuyingPowerModel GetBuyingPowerModel(Security security)
317
315
{
318
316
using ( Py . GIL ( ) )
319
317
{
320
- return ( _model . GetBuyingPowerModel ( security ) as PyObject ) . GetAndDispose < IBuyingPowerModel > ( ) ;
321
- }
322
- }
323
-
324
- /// <summary>
325
- /// Gets a new buying power model for the security
326
- /// </summary>
327
- /// <param name="security">The security to get a buying power model for</param>
328
- /// <param name="accountType">The account type</param>
329
- /// <returns>The buying power model for this brokerage/security</returns>
330
- [ Obsolete ( "Flagged deprecated and will remove December 1st 2018" ) ]
331
- public IBuyingPowerModel GetBuyingPowerModel ( Security security , AccountType accountType )
332
- {
333
- using ( Py . GIL ( ) )
334
- {
335
- return ( _model . GetBuyingPowerModel ( security , accountType )
336
- as PyObject ) . GetAndDispose < IBuyingPowerModel > ( ) ;
318
+ var buyingPowerModel = _model . GetBuyingPowerModel ( security ) as PyObject ;
319
+ if ( buyingPowerModel . TryConvert < IBuyingPowerModel > ( out var csharpBuyingPowerModel ) )
320
+ {
321
+ return csharpBuyingPowerModel ;
322
+ }
323
+ return new BuyingPowerModelPythonWrapper ( buyingPowerModel ) ;
337
324
}
338
325
}
339
326
@@ -345,7 +332,12 @@ public IShortableProvider GetShortableProvider(Security security)
345
332
{
346
333
using ( Py . GIL ( ) )
347
334
{
348
- return ( _model . GetShortableProvider ( security ) as PyObject ) . GetAndDispose < IShortableProvider > ( ) ;
335
+ var shortableProvider = _model . GetShortableProvider ( security ) as PyObject ;
336
+ if ( shortableProvider . TryConvert < IShortableProvider > ( out var csharpShortableProvider ) )
337
+ {
338
+ return csharpShortableProvider ;
339
+ }
340
+ return new ShortableProviderPythonWrapper ( shortableProvider ) ;
349
341
}
350
342
}
351
343
@@ -370,7 +362,12 @@ public IMarginInterestRateModel GetMarginInterestRateModel(Security security)
370
362
{
371
363
using ( Py . GIL ( ) )
372
364
{
373
- return ( _model . GetMarginInterestRateModel ( security ) as PyObject ) . GetAndDispose < IMarginInterestRateModel > ( ) ;
365
+ var marginInterestRateModel = _model . GetMarginInterestRateModel ( security ) as PyObject ;
366
+ if ( marginInterestRateModel . TryConvert < IMarginInterestRateModel > ( out var csharpBuyingPowerModel ) )
367
+ {
368
+ return csharpBuyingPowerModel ;
369
+ }
370
+ return new MarginInterestRateModelPythonWrapper ( marginInterestRateModel ) ;
374
371
}
375
372
}
376
373
}
0 commit comments