Trading bot grain (#33)
* Trading bot Grain * Fix a bit more of the trading bot * Advance on the tradingbot grain * Fix build * Fix db script * Fix user login * Fix a bit backtest * Fix cooldown and backtest * start fixing bot start * Fix startup * Setup local db * Fix build and update candles and scenario * Add bot registry * Add reminder * Updateing the grains * fix bootstraping * Save stats on tick * Save bot data every tick * Fix serialization * fix save bot stats * Fix get candles * use dict instead of list for position * Switch hashset to dict * Fix a bit * Fix bot launch and bot view * add migrations * Remove the tolist * Add agent grain * Save agent summary * clean * Add save bot * Update get bots * Add get bots * Fix stop/restart * fix Update config * Update scanner table on new backtest saved * Fix backtestRowDetails.tsx * Fix agentIndex * Update agentIndex * Fix more things * Update user cache * Fix * Fix account load/start/restart/run
This commit is contained in:
@@ -0,0 +1,20 @@
|
||||
namespace Managing.Infrastructure.Databases.PostgreSql.Entities;
|
||||
|
||||
public class AgentSummaryEntity
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public int UserId { get; set; }
|
||||
public string AgentName { get; set; }
|
||||
public decimal TotalPnL { get; set; }
|
||||
public decimal TotalROI { get; set; }
|
||||
public int Wins { get; set; }
|
||||
public int Losses { get; set; }
|
||||
public DateTime? Runtime { get; set; }
|
||||
public DateTime CreatedAt { get; set; }
|
||||
public DateTime UpdatedAt { get; set; }
|
||||
public int ActiveStrategiesCount { get; set; }
|
||||
public decimal TotalVolume { get; set; }
|
||||
|
||||
// Navigation property
|
||||
public UserEntity User { get; set; }
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using static Managing.Common.Enums;
|
||||
|
||||
namespace Managing.Infrastructure.Databases.PostgreSql.Entities;
|
||||
|
||||
[Table("BotBackups")]
|
||||
public class BotBackupEntity
|
||||
{
|
||||
[Key]
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
[MaxLength(255)]
|
||||
public string Identifier { get; set; }
|
||||
|
||||
[MaxLength(255)]
|
||||
public string? UserName { get; set; }
|
||||
|
||||
public int? UserId { get; set; }
|
||||
|
||||
// Navigation properties
|
||||
[ForeignKey("UserId")]
|
||||
public UserEntity? User { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Bot configuration and state data stored as JSON string
|
||||
/// </summary>
|
||||
[Column(TypeName = "text")]
|
||||
public string Data { get; set; }
|
||||
|
||||
public BotStatus LastStatus { get; set; }
|
||||
|
||||
public DateTime CreateDate { get; set; } = DateTime.UtcNow;
|
||||
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
using static Managing.Common.Enums;
|
||||
|
||||
namespace Managing.Infrastructure.Databases.PostgreSql.Entities;
|
||||
|
||||
[Table("Bots")]
|
||||
public class BotEntity
|
||||
{
|
||||
[Key] public Guid Identifier { get; set; }
|
||||
|
||||
[Required] [MaxLength(255)] public required string Name { get; set; }
|
||||
|
||||
public Ticker Ticker { get; set; }
|
||||
|
||||
public int UserId { get; set; }
|
||||
|
||||
[Required] [ForeignKey("UserId")] public required UserEntity User { get; set; }
|
||||
|
||||
public BotStatus Status { get; set; }
|
||||
public DateTime CreateDate { get; set; }
|
||||
public DateTime UpdatedAt { get; set; }
|
||||
public DateTime StartupTime { get; set; }
|
||||
public int TradeWins { get; set; }
|
||||
public int TradeLosses { get; set; }
|
||||
public decimal Pnl { get; set; }
|
||||
public decimal Roi { get; set; }
|
||||
public decimal Volume { get; set; }
|
||||
public decimal Fees { get; set; }
|
||||
}
|
||||
@@ -7,55 +7,41 @@ namespace Managing.Infrastructure.Databases.PostgreSql.Entities;
|
||||
[Table("Positions")]
|
||||
public class PositionEntity
|
||||
{
|
||||
[Key]
|
||||
public int Id { get; set; }
|
||||
|
||||
[Required]
|
||||
[MaxLength(255)]
|
||||
public string Identifier { get; set; }
|
||||
|
||||
[Key] [Required] public Guid Identifier { get; set; }
|
||||
|
||||
public DateTime Date { get; set; }
|
||||
|
||||
[Column(TypeName = "decimal(18,8)")]
|
||||
public decimal ProfitAndLoss { get; set; }
|
||||
|
||||
|
||||
[Column(TypeName = "decimal(18,8)")] public decimal ProfitAndLoss { get; set; }
|
||||
|
||||
public TradeDirection OriginDirection { get; set; }
|
||||
public PositionStatus Status { get; set; }
|
||||
public Ticker Ticker { get; set; }
|
||||
public PositionInitiator Initiator { get; set; }
|
||||
|
||||
[MaxLength(255)]
|
||||
public string SignalIdentifier { get; set; }
|
||||
|
||||
[MaxLength(255)]
|
||||
public string AccountName { get; set; }
|
||||
|
||||
[MaxLength(255)]
|
||||
public string? UserName { get; set; }
|
||||
|
||||
|
||||
[MaxLength(255)] public string SignalIdentifier { get; set; }
|
||||
|
||||
[MaxLength(255)] public string AccountName { get; set; }
|
||||
|
||||
[MaxLength(255)] public string? UserName { get; set; }
|
||||
|
||||
// Foreign keys to trades
|
||||
public int? OpenTradeId { get; set; }
|
||||
public int? StopLossTradeId { get; set; }
|
||||
public int? TakeProfit1TradeId { get; set; }
|
||||
public int? TakeProfit2TradeId { get; set; }
|
||||
|
||||
|
||||
// Money management data stored as JSON
|
||||
[Column(TypeName = "text")]
|
||||
public string? MoneyManagementJson { get; set; }
|
||||
|
||||
[Column(TypeName = "text")] public string? MoneyManagementJson { get; set; }
|
||||
|
||||
public DateTime CreatedAt { get; set; } = DateTime.UtcNow;
|
||||
public DateTime UpdatedAt { get; set; } = DateTime.UtcNow;
|
||||
|
||||
|
||||
// Navigation properties
|
||||
[ForeignKey("OpenTradeId")]
|
||||
public virtual TradeEntity? OpenTrade { get; set; }
|
||||
|
||||
[ForeignKey("StopLossTradeId")]
|
||||
public virtual TradeEntity? StopLossTrade { get; set; }
|
||||
|
||||
[ForeignKey("TakeProfit1TradeId")]
|
||||
public virtual TradeEntity? TakeProfit1Trade { get; set; }
|
||||
|
||||
[ForeignKey("TakeProfit2TradeId")]
|
||||
public virtual TradeEntity? TakeProfit2Trade { get; set; }
|
||||
}
|
||||
[ForeignKey("OpenTradeId")] public virtual TradeEntity? OpenTrade { get; set; }
|
||||
|
||||
[ForeignKey("StopLossTradeId")] public virtual TradeEntity? StopLossTrade { get; set; }
|
||||
|
||||
[ForeignKey("TakeProfit1TradeId")] public virtual TradeEntity? TakeProfit1Trade { get; set; }
|
||||
|
||||
[ForeignKey("TakeProfit2TradeId")] public virtual TradeEntity? TakeProfit2Trade { get; set; }
|
||||
}
|
||||
@@ -1,10 +1,14 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.ComponentModel.DataAnnotations.Schema;
|
||||
|
||||
namespace Managing.Infrastructure.Databases.PostgreSql.Entities;
|
||||
|
||||
[Table("Users")]
|
||||
public class UserEntity
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string? AgentName { get; set; }
|
||||
[Key] public int Id { get; set; }
|
||||
[Required] [MaxLength(255)] public required string Name { get; set; }
|
||||
[MaxLength(255)] public string? AgentName { get; set; }
|
||||
public string? AvatarUrl { get; set; }
|
||||
public string? TelegramChannel { get; set; }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user