internal GenericActionResult HandlePositionUpdate(string backtestJobName, BacktestPosition position) { if (position == null) { return(new GenericActionResult(false, "Invalid position object: null")); } logger.Debug($"Processing position update"); return(jobsControllerUtils.AddPosition(backtestJobName, position)); }
public static BacktestPositionModel ToPositionModel(this BacktestPosition position) { if (position == null) { return(null); } return(new BacktestPositionModel() { Cross = position.Cross, CumulativeCommissionUsd = position.CommissionUsd, PositionQuantity = position.PositionQuantity / 1000, GrossCumulativePnlUsd = position.RealizedPnlUsd, LastUpdate = position.LastUpdate.ToLocalTime() }); }
internal GenericActionResult AddPosition(string jobName, BacktestPosition position) { //BacktestJob job; //if (activeJobs.TryGetValue(jobName, out job)) //{ // job.Output.Positions.Add(position); // activeJobs.AddOrUpdate(jobName, job, (key, oldValue) => job); // return new GenericActionResult(true, $"Added position update to job {jobName}"); //} //else //{ // string err = $"Not adding position update to unknown job {jobName}"; // logger.Error(err); // return new GenericActionResult(false, err); //} return(new GenericActionResult(false, "Disabled")); }
public async Task TestPostNewPosition() { string controllerEndpoint = "https://localhost:44379/"; PositionsConnector connector = PositionsConnector.GetConnector(controllerEndpoint); BacktestPosition position = new BacktestPosition() { LastUpdate = DateTimeOffset.Now, Cross = Cross.EURUSD, PositionQuantity = 10000, RealizedPnL = 100, RealizedPnlUsd = 100, UnrealizedPnL = 100, UnrealizedPnlUsd = 100 }; var result = await connector.PostPosition("RegTestJob", position); Assert.IsTrue(result.Success, result.Message); }
public async Task <GenericActionResult> PostPosition(string backtestJobName, BacktestPosition position, CancellationToken ct = default(CancellationToken)) { try { ct.ThrowIfCancellationRequested(); if (string.IsNullOrEmpty(backtestJobName)) { throw new ArgumentNullException(nameof(backtestJobName)); } if (position == null) { throw new ArgumentNullException(nameof(position)); } logger.Info($"About to send POST request to {controllerEndpoint}/api/positions/{backtestJobName}"); return(await controllerEndpoint.AppendPathSegment($"/api/positions/{backtestJobName}").PostJsonAsync(position, ct).ReceiveJson <GenericActionResult>()); } catch (OperationCanceledException) { string err = "Not posting position update: operation cancelled"; logger.Error(err); return(new GenericActionResult(false, err)); } catch (ArgumentNullException ex) { string err = $"Not posting position update: missing or invalid parameter {ex.ParamName}"; logger.Error(err); return(new GenericActionResult(false, err)); } catch (Exception ex) { string err = "Failed to post position update"; logger.Error(err, ex); return(new GenericActionResult(false, $"{err}: {ex.Message}")); } }
public GenericActionResult Post(string backtestJobName, [FromBody] BacktestPosition position) { return(utils.HandlePositionUpdate(backtestJobName, position)); }