public static List <PositionElement> Positions() { IgPositions igPositions = new IgPositions(); string positions = igPositions.Get(session); PositionsList positionsList = JsonConvert.DeserializeObject <PositionsList>(positions); List <PositionElement> positionsToReturn = new List <PositionElement>(); double total = 0.0; double profit = 0.0; Console.WriteLine($"{"Name".PadRight(40)}{"Epic".PadRight(22)}{"Size".PadLeft(6)} { "Bid".PadLeft(8) } Stop \t Value \tOpen \t Profit \tReturn\t Deal Id "); foreach (PositionElement position in positionsList.Positions.OrderBy(p => p.Market.InstrumentName)) { double value = position.Position.DealSize * position.Market.Bid; double open = position.Position.OpenLevel * position.Position.DealSize; double returnPercentage = (value - open) / open; double stopPercentage = (position.Market.Bid - position.Position.StopLevel) / position.Market.Bid; total += value; profit += value - open; Console.WriteLine($"{position.Market.InstrumentName.Truncate(38).PadRight(40)}{position.Market.Epic.PadRight(22)}{position.Position.DealSize.ToString().PadLeft(6)} {position.Market.Bid.ToString("N2").PadLeft(8)} {stopPercentage.ToString("P1")} \t {Math.Round(value, 2).ToString("N0").PadLeft(8)}\t {Math.Round(open)}\t {Math.Round(value - open, 2).ToString("N2").PadLeft(8)}\t { returnPercentage.ToString("P1")}\t {position.Position.DealId}"); positionsToReturn.Add(position); } Console.WriteLine($"Total {total.ToString("N0")} Profit {profit.ToString("N2")}"); Console.WriteLine($"Positions {positionsList.Positions.Count()}"); return(positionsToReturn); }
// TODO Needs testing in open market public static void Buy(IgBuyModel igBuy) { IgPositions igPosition = new IgPositions(); string response = igPosition.Post(session, igBuy); Console.WriteLine(response); response = new IgConfirms().GetConfirms(session, igBuy.dealReference); Console.WriteLine(response); }
private static int Update(UpdateOptions options) { SwitchAccount(options.Account); List <PositionElement> positionsToReturn = Positions(); double stopPercentage = Convert.ToDouble(options.Value) / 100; foreach (PositionElement positionToAlter in positionsToReturn) { IgPositions igPositions = new IgPositions(); double percentageIncrease = (positionToAlter.Market.Bid - positionToAlter.Position.OpenLevel) / positionToAlter.Position.OpenLevel; if (percentageIncrease > stopPercentage) { double plannedStop = positionToAlter.Market.Bid - (positionToAlter.Market.Bid * stopPercentage); Console.WriteLine($"Postion to alter {positionToAlter.Market.InstrumentName} Current Stop {positionToAlter.Position.StopLevel} Planned new stop {plannedStop} "); positionToAlter.Position.StopLevel = plannedStop; igPositions.Put(session, positionToAlter.Position); } } return(0); }