using System; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using FinlyticCore.Dtos.Bot; using FinlyticCore.Dtos.TechnicalAnalysis; using FinlyticCore.Dtos.Trading; namespace FinlyticBot.Database.Entities; [Table("bot_positions")] public class BotPositionEntity { [Key] public Guid Id { get; set; } = Guid.NewGuid(); public Guid ProposalId { get; set; } [Required] [MaxLength(20)] public string Isin { get; set; } = string.Empty; [MaxLength(30)] public string Symbol { get; set; } = string.Empty; public BotExecutionVenue Venue { get; set; } = BotExecutionVenue.SyntheticPaperBroker; [MaxLength(60)] public string? AlpacaOrderId { get; set; } [MaxLength(60)] public string? ClientOrderId { get; set; } public SignalDirection Direction { get; set; } = SignalDirection.Buy; [Column(TypeName = "decimal(18,4)")] public decimal Quantity { get; set; } [Column(TypeName = "decimal(18,4)")] public decimal EntryPrice { get; set; } [Column(TypeName = "decimal(18,4)")] public decimal AverageBuyIn { get; set; } [Column(TypeName = "decimal(18,4)")] public decimal InitialStopLoss { get; set; } [Column(TypeName = "decimal(18,4)")] public decimal CurrentStopLoss { get; set; } [Column(TypeName = "decimal(18,4)")] public decimal CurrentPrice { get; set; } [Column(TypeName = "decimal(18,4)")] public decimal TakeProfit1 { get; set; } [Column(TypeName = "decimal(18,4)")] public decimal TakeProfit2 { get; set; } [Column(TypeName = "decimal(18,4)")] public decimal RealizedPnlEur { get; set; } [Column(TypeName = "decimal(18,4)")] public decimal TotalFeesEur { get; set; } public BotPositionStatus Status { get; set; } = BotPositionStatus.Active; public ExitPlan ExitPlan { get; set; } = null!; public DateTime OpenedAtUtc { get; set; } = DateTime.UtcNow; public DateTime? ClosedAtUtc { get; set; } public DateTime LastSyncAtUtc { get; set; } = DateTime.UtcNow; }