diff --git a/Extensions/MongoDbLiteDBShim.cs b/Extensions/MongoDbLiteDBShim.cs deleted file mode 100644 index 2c58c3d..0000000 --- a/Extensions/MongoDbLiteDBShim.cs +++ /dev/null @@ -1,93 +0,0 @@ -using System; -using MongoDB.Driver; -using PolyTraderSharp.Extensions; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using PolyTraderSharp.Models; - -namespace PolyTraderSharp.Extensions -{ - public static class MongoDbLiteDBShim - { - // 1. LiteDB: FindOne(predicate) -> MongoDB: Find(predicate).FirstOrDefault() - public static T LiteFindOne(this IMongoCollection col, Expression> predicate) - { - return col.Find(predicate).FirstOrDefault(); - } - - // 2. LiteDB: Find(predicate) -> MongoDB: Find(predicate).ToList() - // Note: LiteDB returns IEnumerable. ToList() is perfectly fine for iteration. - public static List LiteFind(this IMongoCollection col, Expression> predicate) - { - return col.Find(predicate).ToList(); - } - - // 3. LiteDB: FindAll() -> MongoDB: Find(_ => true).ToList() - public static List LiteFindAll(this IMongoCollection col) - { - return col.Find(_ => true).ToList(); - } - - // 4. Upsert extensions mapped to Primary Keys - public static void Upsert(this IMongoCollection col, AccountState doc) - { - col.ReplaceOne(x => x.AccountId == doc.AccountId, doc, new ReplaceOptions { IsUpsert = true }); - } - - public static void Upsert(this IMongoCollection col, TrackedTrader doc) - { - col.ReplaceOne(x => x.Id == doc.Id, doc, new ReplaceOptions { IsUpsert = true }); - } - - public static void Upsert(this IMongoCollection col, Position doc) - { - col.ReplaceOne(x => x.TokenId == doc.TokenId, doc, new ReplaceOptions { IsUpsert = true }); - } - - public static void Upsert(this IMongoCollection col, MarketData doc) - { - col.ReplaceOne(x => x.Id == doc.Id, doc, new ReplaceOptions { IsUpsert = true }); - } - - // 5. Update (Updates without upserting if it doesn't exist) - public static void Update(this IMongoCollection col, TrackedTrader doc) - { - col.ReplaceOne(x => x.Id == doc.Id, doc); - } - - public static void Update(this IMongoCollection col, AccountState doc) - { - col.ReplaceOne(x => x.AccountId == doc.AccountId, doc); - } - - public static void Update(this IMongoCollection col, MarketData doc) - { - col.ReplaceOne(x => x.Id == doc.Id, doc); - } - - // 6. Insert maps perfectly to InsertOne - public static void Insert(this IMongoCollection col, T doc) - { - col.InsertOne(doc); - } - - // 7. Delete (by TokenId / String ID) - public static void Delete(this IMongoCollection col, string tokenId) - { - col.DeleteOne(x => x.TokenId == tokenId); - } - - // 8. EnsureIndex shim (MongoDB Index Creation) - public static void EnsureIndex(this IMongoCollection col, Expression> property) - { - try - { - var indexKeys = Builders.IndexKeys.Ascending(property); - var indexModel = new CreateIndexModel(indexKeys); - col.Indexes.CreateOne(indexModel); - } - catch { } - } - } -} diff --git a/PolyTrader.App.csproj b/PolyTrader.App.csproj index 28f3660..5b762ff 100644 --- a/PolyTrader.App.csproj +++ b/PolyTrader.App.csproj @@ -59,8 +59,6 @@ - - diff --git a/Program.cs b/Program.cs index 87ee0c7..dd3dcae 100644 --- a/Program.cs +++ b/Program.cs @@ -1,6 +1,5 @@ using System; -using MongoDB.Driver; -using PolyTraderSharp.Extensions; +using System.Linq; using System.Net.Http; using System.Threading.Channels; using System.Windows.Forms; @@ -26,13 +25,6 @@ internal static class Program [STAThread] private static void Main(string[] args) { - // Einmalige Config-Migration Mongo -> MySQL (Phase 6, Stufe 4). Kein UI-Start. - if (args.Length > 0 && string.Equals(args[0], "--migrate-config", StringComparison.OrdinalIgnoreCase)) - { - RunConfigMigration(); - return; - } - // Config-Migration aus mongoexport-JSON (Ordner, Default "MongoDB") -> MySQL. if (args.Length > 0 && string.Equals(args[0], "--migrate-json", StringComparison.OrdinalIgnoreCase)) { @@ -59,18 +51,9 @@ internal static class Program { var databaseOptions = new DatabaseOptions { - Provider = context.Configuration["Database:Provider"] ?? "Mongo", - MySqlConnectionString = context.Configuration["Database:MySqlConnectionString"] ?? string.Empty, - ConnectionString = context.Configuration["Database:ConnectionString"] ?? "mongodb://localhost:27017", - DatabaseName = context.Configuration["Database:DatabaseName"] ?? "PolyTraderDB" + MySqlConnectionString = context.Configuration["Database:MySqlConnectionString"] ?? string.Empty }; services.Configure(context.Configuration.GetSection(DatabaseOptions.SectionName)); - services.AddSingleton((IServiceProvider sp) => - { - var dbOptions = sp.GetRequiredService>().Value; - var client = new MongoClient(dbOptions.ConnectionString); - return client.GetDatabase(dbOptions.DatabaseName); - }); services.AddCorePersistence(databaseOptions); services.AddSingleton(); services.AddSingleton((IServiceProvider sp) => ServerSettings.Load("server_settings.xml")); @@ -124,37 +107,19 @@ internal static class Program services.AddHostedService(); services.AddHostedService((IServiceProvider sp) => sp.GetRequiredService()); services.AddHostedService((IServiceProvider sp) => sp.GetRequiredService()); - services.AddTransient(); services.AddSingleton(); services.AddTransient(); }).Build(); - try + try { - var db = AppHost.Services.GetRequiredService(); - - // Einmal-Bereinigung (Alt-Bug): entferne closed_trades mit ObjectId-_id. - // Das _id muss die int-TradeId sein; fehlerhafte Auto-ObjectIds werden verworfen. - // Läuft jetzt über die konfigurierte DB statt über einen hart codierten Client. - try - { - var cleanupCol = db.GetCollection("closed_trades"); - cleanupCol.DeleteMany(Builders.Filter.Type("_id", MongoDB.Bson.BsonType.ObjectId)); - } - catch { } - + // Trade-Nummerierung fortsetzen: höchste bestehende TradeId aus dem Log lesen. var copyState = AppHost.Services.GetRequiredService(); - var maxTradeDoc = db.GetCollection("closed_trades") - .Find(Builders.Filter.Empty) - .SortByDescending(d => d["_id"]) - .Limit(1) - .FirstOrDefault(); - - if (maxTradeDoc != null && maxTradeDoc.Contains("_id")) - { - copyState.TotalCopyTrades = maxTradeDoc["_id"].AsInt32; - } - } + var tradeLog = AppHost.Services.GetRequiredService(); + var allTrades = tradeLog.Find(_ => true); + if (allTrades.Count > 0) + copyState.TotalCopyTrades = allTrades.Max(t => t.TradeId); + } catch { } AppHost.Start(); @@ -232,28 +197,6 @@ internal static class Program AppHost.StopAsync().GetAwaiter().GetResult(); } - private static void RunConfigMigration() - { - var config = new Microsoft.Extensions.Configuration.ConfigurationBuilder() - .SetBasePath(System.IO.Directory.GetCurrentDirectory()) - .AddJsonFile("appsettings.json", optional: true) - .AddJsonFile("appsettings.Local.json", optional: true) - .AddEnvironmentVariables() - .Build(); - - var mongoConn = config["Database:ConnectionString"] ?? "mongodb://localhost:27017"; - var mongoDbName = config["Database:DatabaseName"] ?? "PolyTraderDB"; - var mySql = config["Database:MySqlConnectionString"] ?? string.Empty; - - if (string.IsNullOrWhiteSpace(mySql)) - { - Console.WriteLine("FEHLER: Database:MySqlConnectionString fehlt (appsettings.Local.json)."); - return; - } - - Services.ConfigMigrator.Run(mongoConn, mongoDbName, mySql); - } - private static void RunConfigMigrationFromJson(string folder) { var config = new Microsoft.Extensions.Configuration.ConfigurationBuilder() diff --git a/Ui/LauncherForm.Designer.cs b/Ui/LauncherForm.Designer.cs index 3b320a7..5168eee 100644 --- a/Ui/LauncherForm.Designer.cs +++ b/Ui/LauncherForm.Designer.cs @@ -19,7 +19,6 @@ namespace PolyTraderSharp.Ui { menuStrip = new MenuStrip(); miDatei = new ToolStripMenuItem(); - miLegacy = new ToolStripMenuItem(); miBeenden = new ToolStripMenuItem(); toolstrip_windows = new ToolStrip(); btn_dashboard = new ToolStripButton(); @@ -51,17 +50,11 @@ namespace PolyTraderSharp.Ui // // miDatei // - miDatei.DropDownItems.AddRange(new ToolStripItem[] { miLegacy, miBeenden }); + miDatei.DropDownItems.AddRange(new ToolStripItem[] { miBeenden }); miDatei.Name = "miDatei"; miDatei.Size = new Size(69, 29); miDatei.Text = "Datei"; - // - // miLegacy - // - miLegacy.Name = "miLegacy"; - miLegacy.Size = new Size(275, 34); - miLegacy.Text = "Legacy-UI (alte Tabs)"; - // + // // miBeenden // miBeenden.Name = "miBeenden"; @@ -202,7 +195,6 @@ namespace PolyTraderSharp.Ui private System.Windows.Forms.MenuStrip menuStrip; private System.Windows.Forms.ToolStripMenuItem miDatei; - private System.Windows.Forms.ToolStripMenuItem miLegacy; private System.Windows.Forms.ToolStripMenuItem miBeenden; private ToolStrip toolstrip_windows; private ToolStripButton btn_settings; diff --git a/Ui/LauncherForm.cs b/Ui/LauncherForm.cs index f610a7c..bd35214 100644 --- a/Ui/LauncherForm.cs +++ b/Ui/LauncherForm.cs @@ -21,7 +21,6 @@ namespace PolyTraderSharp.Ui private readonly TradingState _state; private readonly System.Windows.Forms.Timer _statusTimer = new() { Interval = 1000 }; private readonly Dictionary _viewButtons; - private frm_main? _legacyForm; public LauncherForm(ShellUiHost uiHost, IServiceProvider services) { @@ -47,7 +46,6 @@ namespace PolyTraderSharp.Ui btn_liveTrading.Click += (_, _) => CycleLiveTrading(); btn_demoTrading.Click += (_, _) => CycleDemoTrading(); - miLegacy.Click += (_, _) => OpenLegacy(); miBeenden.Click += (_, _) => Close(); // Offen-Status der Fenster spiegeln (Button „checked", wenn Fenster offen). @@ -126,25 +124,8 @@ namespace PolyTraderSharp.Ui lbl_ratelimit.Text = $"API: {(_state.IsAlchemyHealthy ? "WSS aktiv" : "Polling")}"; - // Toggle-Buttons mit externem State synchron halten (z.B. Änderungen aus der Legacy-UI). UpdateTradingToggles(); UpdateWindowButtonStates(); } - - private void OpenLegacy() - { - if (_legacyForm != null && !_legacyForm.IsDisposed) - { - if (_legacyForm.WindowState == FormWindowState.Minimized) - _legacyForm.WindowState = FormWindowState.Normal; - _legacyForm.BringToFront(); - _legacyForm.Activate(); - return; - } - - _legacyForm = _services.GetRequiredService(); - _legacyForm.FormClosed += (_, _) => _legacyForm = null; - _legacyForm.Show(); - } } } diff --git a/appsettings.json b/appsettings.json index 0e79295..f292c1e 100644 --- a/appsettings.json +++ b/appsettings.json @@ -1,7 +1,6 @@ { "Database": { - "Provider": "MySql", - "ConnectionString": "mongodb://localhost:27017", - "DatabaseName": "PolyTraderDB" + "_comment": "MySqlConnectionString liegt in der gitignorierten appsettings.Local.json.", + "MySqlConnectionString": "" } } diff --git a/frm_analytics.Designer.cs b/frm_analytics.Designer.cs deleted file mode 100644 index 149136a..0000000 --- a/frm_analytics.Designer.cs +++ /dev/null @@ -1,111 +0,0 @@ -namespace PolyTraderSharp -{ - partial class frm_analytics - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - menuStrip1 = new MenuStrip(); - toolStrip1 = new ToolStrip(); - tabControl1 = new TabControl(); - tabPage1 = new TabPage(); - tabPage2 = new TabPage(); - tabControl1.SuspendLayout(); - SuspendLayout(); - // - // menuStrip1 - // - menuStrip1.ImageScalingSize = new Size(24, 24); - menuStrip1.Location = new Point(0, 0); - menuStrip1.Name = "menuStrip1"; - menuStrip1.Size = new Size(2229, 24); - menuStrip1.TabIndex = 0; - menuStrip1.Text = "menuStrip1"; - // - // toolStrip1 - // - toolStrip1.ImageScalingSize = new Size(24, 24); - toolStrip1.Location = new Point(0, 24); - toolStrip1.Name = "toolStrip1"; - toolStrip1.Size = new Size(2229, 25); - toolStrip1.TabIndex = 1; - toolStrip1.Text = "toolStrip1"; - // - // tabControl1 - // - tabControl1.Controls.Add(tabPage1); - tabControl1.Controls.Add(tabPage2); - tabControl1.Location = new Point(0, 52); - tabControl1.Name = "tabControl1"; - tabControl1.SelectedIndex = 0; - tabControl1.Size = new Size(2229, 1115); - tabControl1.TabIndex = 2; - // - // tabPage1 - // - tabPage1.Location = new Point(4, 34); - tabPage1.Name = "tabPage1"; - tabPage1.Padding = new Padding(3); - tabPage1.Size = new Size(2221, 1077); - tabPage1.TabIndex = 0; - tabPage1.Text = "tabPage1"; - tabPage1.UseVisualStyleBackColor = true; - // - // tabPage2 - // - tabPage2.Location = new Point(4, 34); - tabPage2.Name = "tabPage2"; - tabPage2.Padding = new Padding(3); - tabPage2.Size = new Size(2221, 1077); - tabPage2.TabIndex = 1; - tabPage2.Text = "tabPage2"; - tabPage2.UseVisualStyleBackColor = true; - // - // frm_analytics - // - AutoScaleDimensions = new SizeF(10F, 25F); - AutoScaleMode = AutoScaleMode.Font; - ClientSize = new Size(2229, 1169); - Controls.Add(tabControl1); - Controls.Add(toolStrip1); - Controls.Add(menuStrip1); - MainMenuStrip = menuStrip1; - Name = "frm_analytics"; - Text = "Analyse"; - tabControl1.ResumeLayout(false); - ResumeLayout(false); - PerformLayout(); - } - - #endregion - - private MenuStrip menuStrip1; - private ToolStrip toolStrip1; - private TabControl tabControl1; - private TabPage tabPage1; - private TabPage tabPage2; - } -} diff --git a/frm_analytics.cs b/frm_analytics.cs deleted file mode 100644 index 478f7f2..0000000 --- a/frm_analytics.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using MongoDB.Driver; -using PolyTraderSharp.Extensions; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; - -namespace PolyTraderSharp -{ - public partial class frm_analytics : Form - { - public frm_analytics() - { - InitializeComponent(); - } - } -} diff --git a/frm_analytics.resx b/frm_analytics.resx deleted file mode 100644 index 8a01759..0000000 --- a/frm_analytics.resx +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - - 175, 17 - - \ No newline at end of file diff --git a/frm_main.Designer.cs b/frm_main.Designer.cs deleted file mode 100644 index 74e9ea8..0000000 --- a/frm_main.Designer.cs +++ /dev/null @@ -1,2471 +0,0 @@ -namespace PolyTraderSharp -{ - partial class frm_main - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - components = new System.ComponentModel.Container(); - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frm_main)); - menuStrip1 = new MenuStrip(); - toolStripMenuItem_datei = new ToolStripMenuItem(); - btn_ms_test = new ToolStripMenuItem(); - toolStripMenuItem1 = new ToolStripSeparator(); - btn_ms_beenden = new ToolStripMenuItem(); - bearbeitenToolStripMenuItem = new ToolStripMenuItem(); - btn_showProgrammFolder = new ToolStripMenuItem(); - vPNToolStripMenuItem = new ToolStripMenuItem(); - btn_vpnConnect = new ToolStripMenuItem(); - btn_vpndisconnect = new ToolStripMenuItem(); - toolStripMenuItem2 = new ToolStripMenuItem(); - btn_debug_pollinglog = new ToolStripMenuItem(); - btn_debugorderpayload = new ToolStripMenuItem(); - btn_debugMTHistory = new ToolStripMenuItem(); - btn_sixshares = new ToolStripMenuItem(); - btn_cleanMasterTraders = new ToolStripMenuItem(); - btn_debugLiteDB = new ToolStripMenuItem(); - statusStrip1 = new StatusStrip(); - toolStripStatusLabel_cpuram = new ToolStripStatusLabel(); - toolStripStatusLabel_ratelimit = new ToolStripStatusLabel(); - toolStripStatusLabel_ping = new ToolStripStatusLabel(); - toolStripStatusLabel_vpn = new ToolStripStatusLabel(); - toolStripStatusLabel_build = new ToolStripStatusLabel(); - tabControl_dash = new TabControl(); - tabPage_dashboard = new TabPage(); - toolStrip3 = new ToolStrip(); - btn_dashboardRefresh = new ToolStripButton(); - toolStripSeparator7 = new ToolStripSeparator(); - groupBox_Accountdetails = new GroupBox(); - dgv_permaster = new DataGridView(); - col_mastername = new DataGridViewTextBoxColumn(); - col_aktproz = new DataGridViewTextBoxColumn(); - col_aktUSD = new DataGridViewTextBoxColumn(); - tabControl1 = new TabControl(); - tabPage_dash_topmaster = new TabPage(); - dgv_dash_toptraders = new DataGridView(); - col_name = new DataGridViewLinkColumn(); - col_Winrate = new DataGridViewTextBoxColumn(); - col_pl = new DataGridViewTextBoxColumn(); - col_trades = new DataGridViewTextBoxColumn(); - tabPage_dash_flopmaster = new TabPage(); - dgv_dash_floptraders = new DataGridView(); - dataGridViewLinkColumn1 = new DataGridViewLinkColumn(); - dataGridViewTextBoxColumn1 = new DataGridViewTextBoxColumn(); - dataGridViewTextBoxColumn2 = new DataGridViewTextBoxColumn(); - dataGridViewTextBoxColumn3 = new DataGridViewTextBoxColumn(); - dgv_dashboard_detaillaufzeit = new DataGridView(); - Column_Laufzeit = new DataGridViewTextBoxColumn(); - Column_LaufzeitProz = new DataGridViewTextBoxColumn(); - Column_laufzeitUSD = new DataGridViewTextBoxColumn(); - Column_Aktuellproz = new DataGridViewTextBoxColumn(); - Column_aktuellusd = new DataGridViewTextBoxColumn(); - groupBox_Accountuebersicht = new GroupBox(); - dgv_dashboard = new DataGridView(); - col_dgv_dashboard_AccountId = new DataGridViewTextBoxColumn(); - col_dgv_dashboard_IsDemo = new DataGridViewTextBoxColumn(); - col_dgv_dashboard_IsActive = new DataGridViewTextBoxColumn(); - col_dgv_dashboard_AccountName = new DataGridViewTextBoxColumn(); - col_dgv_dashboard_TotalBalance = new DataGridViewTextBoxColumn(); - col_dgv_dashboard_AvailableBalance = new DataGridViewTextBoxColumn(); - col_dgv_dashboard_PositionBalance = new DataGridViewTextBoxColumn(); - col_dgv_dashboard_OpenTradesCount = new DataGridViewTextBoxColumn(); - col_dgv_dashboard_ClosedTrades24h = new DataGridViewTextBoxColumn(); - col_dgv_dashboard_Pnl24h = new DataGridViewTextBoxColumn(); - col_dgv_dashboard_Winrate24h = new DataGridViewTextBoxColumn(); - col_dgv_dashboard_ClosedTrades7d = new DataGridViewTextBoxColumn(); - col_dgv_dashboard_Pnl7d = new DataGridViewTextBoxColumn(); - col_dgv_dashboard_Winrate7d = new DataGridViewTextBoxColumn(); - tabPage_terminal = new TabPage(); - tabPage_trades = new TabPage(); - tabControl_trades = new TabControl(); - tabPage_openTrades = new TabPage(); - toolStrip_openTrades = new ToolStrip(); - btn_opentrades_refresh = new ToolStripButton(); - toolStripSeparator5 = new ToolStripSeparator(); - toolStripLabel2 = new ToolStripLabel(); - cb_opentrades_account = new ToolStripComboBox(); - toolStripSeparator4 = new ToolStripSeparator(); - toolStripLabel3 = new ToolStripLabel(); - cb_opentrades_laufzeit = new ToolStripComboBox(); - dgv_openTrades = new DataGridView(); - col_dgv_openTrades_AccountName = new DataGridViewTextBoxColumn(); - col_dgv_openTrades_SourceTraderName = new DataGridViewLinkColumn(); - col_dgv_openTrades_MarketQuestion = new DataGridViewLinkColumn(); - col_dgv_openTrades_MarketSlug = new DataGridViewTextBoxColumn(); - col_dgv_openTrades_Outcome = new DataGridViewTextBoxColumn(); - col_dgv_openTrades_Side = new DataGridViewTextBoxColumn(); - col_dgv_openTrades_EntryPrice = new DataGridViewTextBoxColumn(); - col_dgv_openTrades_CurrentPrice = new DataGridViewTextBoxColumn(); - col_dgv_openTrades_Size = new DataGridViewTextBoxColumn(); - col_dgv_openTrades_AmountUsd = new DataGridViewTextBoxColumn(); - col_dgv_openTrades_CloseBtn = new DataGridViewButtonColumn(); - tabPage_closedTrades = new TabPage(); - dgv_closedTrades = new DataGridView(); - col_dgv_closedTrades_AccountName = new DataGridViewTextBoxColumn(); - col_dgv_closedTrades_SourceTraderName = new DataGridViewLinkColumn(); - col_dgv_closedTrades_TradeId = new DataGridViewTextBoxColumn(); - col_dgv_closedTrades_AccountId = new DataGridViewTextBoxColumn(); - col_dgv_closedTrades_SourceTraderId = new DataGridViewTextBoxColumn(); - col_dgv_closedTrades_IsDemo = new DataGridViewTextBoxColumn(); - col_dgv_closedTrades_TokenId = new DataGridViewTextBoxColumn(); - col_dgv_closedTrades_MarketSlug = new DataGridViewTextBoxColumn(); - col_dgv_closedTrades_MarketQuestion = new DataGridViewLinkColumn(); - col_dgv_closedTrades_Outcome = new DataGridViewTextBoxColumn(); - col_dgv_closedTrades_Side = new DataGridViewTextBoxColumn(); - col_dgv_closedTrades_EntryPrice = new DataGridViewTextBoxColumn(); - col_dgv_closedTrades_ExitPrice = new DataGridViewTextBoxColumn(); - col_dgv_closedTrades_Size = new DataGridViewTextBoxColumn(); - col_dgv_closedTrades_RealizedPnl = new DataGridViewTextBoxColumn(); - col_dgv_closedTrades_PnlPercent = new DataGridViewTextBoxColumn(); - col_dgv_closedTrades_TotalFees = new DataGridViewTextBoxColumn(); - col_dgv_closedTrades_OpenedAt = new DataGridViewTextBoxColumn(); - col_dgv_closedTrades_ClosedAt = new DataGridViewTextBoxColumn(); - col_dgv_closedTrades_ExitReason = new DataGridViewTextBoxColumn(); - toolStrip_closedtrades = new ToolStrip(); - toolStripLabel1 = new ToolStripLabel(); - cb_closedTradesAccounts = new ToolStripComboBox(); - toolStripSeparator3 = new ToolStripSeparator(); - btn_closedtrades_refresh = new ToolStripButton(); - tabPage_jobs = new TabPage(); - toolStrip4 = new ToolStrip(); - btn_telegramtest = new Button(); - imageList_tabpages = new ImageList(components); - toolStrip_terminal = new ToolStrip(); - Label_TerminalLoglevel = new ToolStripLabel(); - cb_terminalLogLevel = new ToolStripComboBox(); - toolStripSeparator8 = new ToolStripSeparator(); - btn_autoscroll = new ToolStripButton(); - rtb_Terminal = new RichTextBox(); - tabPage_mastertraders = new TabPage(); - splitContainer_masterTraders = new SplitContainer(); - propertyGrid_masters = new PropertyGrid(); - clb_assignedAccounts = new CheckedListBox(); - dgv_masterTraders = new DataGridView(); - col_dgv_masterTraders_Id = new DataGridViewTextBoxColumn(); - col_dgv_masterTraders_WalletAddress = new DataGridViewTextBoxColumn(); - col_dgv_masterTraders_DisplayName = new DataGridViewTextBoxColumn(); - col_dgv_masterTraders_Category = new DataGridViewTextBoxColumn(); - col_dgv_masterTraders_Description = new DataGridViewTextBoxColumn(); - col_dgv_masterTraders_Reasoning = new DataGridViewTextBoxColumn(); - col_dgv_masterTraders_IsActive = new DataGridViewTextBoxColumn(); - col_dgv_masterTraders_IsHidden = new DataGridViewTextBoxColumn(); - col_dgv_masterTraders_TotalTrades = new DataGridViewTextBoxColumn(); - col_dgv_masterTraders_WinningTrades = new DataGridViewTextBoxColumn(); - col_dgv_masterTraders_Winrate30t = new DataGridViewTextBoxColumn(); - col_dgv_masterTraders_TotalPnl = new DataGridViewTextBoxColumn(); - toolStrip_MasterTraders = new ToolStrip(); - btn_Mastertraders_add = new ToolStripButton(); - btn_Mastertraders_del = new ToolStripButton(); - tabPage_slavetraders = new TabPage(); - toolStrip_slaveTraders = new ToolStrip(); - btn_Slavetraders_add = new ToolStripButton(); - btn_Slavetraders_del = new ToolStripButton(); - toolStripSeparator2 = new ToolStripSeparator(); - toolStripLabel_deposit = new ToolStripLabel(); - toolStripTextBox_amount = new ToolStripTextBox(); - btn_deposit = new ToolStripButton(); - btn_withdraw = new ToolStripButton(); - btn_demoreset = new ToolStripButton(); - splitContainer_SlaveTraders = new SplitContainer(); - propertyGrid_slaves = new PropertyGrid(); - dgv_SlaveTraders = new DataGridView(); - col_dgv_SlaveTraders_AccountId = new DataGridViewTextBoxColumn(); - col_dgv_SlaveTraders_Name = new DataGridViewTextBoxColumn(); - col_dgv_SlaveTraders_WalletAddress = new DataGridViewTextBoxColumn(); - col_dgv_SlaveTraders_IsDemo = new DataGridViewTextBoxColumn(); - col_dgv_SlaveTraders_IsActive = new DataGridViewTextBoxColumn(); - col_dgv_SlaveTraders_CloseOnlyMode = new DataGridViewTextBoxColumn(); - col_dgv_SlaveTraders_PayoutAddress = new DataGridViewTextBoxColumn(); - col_dgv_SlaveTraders_PayoutLimitUsd = new DataGridViewTextBoxColumn(); - col_dgv_SlaveTraders_PerMarketLimit = new DataGridViewTextBoxColumn(); - col_dgv_SlaveTraders_MaxPriceDifference = new DataGridViewTextBoxColumn(); - col_dgv_SlaveTraders_MaxBuyPrice = new DataGridViewTextBoxColumn(); - col_dgv_SlaveTraders_ProfitTarget = new DataGridViewTextBoxColumn(); - col_dgv_SlaveTraders_LimitUnder6h = new DataGridViewTextBoxColumn(); - col_dgv_SlaveTraders_LimitUnder24h = new DataGridViewTextBoxColumn(); - col_dgv_SlaveTraders_LimitUnder72h = new DataGridViewTextBoxColumn(); - col_dgv_SlaveTraders_LimitOver72h = new DataGridViewTextBoxColumn(); - tabPage_settings = new TabPage(); - toolStrip2 = new ToolStrip(); - btn_savesettings = new ToolStripButton(); - propertyGrid_serversettings = new PropertyGrid(); - toolStrip1 = new ToolStrip(); - btn_livetradingactive = new ToolStripButton(); - toolStripSeparator6 = new ToolStripSeparator(); - btn_demotradingactive = new ToolStripButton(); - toolStripSeparator1 = new ToolStripSeparator(); - tabControl_main = new TabControl(); - maintab_dashboard = new TabPage(); - maintab_terminal = new TabPage(); - maintab_settings = new TabPage(); - tabcontrol_settings = new TabControl(); - maintab_jobs = new TabPage(); - toolStrip5 = new ToolStrip(); - dgv_jobs = new DataGridView(); - maintab_copytrading = new TabPage(); - tabPage_Iicense = new TabPage(); - toolStrip6 = new ToolStrip(); - btn_licensecheck = new ToolStripButton(); - menuStrip1.SuspendLayout(); - statusStrip1.SuspendLayout(); - tabControl_dash.SuspendLayout(); - tabPage_dashboard.SuspendLayout(); - toolStrip3.SuspendLayout(); - groupBox_Accountdetails.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)dgv_permaster).BeginInit(); - tabControl1.SuspendLayout(); - tabPage_dash_topmaster.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)dgv_dash_toptraders).BeginInit(); - tabPage_dash_flopmaster.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)dgv_dash_floptraders).BeginInit(); - ((System.ComponentModel.ISupportInitialize)dgv_dashboard_detaillaufzeit).BeginInit(); - groupBox_Accountuebersicht.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)dgv_dashboard).BeginInit(); - tabPage_trades.SuspendLayout(); - tabControl_trades.SuspendLayout(); - tabPage_openTrades.SuspendLayout(); - toolStrip_openTrades.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)dgv_openTrades).BeginInit(); - tabPage_closedTrades.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)dgv_closedTrades).BeginInit(); - toolStrip_closedtrades.SuspendLayout(); - tabPage_jobs.SuspendLayout(); - toolStrip_terminal.SuspendLayout(); - tabPage_mastertraders.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)splitContainer_masterTraders).BeginInit(); - splitContainer_masterTraders.Panel1.SuspendLayout(); - splitContainer_masterTraders.Panel2.SuspendLayout(); - splitContainer_masterTraders.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)dgv_masterTraders).BeginInit(); - toolStrip_MasterTraders.SuspendLayout(); - tabPage_slavetraders.SuspendLayout(); - toolStrip_slaveTraders.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)splitContainer_SlaveTraders).BeginInit(); - splitContainer_SlaveTraders.Panel1.SuspendLayout(); - splitContainer_SlaveTraders.Panel2.SuspendLayout(); - splitContainer_SlaveTraders.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)dgv_SlaveTraders).BeginInit(); - tabPage_settings.SuspendLayout(); - toolStrip2.SuspendLayout(); - toolStrip1.SuspendLayout(); - tabControl_main.SuspendLayout(); - maintab_dashboard.SuspendLayout(); - maintab_terminal.SuspendLayout(); - maintab_settings.SuspendLayout(); - tabcontrol_settings.SuspendLayout(); - maintab_jobs.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)dgv_jobs).BeginInit(); - tabPage_Iicense.SuspendLayout(); - toolStrip6.SuspendLayout(); - SuspendLayout(); - // - // menuStrip1 - // - menuStrip1.ImageScalingSize = new Size(24, 24); - menuStrip1.Items.AddRange(new ToolStripItem[] { toolStripMenuItem_datei, bearbeitenToolStripMenuItem, vPNToolStripMenuItem, toolStripMenuItem2 }); - menuStrip1.Location = new Point(0, 0); - menuStrip1.Name = "menuStrip1"; - menuStrip1.Size = new Size(2538, 33); - menuStrip1.TabIndex = 0; - menuStrip1.Text = "menuStrip1"; - // - // toolStripMenuItem_datei - // - toolStripMenuItem_datei.DropDownItems.AddRange(new ToolStripItem[] { btn_ms_test, toolStripMenuItem1, btn_ms_beenden }); - toolStripMenuItem_datei.Name = "toolStripMenuItem_datei"; - toolStripMenuItem_datei.Size = new Size(69, 29); - toolStripMenuItem_datei.Text = "Datei"; - toolStripMenuItem_datei.TextAlign = ContentAlignment.MiddleRight; - // - // btn_ms_test - // - btn_ms_test.Name = "btn_ms_test"; - btn_ms_test.Size = new Size(182, 34); - btn_ms_test.Text = "Test"; - // - // toolStripMenuItem1 - // - toolStripMenuItem1.Name = "toolStripMenuItem1"; - toolStripMenuItem1.Size = new Size(179, 6); - // - // btn_ms_beenden - // - btn_ms_beenden.Name = "btn_ms_beenden"; - btn_ms_beenden.Size = new Size(182, 34); - btn_ms_beenden.Text = "Beenden"; - // - // bearbeitenToolStripMenuItem - // - bearbeitenToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { btn_showProgrammFolder }); - bearbeitenToolStripMenuItem.Name = "bearbeitenToolStripMenuItem"; - bearbeitenToolStripMenuItem.Size = new Size(58, 29); - bearbeitenToolStripMenuItem.Text = "Edit"; - // - // btn_showProgrammFolder - // - btn_showProgrammFolder.Name = "btn_showProgrammFolder"; - btn_showProgrammFolder.Size = new Size(213, 34); - btn_showProgrammFolder.Text = "Show Folder"; - btn_showProgrammFolder.Click += btn_showProgrammFolder_Click; - // - // vPNToolStripMenuItem - // - vPNToolStripMenuItem.DropDownItems.AddRange(new ToolStripItem[] { btn_vpnConnect, btn_vpndisconnect }); - vPNToolStripMenuItem.Name = "vPNToolStripMenuItem"; - vPNToolStripMenuItem.Size = new Size(62, 29); - vPNToolStripMenuItem.Text = "VPN"; - // - // btn_vpnConnect - // - btn_vpnConnect.Name = "btn_vpnConnect"; - btn_vpnConnect.Size = new Size(272, 34); - btn_vpnConnect.Text = "Verbinden"; - // - // btn_vpndisconnect - // - btn_vpndisconnect.Name = "btn_vpndisconnect"; - btn_vpndisconnect.Size = new Size(272, 34); - btn_vpndisconnect.Text = "Verbindung Trennen"; - // - // toolStripMenuItem2 - // - toolStripMenuItem2.DropDownItems.AddRange(new ToolStripItem[] { btn_debug_pollinglog, btn_debugorderpayload, btn_debugMTHistory, btn_sixshares, btn_cleanMasterTraders, btn_debugLiteDB }); - toolStripMenuItem2.Name = "toolStripMenuItem2"; - toolStripMenuItem2.Size = new Size(82, 29); - toolStripMenuItem2.Text = "Debug"; - // - // btn_debug_pollinglog - // - btn_debug_pollinglog.Name = "btn_debug_pollinglog"; - btn_debug_pollinglog.Size = new Size(371, 34); - btn_debug_pollinglog.Text = "Polling Logger"; - // - // btn_debugorderpayload - // - btn_debugorderpayload.Name = "btn_debugorderpayload"; - btn_debugorderpayload.Size = new Size(371, 34); - btn_debugorderpayload.Text = "Order Payload Logger"; - // - // btn_debugMTHistory - // - btn_debugMTHistory.Name = "btn_debugMTHistory"; - btn_debugMTHistory.Size = new Size(371, 34); - btn_debugMTHistory.Text = "Master-Trader Historie Laden"; - // - // btn_sixshares - // - btn_sixshares.Name = "btn_sixshares"; - btn_sixshares.Size = new Size(371, 34); - btn_sixshares.Text = "6 Shares Minimum"; - // - // btn_cleanMasterTraders - // - btn_cleanMasterTraders.Name = "btn_cleanMasterTraders"; - btn_cleanMasterTraders.Size = new Size(371, 34); - btn_cleanMasterTraders.Text = "Verwaiste Master-Trader Löschen"; - // - // btn_debugLiteDB - // - btn_debugLiteDB.Name = "btn_debugLiteDB"; - btn_debugLiteDB.Size = new Size(371, 34); - btn_debugLiteDB.Text = "LiteDBImport"; - // - // statusStrip1 - // - statusStrip1.ImageScalingSize = new Size(24, 24); - statusStrip1.Items.AddRange(new ToolStripItem[] { toolStripStatusLabel_cpuram, toolStripStatusLabel_ratelimit, toolStripStatusLabel_ping, toolStripStatusLabel_vpn, toolStripStatusLabel_build }); - statusStrip1.Location = new Point(0, 1302); - statusStrip1.Name = "statusStrip1"; - statusStrip1.Size = new Size(2538, 32); - statusStrip1.TabIndex = 1; - statusStrip1.Text = "statusStrip1"; - // - // toolStripStatusLabel_cpuram - // - toolStripStatusLabel_cpuram.Name = "toolStripStatusLabel_cpuram"; - toolStripStatusLabel_cpuram.Size = new Size(0, 25); - // - // toolStripStatusLabel_ratelimit - // - toolStripStatusLabel_ratelimit.Name = "toolStripStatusLabel_ratelimit"; - toolStripStatusLabel_ratelimit.Size = new Size(179, 25); - toolStripStatusLabel_ratelimit.Text = "toolStripStatusLabel1"; - // - // toolStripStatusLabel_ping - // - toolStripStatusLabel_ping.Name = "toolStripStatusLabel_ping"; - toolStripStatusLabel_ping.Size = new Size(179, 25); - toolStripStatusLabel_ping.Text = "toolStripStatusLabel1"; - // - // toolStripStatusLabel_vpn - // - toolStripStatusLabel_vpn.Image = Properties.Resources.traffic_lights_red; - toolStripStatusLabel_vpn.Name = "toolStripStatusLabel_vpn"; - toolStripStatusLabel_vpn.Size = new Size(203, 25); - toolStripStatusLabel_vpn.Text = "toolStripStatusLabel1"; - // - // toolStripStatusLabel_build - // - toolStripStatusLabel_build.Name = "toolStripStatusLabel_build"; - toolStripStatusLabel_build.RightToLeft = RightToLeft.No; - toolStripStatusLabel_build.Size = new Size(118, 25); - toolStripStatusLabel_build.Text = "Buildnummer"; - // - // tabControl_dash - // - tabControl_dash.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - tabControl_dash.Controls.Add(tabPage_dashboard); - tabControl_dash.Controls.Add(tabPage_terminal); - tabControl_dash.Controls.Add(tabPage_trades); - tabControl_dash.Controls.Add(tabPage_jobs); - tabControl_dash.ImageList = imageList_tabpages; - tabControl_dash.Location = new Point(3, 0); - tabControl_dash.Margin = new Padding(3, 15, 3, 3); - tabControl_dash.Name = "tabControl_dash"; - tabControl_dash.SelectedIndex = 0; - tabControl_dash.Size = new Size(2509, 1185); - tabControl_dash.TabIndex = 2; - // - // tabPage_dashboard - // - tabPage_dashboard.Controls.Add(toolStrip3); - tabPage_dashboard.Controls.Add(groupBox_Accountdetails); - tabPage_dashboard.Controls.Add(groupBox_Accountuebersicht); - tabPage_dashboard.Location = new Point(4, 34); - tabPage_dashboard.Name = "tabPage_dashboard"; - tabPage_dashboard.Padding = new Padding(3); - tabPage_dashboard.Size = new Size(2501, 1147); - tabPage_dashboard.TabIndex = 0; - tabPage_dashboard.Text = "Dashboard"; - tabPage_dashboard.UseVisualStyleBackColor = true; - // - // toolStrip3 - // - toolStrip3.ImageScalingSize = new Size(24, 24); - toolStrip3.Items.AddRange(new ToolStripItem[] { btn_dashboardRefresh, toolStripSeparator7 }); - toolStrip3.Location = new Point(3, 3); - toolStrip3.Name = "toolStrip3"; - toolStrip3.Size = new Size(2495, 34); - toolStrip3.TabIndex = 2; - toolStrip3.Text = "toolStrip3"; - // - // btn_dashboardRefresh - // - btn_dashboardRefresh.Image = Properties.Resources.token_quantifier; - btn_dashboardRefresh.ImageTransparentColor = Color.Magenta; - btn_dashboardRefresh.Name = "btn_dashboardRefresh"; - btn_dashboardRefresh.Size = new Size(140, 29); - btn_dashboardRefresh.Text = "Aktualisieren"; - // - // toolStripSeparator7 - // - toolStripSeparator7.Name = "toolStripSeparator7"; - toolStripSeparator7.Size = new Size(6, 34); - // - // groupBox_Accountdetails - // - groupBox_Accountdetails.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - groupBox_Accountdetails.Controls.Add(dgv_permaster); - groupBox_Accountdetails.Controls.Add(tabControl1); - groupBox_Accountdetails.Controls.Add(dgv_dashboard_detaillaufzeit); - groupBox_Accountdetails.Location = new Point(8, 470); - groupBox_Accountdetails.Name = "groupBox_Accountdetails"; - groupBox_Accountdetails.Size = new Size(2490, 671); - groupBox_Accountdetails.TabIndex = 1; - groupBox_Accountdetails.TabStop = false; - groupBox_Accountdetails.Text = "Accountdetails"; - // - // dgv_permaster - // - dgv_permaster.AllowUserToAddRows = false; - dgv_permaster.AllowUserToDeleteRows = false; - dgv_permaster.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - dgv_permaster.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; - dgv_permaster.Columns.AddRange(new DataGridViewColumn[] { col_mastername, col_aktproz, col_aktUSD }); - dgv_permaster.Location = new Point(1393, 30); - dgv_permaster.Name = "dgv_permaster"; - dgv_permaster.ReadOnly = true; - dgv_permaster.RowHeadersVisible = false; - dgv_permaster.RowHeadersWidth = 62; - dgv_permaster.Size = new Size(1092, 628); - dgv_permaster.TabIndex = 3; - // - // col_mastername - // - col_mastername.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_mastername.HeaderText = "Name"; - col_mastername.MinimumWidth = 8; - col_mastername.Name = "col_mastername"; - col_mastername.ReadOnly = true; - col_mastername.Width = 95; - // - // col_aktproz - // - col_aktproz.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_aktproz.HeaderText = "Aktuell %"; - col_aktproz.MinimumWidth = 8; - col_aktproz.Name = "col_aktproz"; - col_aktproz.ReadOnly = true; - col_aktproz.Width = 122; - // - // col_aktUSD - // - col_aktUSD.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_aktUSD.HeaderText = "Aktuell USD"; - col_aktUSD.MinimumWidth = 8; - col_aktUSD.Name = "col_aktUSD"; - col_aktUSD.ReadOnly = true; - col_aktUSD.Width = 142; - // - // tabControl1 - // - tabControl1.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left; - tabControl1.Controls.Add(tabPage_dash_topmaster); - tabControl1.Controls.Add(tabPage_dash_flopmaster); - tabControl1.Location = new Point(777, 30); - tabControl1.Name = "tabControl1"; - tabControl1.SelectedIndex = 0; - tabControl1.Size = new Size(610, 628); - tabControl1.TabIndex = 2; - // - // tabPage_dash_topmaster - // - tabPage_dash_topmaster.Controls.Add(dgv_dash_toptraders); - tabPage_dash_topmaster.Location = new Point(4, 34); - tabPage_dash_topmaster.Name = "tabPage_dash_topmaster"; - tabPage_dash_topmaster.Padding = new Padding(3); - tabPage_dash_topmaster.Size = new Size(602, 590); - tabPage_dash_topmaster.TabIndex = 0; - tabPage_dash_topmaster.Text = "Top Traders"; - tabPage_dash_topmaster.UseVisualStyleBackColor = true; - // - // dgv_dash_toptraders - // - dgv_dash_toptraders.AllowUserToAddRows = false; - dgv_dash_toptraders.AllowUserToDeleteRows = false; - dgv_dash_toptraders.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; - dgv_dash_toptraders.Columns.AddRange(new DataGridViewColumn[] { col_name, col_Winrate, col_pl, col_trades }); - dgv_dash_toptraders.Dock = DockStyle.Fill; - dgv_dash_toptraders.Location = new Point(3, 3); - dgv_dash_toptraders.Name = "dgv_dash_toptraders"; - dgv_dash_toptraders.ReadOnly = true; - dgv_dash_toptraders.RowHeadersVisible = false; - dgv_dash_toptraders.RowHeadersWidth = 62; - dgv_dash_toptraders.Size = new Size(596, 584); - dgv_dash_toptraders.TabIndex = 0; - // - // col_name - // - col_name.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_name.HeaderText = "Name"; - col_name.MinimumWidth = 8; - col_name.Name = "col_name"; - col_name.ReadOnly = true; - col_name.Width = 65; - // - // col_Winrate - // - col_Winrate.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_Winrate.HeaderText = "Winrate 30T"; - col_Winrate.MinimumWidth = 8; - col_Winrate.Name = "col_Winrate"; - col_Winrate.ReadOnly = true; - col_Winrate.Width = 143; - // - // col_pl - // - col_pl.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_pl.HeaderText = "P&L 30T"; - col_pl.MinimumWidth = 8; - col_pl.Name = "col_pl"; - col_pl.ReadOnly = true; - col_pl.Width = 114; - // - // col_trades - // - col_trades.HeaderText = "Trades 7D"; - col_trades.MinimumWidth = 8; - col_trades.Name = "col_trades"; - col_trades.ReadOnly = true; - col_trades.Width = 150; - // - // tabPage_dash_flopmaster - // - tabPage_dash_flopmaster.Controls.Add(dgv_dash_floptraders); - tabPage_dash_flopmaster.Location = new Point(4, 34); - tabPage_dash_flopmaster.Name = "tabPage_dash_flopmaster"; - tabPage_dash_flopmaster.Padding = new Padding(3); - tabPage_dash_flopmaster.Size = new Size(602, 590); - tabPage_dash_flopmaster.TabIndex = 1; - tabPage_dash_flopmaster.Text = "Flop Traders"; - tabPage_dash_flopmaster.UseVisualStyleBackColor = true; - // - // dgv_dash_floptraders - // - dgv_dash_floptraders.AllowUserToAddRows = false; - dgv_dash_floptraders.AllowUserToDeleteRows = false; - dgv_dash_floptraders.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; - dgv_dash_floptraders.Columns.AddRange(new DataGridViewColumn[] { dataGridViewLinkColumn1, dataGridViewTextBoxColumn1, dataGridViewTextBoxColumn2, dataGridViewTextBoxColumn3 }); - dgv_dash_floptraders.Dock = DockStyle.Fill; - dgv_dash_floptraders.Location = new Point(3, 3); - dgv_dash_floptraders.Name = "dgv_dash_floptraders"; - dgv_dash_floptraders.ReadOnly = true; - dgv_dash_floptraders.RowHeadersVisible = false; - dgv_dash_floptraders.RowHeadersWidth = 62; - dgv_dash_floptraders.Size = new Size(596, 584); - dgv_dash_floptraders.TabIndex = 1; - // - // dataGridViewLinkColumn1 - // - dataGridViewLinkColumn1.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - dataGridViewLinkColumn1.HeaderText = "Name"; - dataGridViewLinkColumn1.MinimumWidth = 8; - dataGridViewLinkColumn1.Name = "dataGridViewLinkColumn1"; - dataGridViewLinkColumn1.ReadOnly = true; - dataGridViewLinkColumn1.Width = 65; - // - // dataGridViewTextBoxColumn1 - // - dataGridViewTextBoxColumn1.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - dataGridViewTextBoxColumn1.HeaderText = "Winrate 30T"; - dataGridViewTextBoxColumn1.MinimumWidth = 8; - dataGridViewTextBoxColumn1.Name = "dataGridViewTextBoxColumn1"; - dataGridViewTextBoxColumn1.ReadOnly = true; - dataGridViewTextBoxColumn1.Width = 143; - // - // dataGridViewTextBoxColumn2 - // - dataGridViewTextBoxColumn2.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - dataGridViewTextBoxColumn2.HeaderText = "P&L 30T"; - dataGridViewTextBoxColumn2.MinimumWidth = 8; - dataGridViewTextBoxColumn2.Name = "dataGridViewTextBoxColumn2"; - dataGridViewTextBoxColumn2.ReadOnly = true; - dataGridViewTextBoxColumn2.Width = 114; - // - // dataGridViewTextBoxColumn3 - // - dataGridViewTextBoxColumn3.HeaderText = "Trades 7D"; - dataGridViewTextBoxColumn3.MinimumWidth = 8; - dataGridViewTextBoxColumn3.Name = "dataGridViewTextBoxColumn3"; - dataGridViewTextBoxColumn3.ReadOnly = true; - dataGridViewTextBoxColumn3.Width = 150; - // - // dgv_dashboard_detaillaufzeit - // - dgv_dashboard_detaillaufzeit.AllowUserToAddRows = false; - dgv_dashboard_detaillaufzeit.AllowUserToDeleteRows = false; - dgv_dashboard_detaillaufzeit.AllowUserToResizeRows = false; - dgv_dashboard_detaillaufzeit.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; - dgv_dashboard_detaillaufzeit.Columns.AddRange(new DataGridViewColumn[] { Column_Laufzeit, Column_LaufzeitProz, Column_laufzeitUSD, Column_Aktuellproz, Column_aktuellusd }); - dgv_dashboard_detaillaufzeit.Location = new Point(6, 30); - dgv_dashboard_detaillaufzeit.Name = "dgv_dashboard_detaillaufzeit"; - dgv_dashboard_detaillaufzeit.ReadOnly = true; - dgv_dashboard_detaillaufzeit.RowHeadersVisible = false; - dgv_dashboard_detaillaufzeit.RowHeadersWidth = 62; - dgv_dashboard_detaillaufzeit.Size = new Size(765, 395); - dgv_dashboard_detaillaufzeit.TabIndex = 1; - // - // Column_Laufzeit - // - Column_Laufzeit.HeaderText = "Laufzeit"; - Column_Laufzeit.MinimumWidth = 8; - Column_Laufzeit.Name = "Column_Laufzeit"; - Column_Laufzeit.ReadOnly = true; - Column_Laufzeit.Width = 150; - // - // Column_LaufzeitProz - // - Column_LaufzeitProz.HeaderText = "Anteil (%)"; - Column_LaufzeitProz.MinimumWidth = 8; - Column_LaufzeitProz.Name = "Column_LaufzeitProz"; - Column_LaufzeitProz.ReadOnly = true; - Column_LaufzeitProz.Width = 150; - // - // Column_laufzeitUSD - // - Column_laufzeitUSD.HeaderText = "Anteil USD"; - Column_laufzeitUSD.MinimumWidth = 8; - Column_laufzeitUSD.Name = "Column_laufzeitUSD"; - Column_laufzeitUSD.ReadOnly = true; - Column_laufzeitUSD.Width = 150; - // - // Column_Aktuellproz - // - Column_Aktuellproz.HeaderText = "Aktuell (%)"; - Column_Aktuellproz.MinimumWidth = 8; - Column_Aktuellproz.Name = "Column_Aktuellproz"; - Column_Aktuellproz.ReadOnly = true; - Column_Aktuellproz.Width = 150; - // - // Column_aktuellusd - // - Column_aktuellusd.HeaderText = "Aktuell USD"; - Column_aktuellusd.MinimumWidth = 8; - Column_aktuellusd.Name = "Column_aktuellusd"; - Column_aktuellusd.ReadOnly = true; - Column_aktuellusd.Width = 150; - // - // groupBox_Accountuebersicht - // - groupBox_Accountuebersicht.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - groupBox_Accountuebersicht.Controls.Add(dgv_dashboard); - groupBox_Accountuebersicht.Location = new Point(8, 41); - groupBox_Accountuebersicht.Name = "groupBox_Accountuebersicht"; - groupBox_Accountuebersicht.Size = new Size(2485, 423); - groupBox_Accountuebersicht.TabIndex = 0; - groupBox_Accountuebersicht.TabStop = false; - groupBox_Accountuebersicht.Text = "Accountübersicht"; - groupBox_Accountuebersicht.Enter += groupBox1_Enter; - // - // dgv_dashboard - // - dgv_dashboard.AllowUserToAddRows = false; - dgv_dashboard.AllowUserToDeleteRows = false; - dgv_dashboard.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; - dgv_dashboard.BackgroundColor = SystemColors.ScrollBar; - dgv_dashboard.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; - dgv_dashboard.Columns.AddRange(new DataGridViewColumn[] { col_dgv_dashboard_AccountId, col_dgv_dashboard_IsDemo, col_dgv_dashboard_IsActive, col_dgv_dashboard_AccountName, col_dgv_dashboard_TotalBalance, col_dgv_dashboard_AvailableBalance, col_dgv_dashboard_PositionBalance, col_dgv_dashboard_OpenTradesCount, col_dgv_dashboard_ClosedTrades24h, col_dgv_dashboard_Pnl24h, col_dgv_dashboard_Winrate24h, col_dgv_dashboard_ClosedTrades7d, col_dgv_dashboard_Pnl7d, col_dgv_dashboard_Winrate7d }); - dgv_dashboard.Location = new Point(6, 30); - dgv_dashboard.Name = "dgv_dashboard"; - dgv_dashboard.RowHeadersVisible = false; - dgv_dashboard.RowHeadersWidth = 62; - dgv_dashboard.Size = new Size(2473, 387); - dgv_dashboard.TabIndex = 0; - // - // col_dgv_dashboard_AccountId - // - col_dgv_dashboard_AccountId.DataPropertyName = "AccountId"; - col_dgv_dashboard_AccountId.HeaderText = "Account ID"; - col_dgv_dashboard_AccountId.MinimumWidth = 8; - col_dgv_dashboard_AccountId.Name = "col_dgv_dashboard_AccountId"; - col_dgv_dashboard_AccountId.ReadOnly = true; - col_dgv_dashboard_AccountId.Visible = false; - col_dgv_dashboard_AccountId.Width = 150; - // - // col_dgv_dashboard_IsDemo - // - col_dgv_dashboard_IsDemo.DataPropertyName = "IsDemo"; - col_dgv_dashboard_IsDemo.HeaderText = "Is Demo"; - col_dgv_dashboard_IsDemo.MinimumWidth = 8; - col_dgv_dashboard_IsDemo.Name = "col_dgv_dashboard_IsDemo"; - col_dgv_dashboard_IsDemo.ReadOnly = true; - col_dgv_dashboard_IsDemo.Visible = false; - col_dgv_dashboard_IsDemo.Width = 150; - // - // col_dgv_dashboard_IsActive - // - col_dgv_dashboard_IsActive.DataPropertyName = "IsActive"; - col_dgv_dashboard_IsActive.HeaderText = "Is Active"; - col_dgv_dashboard_IsActive.MinimumWidth = 8; - col_dgv_dashboard_IsActive.Name = "col_dgv_dashboard_IsActive"; - col_dgv_dashboard_IsActive.ReadOnly = true; - col_dgv_dashboard_IsActive.Visible = false; - col_dgv_dashboard_IsActive.Width = 150; - // - // col_dgv_dashboard_AccountName - // - col_dgv_dashboard_AccountName.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_dashboard_AccountName.DataPropertyName = "AccountName"; - col_dgv_dashboard_AccountName.HeaderText = "Account"; - col_dgv_dashboard_AccountName.MinimumWidth = 8; - col_dgv_dashboard_AccountName.Name = "col_dgv_dashboard_AccountName"; - col_dgv_dashboard_AccountName.ReadOnly = true; - col_dgv_dashboard_AccountName.Width = 113; - // - // col_dgv_dashboard_TotalBalance - // - col_dgv_dashboard_TotalBalance.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_dashboard_TotalBalance.DataPropertyName = "TotalBalance"; - col_dgv_dashboard_TotalBalance.HeaderText = "Total USD"; - col_dgv_dashboard_TotalBalance.MinimumWidth = 8; - col_dgv_dashboard_TotalBalance.Name = "col_dgv_dashboard_TotalBalance"; - col_dgv_dashboard_TotalBalance.ReadOnly = true; - col_dgv_dashboard_TotalBalance.Width = 125; - // - // col_dgv_dashboard_AvailableBalance - // - col_dgv_dashboard_AvailableBalance.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_dashboard_AvailableBalance.DataPropertyName = "AvailableBalance"; - col_dgv_dashboard_AvailableBalance.HeaderText = "Available"; - col_dgv_dashboard_AvailableBalance.MinimumWidth = 8; - col_dgv_dashboard_AvailableBalance.Name = "col_dgv_dashboard_AvailableBalance"; - col_dgv_dashboard_AvailableBalance.ReadOnly = true; - col_dgv_dashboard_AvailableBalance.Width = 119; - // - // col_dgv_dashboard_PositionBalance - // - col_dgv_dashboard_PositionBalance.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_dashboard_PositionBalance.DataPropertyName = "PositionBalance"; - col_dgv_dashboard_PositionBalance.HeaderText = "Positions"; - col_dgv_dashboard_PositionBalance.MinimumWidth = 8; - col_dgv_dashboard_PositionBalance.Name = "col_dgv_dashboard_PositionBalance"; - col_dgv_dashboard_PositionBalance.ReadOnly = true; - col_dgv_dashboard_PositionBalance.Width = 119; - // - // col_dgv_dashboard_OpenTradesCount - // - col_dgv_dashboard_OpenTradesCount.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_dashboard_OpenTradesCount.DataPropertyName = "OpenTradesCount"; - col_dgv_dashboard_OpenTradesCount.HeaderText = "Open"; - col_dgv_dashboard_OpenTradesCount.MinimumWidth = 8; - col_dgv_dashboard_OpenTradesCount.Name = "col_dgv_dashboard_OpenTradesCount"; - col_dgv_dashboard_OpenTradesCount.ReadOnly = true; - col_dgv_dashboard_OpenTradesCount.Width = 92; - // - // col_dgv_dashboard_ClosedTrades24h - // - col_dgv_dashboard_ClosedTrades24h.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_dashboard_ClosedTrades24h.DataPropertyName = "ClosedTrades24h"; - col_dgv_dashboard_ClosedTrades24h.HeaderText = "Closed 24h"; - col_dgv_dashboard_ClosedTrades24h.MinimumWidth = 8; - col_dgv_dashboard_ClosedTrades24h.Name = "col_dgv_dashboard_ClosedTrades24h"; - col_dgv_dashboard_ClosedTrades24h.ReadOnly = true; - col_dgv_dashboard_ClosedTrades24h.Width = 137; - // - // col_dgv_dashboard_Pnl24h - // - col_dgv_dashboard_Pnl24h.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_dashboard_Pnl24h.DataPropertyName = "Pnl24h"; - col_dgv_dashboard_Pnl24h.HeaderText = "Pnl 24h"; - col_dgv_dashboard_Pnl24h.MinimumWidth = 8; - col_dgv_dashboard_Pnl24h.Name = "col_dgv_dashboard_Pnl24h"; - col_dgv_dashboard_Pnl24h.ReadOnly = true; - col_dgv_dashboard_Pnl24h.Width = 107; - // - // col_dgv_dashboard_Winrate24h - // - col_dgv_dashboard_Winrate24h.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_dashboard_Winrate24h.DataPropertyName = "Winrate24h"; - col_dgv_dashboard_Winrate24h.HeaderText = "Winrate 24h"; - col_dgv_dashboard_Winrate24h.MinimumWidth = 8; - col_dgv_dashboard_Winrate24h.Name = "col_dgv_dashboard_Winrate24h"; - col_dgv_dashboard_Winrate24h.ReadOnly = true; - col_dgv_dashboard_Winrate24h.Width = 144; - // - // col_dgv_dashboard_ClosedTrades7d - // - col_dgv_dashboard_ClosedTrades7d.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_dashboard_ClosedTrades7d.DataPropertyName = "ClosedTrades7d"; - col_dgv_dashboard_ClosedTrades7d.HeaderText = "Closed 7d"; - col_dgv_dashboard_ClosedTrades7d.MinimumWidth = 8; - col_dgv_dashboard_ClosedTrades7d.Name = "col_dgv_dashboard_ClosedTrades7d"; - col_dgv_dashboard_ClosedTrades7d.ReadOnly = true; - col_dgv_dashboard_ClosedTrades7d.Width = 128; - // - // col_dgv_dashboard_Pnl7d - // - col_dgv_dashboard_Pnl7d.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_dashboard_Pnl7d.DataPropertyName = "Pnl7d"; - col_dgv_dashboard_Pnl7d.HeaderText = "Pnl 7d"; - col_dgv_dashboard_Pnl7d.MinimumWidth = 8; - col_dgv_dashboard_Pnl7d.Name = "col_dgv_dashboard_Pnl7d"; - col_dgv_dashboard_Pnl7d.ReadOnly = true; - col_dgv_dashboard_Pnl7d.Width = 98; - // - // col_dgv_dashboard_Winrate7d - // - col_dgv_dashboard_Winrate7d.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_dashboard_Winrate7d.DataPropertyName = "Winrate7d"; - col_dgv_dashboard_Winrate7d.HeaderText = "Winrate 7d"; - col_dgv_dashboard_Winrate7d.MinimumWidth = 8; - col_dgv_dashboard_Winrate7d.Name = "col_dgv_dashboard_Winrate7d"; - col_dgv_dashboard_Winrate7d.ReadOnly = true; - col_dgv_dashboard_Winrate7d.Width = 135; - // - // tabPage_terminal - // - tabPage_terminal.Location = new Point(4, 34); - tabPage_terminal.Name = "tabPage_terminal"; - tabPage_terminal.Size = new Size(2501, 1147); - tabPage_terminal.TabIndex = 3; - tabPage_terminal.Text = "Terminal"; - tabPage_terminal.UseVisualStyleBackColor = true; - // - // tabPage_trades - // - tabPage_trades.Controls.Add(tabControl_trades); - tabPage_trades.Location = new Point(4, 34); - tabPage_trades.Name = "tabPage_trades"; - tabPage_trades.Padding = new Padding(3); - tabPage_trades.Size = new Size(2501, 1147); - tabPage_trades.TabIndex = 1; - tabPage_trades.Text = "Trades"; - tabPage_trades.UseVisualStyleBackColor = true; - // - // tabControl_trades - // - tabControl_trades.Controls.Add(tabPage_openTrades); - tabControl_trades.Controls.Add(tabPage_closedTrades); - tabControl_trades.Dock = DockStyle.Fill; - tabControl_trades.Location = new Point(3, 3); - tabControl_trades.Name = "tabControl_trades"; - tabControl_trades.SelectedIndex = 0; - tabControl_trades.Size = new Size(2495, 1141); - tabControl_trades.TabIndex = 0; - // - // tabPage_openTrades - // - tabPage_openTrades.Controls.Add(toolStrip_openTrades); - tabPage_openTrades.Controls.Add(dgv_openTrades); - tabPage_openTrades.Location = new Point(4, 34); - tabPage_openTrades.Name = "tabPage_openTrades"; - tabPage_openTrades.Padding = new Padding(3); - tabPage_openTrades.Size = new Size(2487, 1103); - tabPage_openTrades.TabIndex = 0; - tabPage_openTrades.Text = "Offene Trades"; - tabPage_openTrades.UseVisualStyleBackColor = true; - // - // toolStrip_openTrades - // - toolStrip_openTrades.ImageScalingSize = new Size(24, 24); - toolStrip_openTrades.Items.AddRange(new ToolStripItem[] { btn_opentrades_refresh, toolStripSeparator5, toolStripLabel2, cb_opentrades_account, toolStripSeparator4, toolStripLabel3, cb_opentrades_laufzeit }); - toolStrip_openTrades.Location = new Point(3, 3); - toolStrip_openTrades.Name = "toolStrip_openTrades"; - toolStrip_openTrades.Size = new Size(2481, 34); - toolStrip_openTrades.TabIndex = 1; - toolStrip_openTrades.Text = "toolStrip3"; - // - // btn_opentrades_refresh - // - btn_opentrades_refresh.Image = Properties.Resources.token_quantifier; - btn_opentrades_refresh.ImageTransparentColor = Color.Magenta; - btn_opentrades_refresh.Name = "btn_opentrades_refresh"; - btn_opentrades_refresh.Size = new Size(140, 29); - btn_opentrades_refresh.Text = "Aktualisieren"; - // - // toolStripSeparator5 - // - toolStripSeparator5.Name = "toolStripSeparator5"; - toolStripSeparator5.Size = new Size(6, 34); - // - // toolStripLabel2 - // - toolStripLabel2.Name = "toolStripLabel2"; - toolStripLabel2.Size = new Size(81, 29); - toolStripLabel2.Text = "Account:"; - // - // cb_opentrades_account - // - cb_opentrades_account.DropDownStyle = ComboBoxStyle.DropDownList; - cb_opentrades_account.Name = "cb_opentrades_account"; - cb_opentrades_account.Size = new Size(200, 34); - // - // toolStripSeparator4 - // - toolStripSeparator4.Name = "toolStripSeparator4"; - toolStripSeparator4.Size = new Size(6, 34); - // - // toolStripLabel3 - // - toolStripLabel3.Name = "toolStripLabel3"; - toolStripLabel3.Size = new Size(156, 29); - toolStripLabel3.Text = "Laufzeit Kategorie:"; - // - // cb_opentrades_laufzeit - // - cb_opentrades_laufzeit.Items.AddRange(new object[] { "Alle", "Unter 6h", "Unter 24h", "Unter 72h", "Über 72h" }); - cb_opentrades_laufzeit.Name = "cb_opentrades_laufzeit"; - cb_opentrades_laufzeit.Size = new Size(200, 34); - // - // dgv_openTrades - // - dgv_openTrades.AllowUserToAddRows = false; - dgv_openTrades.AllowUserToDeleteRows = false; - dgv_openTrades.AllowUserToResizeRows = false; - dgv_openTrades.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - dgv_openTrades.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; - dgv_openTrades.Columns.AddRange(new DataGridViewColumn[] { col_dgv_openTrades_AccountName, col_dgv_openTrades_SourceTraderName, col_dgv_openTrades_MarketQuestion, col_dgv_openTrades_MarketSlug, col_dgv_openTrades_Outcome, col_dgv_openTrades_Side, col_dgv_openTrades_EntryPrice, col_dgv_openTrades_CurrentPrice, col_dgv_openTrades_Size, col_dgv_openTrades_AmountUsd, col_dgv_openTrades_CloseBtn }); - dgv_openTrades.Location = new Point(0, 40); - dgv_openTrades.Name = "dgv_openTrades"; - dgv_openTrades.RowHeadersVisible = false; - dgv_openTrades.RowHeadersWidth = 62; - dgv_openTrades.Size = new Size(2481, 1057); - dgv_openTrades.TabIndex = 0; - // - // col_dgv_openTrades_AccountName - // - col_dgv_openTrades_AccountName.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_openTrades_AccountName.DataPropertyName = "AccountName"; - col_dgv_openTrades_AccountName.HeaderText = "Account"; - col_dgv_openTrades_AccountName.MinimumWidth = 8; - col_dgv_openTrades_AccountName.Name = "col_dgv_openTrades_AccountName"; - col_dgv_openTrades_AccountName.ReadOnly = true; - col_dgv_openTrades_AccountName.Width = 113; - // - // col_dgv_openTrades_SourceTraderName - // - col_dgv_openTrades_SourceTraderName.ActiveLinkColor = Color.White; - col_dgv_openTrades_SourceTraderName.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_openTrades_SourceTraderName.DataPropertyName = "SourceTraderName"; - col_dgv_openTrades_SourceTraderName.HeaderText = "Copied From"; - col_dgv_openTrades_SourceTraderName.LinkColor = Color.Blue; - col_dgv_openTrades_SourceTraderName.MinimumWidth = 8; - col_dgv_openTrades_SourceTraderName.Name = "col_dgv_openTrades_SourceTraderName"; - col_dgv_openTrades_SourceTraderName.ReadOnly = true; - col_dgv_openTrades_SourceTraderName.VisitedLinkColor = Color.Purple; - col_dgv_openTrades_SourceTraderName.Width = 122; - // - // col_dgv_openTrades_MarketQuestion - // - col_dgv_openTrades_MarketQuestion.ActiveLinkColor = Color.White; - col_dgv_openTrades_MarketQuestion.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_openTrades_MarketQuestion.DataPropertyName = "MarketQuestion"; - col_dgv_openTrades_MarketQuestion.HeaderText = "Market"; - col_dgv_openTrades_MarketQuestion.LinkColor = Color.Blue; - col_dgv_openTrades_MarketQuestion.MinimumWidth = 8; - col_dgv_openTrades_MarketQuestion.Name = "col_dgv_openTrades_MarketQuestion"; - col_dgv_openTrades_MarketQuestion.ReadOnly = true; - col_dgv_openTrades_MarketQuestion.VisitedLinkColor = Color.Purple; - col_dgv_openTrades_MarketQuestion.Width = 73; - // - // col_dgv_openTrades_MarketSlug - // - col_dgv_openTrades_MarketSlug.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_openTrades_MarketSlug.DataPropertyName = "MarketSlug"; - col_dgv_openTrades_MarketSlug.HeaderText = "Market Slug"; - col_dgv_openTrades_MarketSlug.MinimumWidth = 8; - col_dgv_openTrades_MarketSlug.Name = "col_dgv_openTrades_MarketSlug"; - col_dgv_openTrades_MarketSlug.ReadOnly = true; - col_dgv_openTrades_MarketSlug.Visible = false; - col_dgv_openTrades_MarketSlug.Width = 150; - // - // col_dgv_openTrades_Outcome - // - col_dgv_openTrades_Outcome.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_openTrades_Outcome.DataPropertyName = "Outcome"; - col_dgv_openTrades_Outcome.HeaderText = "Outcome"; - col_dgv_openTrades_Outcome.MinimumWidth = 8; - col_dgv_openTrades_Outcome.Name = "col_dgv_openTrades_Outcome"; - col_dgv_openTrades_Outcome.ReadOnly = true; - col_dgv_openTrades_Outcome.Width = 122; - // - // col_dgv_openTrades_Side - // - col_dgv_openTrades_Side.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_openTrades_Side.DataPropertyName = "Side"; - col_dgv_openTrades_Side.HeaderText = "Side"; - col_dgv_openTrades_Side.MinimumWidth = 8; - col_dgv_openTrades_Side.Name = "col_dgv_openTrades_Side"; - col_dgv_openTrades_Side.ReadOnly = true; - col_dgv_openTrades_Side.Width = 82; - // - // col_dgv_openTrades_EntryPrice - // - col_dgv_openTrades_EntryPrice.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_openTrades_EntryPrice.DataPropertyName = "EntryPrice"; - col_dgv_openTrades_EntryPrice.HeaderText = "Entry Price"; - col_dgv_openTrades_EntryPrice.MinimumWidth = 8; - col_dgv_openTrades_EntryPrice.Name = "col_dgv_openTrades_EntryPrice"; - col_dgv_openTrades_EntryPrice.ReadOnly = true; - col_dgv_openTrades_EntryPrice.Width = 130; - // - // col_dgv_openTrades_CurrentPrice - // - col_dgv_openTrades_CurrentPrice.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_openTrades_CurrentPrice.DataPropertyName = "CurrentPrice"; - col_dgv_openTrades_CurrentPrice.HeaderText = "Current Price"; - col_dgv_openTrades_CurrentPrice.MinimumWidth = 8; - col_dgv_openTrades_CurrentPrice.Name = "col_dgv_openTrades_CurrentPrice"; - col_dgv_openTrades_CurrentPrice.ReadOnly = true; - col_dgv_openTrades_CurrentPrice.Width = 148; - // - // col_dgv_openTrades_Size - // - col_dgv_openTrades_Size.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_openTrades_Size.DataPropertyName = "Size"; - col_dgv_openTrades_Size.HeaderText = "Shares"; - col_dgv_openTrades_Size.MinimumWidth = 8; - col_dgv_openTrades_Size.Name = "col_dgv_openTrades_Size"; - col_dgv_openTrades_Size.ReadOnly = true; - // - // col_dgv_openTrades_AmountUsd - // - col_dgv_openTrades_AmountUsd.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_openTrades_AmountUsd.DataPropertyName = "AmountUsd"; - col_dgv_openTrades_AmountUsd.HeaderText = "Amount USD"; - col_dgv_openTrades_AmountUsd.MinimumWidth = 8; - col_dgv_openTrades_AmountUsd.Name = "col_dgv_openTrades_AmountUsd"; - col_dgv_openTrades_AmountUsd.ReadOnly = true; - col_dgv_openTrades_AmountUsd.Width = 153; - // - // col_dgv_openTrades_CloseBtn - // - col_dgv_openTrades_CloseBtn.AutoSizeMode = DataGridViewAutoSizeColumnMode.None; - col_dgv_openTrades_CloseBtn.HeaderText = "Schließen"; - col_dgv_openTrades_CloseBtn.MinimumWidth = 8; - col_dgv_openTrades_CloseBtn.Name = "col_dgv_openTrades_CloseBtn"; - col_dgv_openTrades_CloseBtn.Resizable = DataGridViewTriState.True; - col_dgv_openTrades_CloseBtn.SortMode = DataGridViewColumnSortMode.Automatic; - col_dgv_openTrades_CloseBtn.Text = "Schließen"; - col_dgv_openTrades_CloseBtn.UseColumnTextForButtonValue = true; - col_dgv_openTrades_CloseBtn.Width = 150; - // - // tabPage_closedTrades - // - tabPage_closedTrades.Controls.Add(dgv_closedTrades); - tabPage_closedTrades.Controls.Add(toolStrip_closedtrades); - tabPage_closedTrades.Location = new Point(4, 34); - tabPage_closedTrades.Name = "tabPage_closedTrades"; - tabPage_closedTrades.Padding = new Padding(3); - tabPage_closedTrades.Size = new Size(2487, 1103); - tabPage_closedTrades.TabIndex = 1; - tabPage_closedTrades.Text = "Geschlossene Trades"; - tabPage_closedTrades.UseVisualStyleBackColor = true; - // - // dgv_closedTrades - // - dgv_closedTrades.AllowUserToAddRows = false; - dgv_closedTrades.AllowUserToDeleteRows = false; - dgv_closedTrades.AllowUserToResizeRows = false; - dgv_closedTrades.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - dgv_closedTrades.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; - dgv_closedTrades.Columns.AddRange(new DataGridViewColumn[] { col_dgv_closedTrades_AccountName, col_dgv_closedTrades_SourceTraderName, col_dgv_closedTrades_TradeId, col_dgv_closedTrades_AccountId, col_dgv_closedTrades_SourceTraderId, col_dgv_closedTrades_IsDemo, col_dgv_closedTrades_TokenId, col_dgv_closedTrades_MarketSlug, col_dgv_closedTrades_MarketQuestion, col_dgv_closedTrades_Outcome, col_dgv_closedTrades_Side, col_dgv_closedTrades_EntryPrice, col_dgv_closedTrades_ExitPrice, col_dgv_closedTrades_Size, col_dgv_closedTrades_RealizedPnl, col_dgv_closedTrades_PnlPercent, col_dgv_closedTrades_TotalFees, col_dgv_closedTrades_OpenedAt, col_dgv_closedTrades_ClosedAt, col_dgv_closedTrades_ExitReason }); - dgv_closedTrades.Location = new Point(3, 40); - dgv_closedTrades.Name = "dgv_closedTrades"; - dgv_closedTrades.ReadOnly = true; - dgv_closedTrades.RowHeadersVisible = false; - dgv_closedTrades.RowHeadersWidth = 62; - dgv_closedTrades.Size = new Size(2481, 1057); - dgv_closedTrades.TabIndex = 1; - // - // col_dgv_closedTrades_AccountName - // - col_dgv_closedTrades_AccountName.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_closedTrades_AccountName.DataPropertyName = "AccountName"; - col_dgv_closedTrades_AccountName.HeaderText = "Slave Account"; - col_dgv_closedTrades_AccountName.MinimumWidth = 8; - col_dgv_closedTrades_AccountName.Name = "col_dgv_closedTrades_AccountName"; - col_dgv_closedTrades_AccountName.ReadOnly = true; - col_dgv_closedTrades_AccountName.Width = 159; - // - // col_dgv_closedTrades_SourceTraderName - // - col_dgv_closedTrades_SourceTraderName.ActiveLinkColor = Color.White; - col_dgv_closedTrades_SourceTraderName.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_closedTrades_SourceTraderName.DataPropertyName = "SourceTraderName"; - col_dgv_closedTrades_SourceTraderName.HeaderText = "Copied From"; - col_dgv_closedTrades_SourceTraderName.LinkColor = Color.Blue; - col_dgv_closedTrades_SourceTraderName.MinimumWidth = 8; - col_dgv_closedTrades_SourceTraderName.Name = "col_dgv_closedTrades_SourceTraderName"; - col_dgv_closedTrades_SourceTraderName.ReadOnly = true; - col_dgv_closedTrades_SourceTraderName.VisitedLinkColor = Color.Purple; - col_dgv_closedTrades_SourceTraderName.Width = 122; - // - // col_dgv_closedTrades_TradeId - // - col_dgv_closedTrades_TradeId.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_closedTrades_TradeId.DataPropertyName = "TradeId"; - col_dgv_closedTrades_TradeId.HeaderText = "ID"; - col_dgv_closedTrades_TradeId.MinimumWidth = 8; - col_dgv_closedTrades_TradeId.Name = "col_dgv_closedTrades_TradeId"; - col_dgv_closedTrades_TradeId.ReadOnly = true; - col_dgv_closedTrades_TradeId.Visible = false; - col_dgv_closedTrades_TradeId.Width = 150; - // - // col_dgv_closedTrades_AccountId - // - col_dgv_closedTrades_AccountId.DataPropertyName = "AccountId"; - col_dgv_closedTrades_AccountId.HeaderText = "Account ID"; - col_dgv_closedTrades_AccountId.MinimumWidth = 8; - col_dgv_closedTrades_AccountId.Name = "col_dgv_closedTrades_AccountId"; - col_dgv_closedTrades_AccountId.ReadOnly = true; - col_dgv_closedTrades_AccountId.Visible = false; - col_dgv_closedTrades_AccountId.Width = 150; - // - // col_dgv_closedTrades_SourceTraderId - // - col_dgv_closedTrades_SourceTraderId.DataPropertyName = "SourceTraderId"; - col_dgv_closedTrades_SourceTraderId.HeaderText = "SourceTraderId"; - col_dgv_closedTrades_SourceTraderId.MinimumWidth = 8; - col_dgv_closedTrades_SourceTraderId.Name = "col_dgv_closedTrades_SourceTraderId"; - col_dgv_closedTrades_SourceTraderId.ReadOnly = true; - col_dgv_closedTrades_SourceTraderId.Visible = false; - col_dgv_closedTrades_SourceTraderId.Width = 150; - // - // col_dgv_closedTrades_IsDemo - // - col_dgv_closedTrades_IsDemo.DataPropertyName = "IsDemo"; - col_dgv_closedTrades_IsDemo.HeaderText = "Is Demo"; - col_dgv_closedTrades_IsDemo.MinimumWidth = 8; - col_dgv_closedTrades_IsDemo.Name = "col_dgv_closedTrades_IsDemo"; - col_dgv_closedTrades_IsDemo.ReadOnly = true; - col_dgv_closedTrades_IsDemo.Visible = false; - col_dgv_closedTrades_IsDemo.Width = 150; - // - // col_dgv_closedTrades_TokenId - // - col_dgv_closedTrades_TokenId.DataPropertyName = "TokenId"; - col_dgv_closedTrades_TokenId.HeaderText = "TokenId"; - col_dgv_closedTrades_TokenId.MinimumWidth = 8; - col_dgv_closedTrades_TokenId.Name = "col_dgv_closedTrades_TokenId"; - col_dgv_closedTrades_TokenId.ReadOnly = true; - col_dgv_closedTrades_TokenId.Visible = false; - col_dgv_closedTrades_TokenId.Width = 150; - // - // col_dgv_closedTrades_MarketSlug - // - col_dgv_closedTrades_MarketSlug.DataPropertyName = "MarketSlug"; - col_dgv_closedTrades_MarketSlug.HeaderText = "Market Slug"; - col_dgv_closedTrades_MarketSlug.MinimumWidth = 8; - col_dgv_closedTrades_MarketSlug.Name = "col_dgv_closedTrades_MarketSlug"; - col_dgv_closedTrades_MarketSlug.ReadOnly = true; - col_dgv_closedTrades_MarketSlug.Visible = false; - col_dgv_closedTrades_MarketSlug.Width = 150; - // - // col_dgv_closedTrades_MarketQuestion - // - col_dgv_closedTrades_MarketQuestion.ActiveLinkColor = Color.White; - col_dgv_closedTrades_MarketQuestion.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_closedTrades_MarketQuestion.DataPropertyName = "MarketQuestion"; - col_dgv_closedTrades_MarketQuestion.HeaderText = "Market"; - col_dgv_closedTrades_MarketQuestion.LinkColor = Color.Blue; - col_dgv_closedTrades_MarketQuestion.MinimumWidth = 8; - col_dgv_closedTrades_MarketQuestion.Name = "col_dgv_closedTrades_MarketQuestion"; - col_dgv_closedTrades_MarketQuestion.ReadOnly = true; - col_dgv_closedTrades_MarketQuestion.VisitedLinkColor = Color.Purple; - col_dgv_closedTrades_MarketQuestion.Width = 73; - // - // col_dgv_closedTrades_Outcome - // - col_dgv_closedTrades_Outcome.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_closedTrades_Outcome.DataPropertyName = "Outcome"; - col_dgv_closedTrades_Outcome.HeaderText = "Outcome"; - col_dgv_closedTrades_Outcome.MinimumWidth = 8; - col_dgv_closedTrades_Outcome.Name = "col_dgv_closedTrades_Outcome"; - col_dgv_closedTrades_Outcome.ReadOnly = true; - col_dgv_closedTrades_Outcome.Width = 122; - // - // col_dgv_closedTrades_Side - // - col_dgv_closedTrades_Side.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_closedTrades_Side.DataPropertyName = "Side"; - col_dgv_closedTrades_Side.HeaderText = "Side"; - col_dgv_closedTrades_Side.MinimumWidth = 8; - col_dgv_closedTrades_Side.Name = "col_dgv_closedTrades_Side"; - col_dgv_closedTrades_Side.ReadOnly = true; - col_dgv_closedTrades_Side.Width = 82; - // - // col_dgv_closedTrades_EntryPrice - // - col_dgv_closedTrades_EntryPrice.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_closedTrades_EntryPrice.DataPropertyName = "EntryPrice"; - col_dgv_closedTrades_EntryPrice.HeaderText = "Entry Price"; - col_dgv_closedTrades_EntryPrice.MinimumWidth = 8; - col_dgv_closedTrades_EntryPrice.Name = "col_dgv_closedTrades_EntryPrice"; - col_dgv_closedTrades_EntryPrice.ReadOnly = true; - col_dgv_closedTrades_EntryPrice.Width = 130; - // - // col_dgv_closedTrades_ExitPrice - // - col_dgv_closedTrades_ExitPrice.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_closedTrades_ExitPrice.DataPropertyName = "ExitPrice"; - col_dgv_closedTrades_ExitPrice.HeaderText = "Exit Price"; - col_dgv_closedTrades_ExitPrice.MinimumWidth = 8; - col_dgv_closedTrades_ExitPrice.Name = "col_dgv_closedTrades_ExitPrice"; - col_dgv_closedTrades_ExitPrice.ReadOnly = true; - col_dgv_closedTrades_ExitPrice.Width = 117; - // - // col_dgv_closedTrades_Size - // - col_dgv_closedTrades_Size.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_closedTrades_Size.DataPropertyName = "Size"; - col_dgv_closedTrades_Size.HeaderText = "Shares"; - col_dgv_closedTrades_Size.MinimumWidth = 8; - col_dgv_closedTrades_Size.Name = "col_dgv_closedTrades_Size"; - col_dgv_closedTrades_Size.ReadOnly = true; - // - // col_dgv_closedTrades_RealizedPnl - // - col_dgv_closedTrades_RealizedPnl.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_closedTrades_RealizedPnl.DataPropertyName = "RealizedPnl"; - col_dgv_closedTrades_RealizedPnl.HeaderText = "P&L"; - col_dgv_closedTrades_RealizedPnl.MinimumWidth = 8; - col_dgv_closedTrades_RealizedPnl.Name = "col_dgv_closedTrades_RealizedPnl"; - col_dgv_closedTrades_RealizedPnl.ReadOnly = true; - col_dgv_closedTrades_RealizedPnl.Width = 80; - // - // col_dgv_closedTrades_PnlPercent - // - col_dgv_closedTrades_PnlPercent.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_closedTrades_PnlPercent.DataPropertyName = "PnlPercent"; - col_dgv_closedTrades_PnlPercent.HeaderText = "P&L %"; - col_dgv_closedTrades_PnlPercent.MinimumWidth = 8; - col_dgv_closedTrades_PnlPercent.Name = "col_dgv_closedTrades_PnlPercent"; - col_dgv_closedTrades_PnlPercent.ReadOnly = true; - // - // col_dgv_closedTrades_TotalFees - // - col_dgv_closedTrades_TotalFees.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_closedTrades_TotalFees.DataPropertyName = "TotalFees"; - col_dgv_closedTrades_TotalFees.HeaderText = "Fees"; - col_dgv_closedTrades_TotalFees.MinimumWidth = 8; - col_dgv_closedTrades_TotalFees.Name = "col_dgv_closedTrades_TotalFees"; - col_dgv_closedTrades_TotalFees.ReadOnly = true; - col_dgv_closedTrades_TotalFees.Width = 83; - // - // col_dgv_closedTrades_OpenedAt - // - col_dgv_closedTrades_OpenedAt.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_closedTrades_OpenedAt.DataPropertyName = "OpenedAt"; - col_dgv_closedTrades_OpenedAt.HeaderText = "Opened At"; - col_dgv_closedTrades_OpenedAt.MinimumWidth = 8; - col_dgv_closedTrades_OpenedAt.Name = "col_dgv_closedTrades_OpenedAt"; - col_dgv_closedTrades_OpenedAt.ReadOnly = true; - col_dgv_closedTrades_OpenedAt.Width = 135; - // - // col_dgv_closedTrades_ClosedAt - // - col_dgv_closedTrades_ClosedAt.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_closedTrades_ClosedAt.DataPropertyName = "ClosedAt"; - col_dgv_closedTrades_ClosedAt.HeaderText = "Closed At"; - col_dgv_closedTrades_ClosedAt.MinimumWidth = 8; - col_dgv_closedTrades_ClosedAt.Name = "col_dgv_closedTrades_ClosedAt"; - col_dgv_closedTrades_ClosedAt.ReadOnly = true; - col_dgv_closedTrades_ClosedAt.Width = 125; - // - // col_dgv_closedTrades_ExitReason - // - col_dgv_closedTrades_ExitReason.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_closedTrades_ExitReason.DataPropertyName = "ExitReason"; - col_dgv_closedTrades_ExitReason.HeaderText = "Reason"; - col_dgv_closedTrades_ExitReason.MinimumWidth = 8; - col_dgv_closedTrades_ExitReason.Name = "col_dgv_closedTrades_ExitReason"; - col_dgv_closedTrades_ExitReason.ReadOnly = true; - col_dgv_closedTrades_ExitReason.Width = 105; - // - // toolStrip_closedtrades - // - toolStrip_closedtrades.ImageScalingSize = new Size(24, 24); - toolStrip_closedtrades.Items.AddRange(new ToolStripItem[] { toolStripLabel1, cb_closedTradesAccounts, toolStripSeparator3, btn_closedtrades_refresh }); - toolStrip_closedtrades.Location = new Point(3, 3); - toolStrip_closedtrades.Name = "toolStrip_closedtrades"; - toolStrip_closedtrades.Size = new Size(2481, 34); - toolStrip_closedtrades.TabIndex = 0; - toolStrip_closedtrades.Text = "toolStrip4"; - // - // toolStripLabel1 - // - toolStripLabel1.Name = "toolStripLabel1"; - toolStripLabel1.Size = new Size(81, 29); - toolStripLabel1.Text = "Account:"; - // - // cb_closedTradesAccounts - // - cb_closedTradesAccounts.DropDownStyle = ComboBoxStyle.DropDownList; - cb_closedTradesAccounts.Name = "cb_closedTradesAccounts"; - cb_closedTradesAccounts.Size = new Size(121, 34); - // - // toolStripSeparator3 - // - toolStripSeparator3.Name = "toolStripSeparator3"; - toolStripSeparator3.Size = new Size(6, 34); - // - // btn_closedtrades_refresh - // - btn_closedtrades_refresh.Image = Properties.Resources.token_quantifier; - btn_closedtrades_refresh.ImageTransparentColor = Color.Magenta; - btn_closedtrades_refresh.Name = "btn_closedtrades_refresh"; - btn_closedtrades_refresh.Size = new Size(140, 29); - btn_closedtrades_refresh.Text = "Aktualisieren"; - // - // tabPage_jobs - // - tabPage_jobs.Controls.Add(toolStrip4); - tabPage_jobs.Controls.Add(btn_telegramtest); - tabPage_jobs.Location = new Point(4, 34); - tabPage_jobs.Name = "tabPage_jobs"; - tabPage_jobs.Size = new Size(2501, 1147); - tabPage_jobs.TabIndex = 5; - tabPage_jobs.Text = "Jobs"; - tabPage_jobs.UseVisualStyleBackColor = true; - // - // toolStrip4 - // - toolStrip4.ImageScalingSize = new Size(24, 24); - toolStrip4.Location = new Point(0, 0); - toolStrip4.Name = "toolStrip4"; - toolStrip4.Size = new Size(2501, 25); - toolStrip4.TabIndex = 1; - toolStrip4.Text = "toolStrip4"; - // - // btn_telegramtest - // - btn_telegramtest.Location = new Point(0, 0); - btn_telegramtest.Name = "btn_telegramtest"; - btn_telegramtest.Size = new Size(75, 23); - btn_telegramtest.TabIndex = 3; - // - // imageList_tabpages - // - imageList_tabpages.ColorDepth = ColorDepth.Depth32Bit; - imageList_tabpages.ImageStream = (ImageListStreamer)resources.GetObject("imageList_tabpages.ImageStream"); - imageList_tabpages.TransparentColor = Color.Transparent; - imageList_tabpages.Images.SetKeyName(0, "areachart.png"); - imageList_tabpages.Images.SetKeyName(1, "application_xp_terminal.png"); - imageList_tabpages.Images.SetKeyName(2, "setting_tools.png"); - imageList_tabpages.Images.SetKeyName(3, "sheduled_task.png"); - imageList_tabpages.Images.SetKeyName(4, "copying_and_distribution.png"); - // - // toolStrip_terminal - // - toolStrip_terminal.ImageScalingSize = new Size(24, 24); - toolStrip_terminal.Items.AddRange(new ToolStripItem[] { Label_TerminalLoglevel, cb_terminalLogLevel, toolStripSeparator8, btn_autoscroll }); - toolStrip_terminal.Location = new Point(0, 0); - toolStrip_terminal.Name = "toolStrip_terminal"; - toolStrip_terminal.Size = new Size(2518, 34); - toolStrip_terminal.TabIndex = 1; - toolStrip_terminal.Text = "toolStrip4"; - // - // Label_TerminalLoglevel - // - Label_TerminalLoglevel.Name = "Label_TerminalLoglevel"; - Label_TerminalLoglevel.Size = new Size(81, 29); - Label_TerminalLoglevel.Text = "Loglevel:"; - // - // cb_terminalLogLevel - // - cb_terminalLogLevel.Items.AddRange(new object[] { "Alle", "Info", "Error", "Trade", "TradeReasoning" }); - cb_terminalLogLevel.Name = "cb_terminalLogLevel"; - cb_terminalLogLevel.Size = new Size(200, 34); - // - // toolStripSeparator8 - // - toolStripSeparator8.Name = "toolStripSeparator8"; - toolStripSeparator8.Size = new Size(6, 34); - // - // btn_autoscroll - // - btn_autoscroll.Image = Properties.Resources.stop; - btn_autoscroll.ImageTransparentColor = Color.Magenta; - btn_autoscroll.Name = "btn_autoscroll"; - btn_autoscroll.Size = new Size(162, 29); - btn_autoscroll.Text = "Stop Autoscroll"; - // - // rtb_Terminal - // - rtb_Terminal.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - rtb_Terminal.BackColor = Color.Black; - rtb_Terminal.Font = new Font("Consolas", 12F, FontStyle.Regular, GraphicsUnit.Point, 0); - rtb_Terminal.Location = new Point(8, 36); - rtb_Terminal.Name = "rtb_Terminal"; - rtb_Terminal.Size = new Size(2502, 1152); - rtb_Terminal.TabIndex = 0; - rtb_Terminal.Text = ""; - // - // tabPage_mastertraders - // - tabPage_mastertraders.Controls.Add(splitContainer_masterTraders); - tabPage_mastertraders.Controls.Add(toolStrip_MasterTraders); - tabPage_mastertraders.Location = new Point(4, 34); - tabPage_mastertraders.Name = "tabPage_mastertraders"; - tabPage_mastertraders.Padding = new Padding(3); - tabPage_mastertraders.Size = new Size(2501, 1144); - tabPage_mastertraders.TabIndex = 2; - tabPage_mastertraders.Text = "Master-Traders"; - tabPage_mastertraders.UseVisualStyleBackColor = true; - // - // splitContainer_masterTraders - // - splitContainer_masterTraders.Dock = DockStyle.Fill; - splitContainer_masterTraders.Location = new Point(3, 37); - splitContainer_masterTraders.Name = "splitContainer_masterTraders"; - // - // splitContainer_masterTraders.Panel1 - // - splitContainer_masterTraders.Panel1.Controls.Add(propertyGrid_masters); - splitContainer_masterTraders.Panel1.Controls.Add(clb_assignedAccounts); - // - // splitContainer_masterTraders.Panel2 - // - splitContainer_masterTraders.Panel2.Controls.Add(dgv_masterTraders); - splitContainer_masterTraders.Size = new Size(2495, 1104); - splitContainer_masterTraders.SplitterDistance = 830; - splitContainer_masterTraders.TabIndex = 1; - // - // propertyGrid_masters - // - propertyGrid_masters.Dock = DockStyle.Fill; - propertyGrid_masters.Location = new Point(0, 0); - propertyGrid_masters.Name = "propertyGrid_masters"; - propertyGrid_masters.Size = new Size(830, 904); - propertyGrid_masters.TabIndex = 0; - // - // clb_assignedAccounts - // - clb_assignedAccounts.Dock = DockStyle.Bottom; - clb_assignedAccounts.FormattingEnabled = true; - clb_assignedAccounts.Location = new Point(0, 904); - clb_assignedAccounts.Name = "clb_assignedAccounts"; - clb_assignedAccounts.Size = new Size(830, 200); - clb_assignedAccounts.TabIndex = 1; - // - // dgv_masterTraders - // - dgv_masterTraders.AllowUserToAddRows = false; - dgv_masterTraders.AllowUserToDeleteRows = false; - dgv_masterTraders.AllowUserToResizeRows = false; - dgv_masterTraders.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; - dgv_masterTraders.Columns.AddRange(new DataGridViewColumn[] { col_dgv_masterTraders_Id, col_dgv_masterTraders_WalletAddress, col_dgv_masterTraders_DisplayName, col_dgv_masterTraders_Category, col_dgv_masterTraders_Description, col_dgv_masterTraders_Reasoning, col_dgv_masterTraders_IsActive, col_dgv_masterTraders_IsHidden, col_dgv_masterTraders_TotalTrades, col_dgv_masterTraders_WinningTrades, col_dgv_masterTraders_Winrate30t, col_dgv_masterTraders_TotalPnl }); - dgv_masterTraders.Dock = DockStyle.Fill; - dgv_masterTraders.Location = new Point(0, 0); - dgv_masterTraders.Name = "dgv_masterTraders"; - dgv_masterTraders.ReadOnly = true; - dgv_masterTraders.RowHeadersVisible = false; - dgv_masterTraders.RowHeadersWidth = 62; - dgv_masterTraders.Size = new Size(1661, 1104); - dgv_masterTraders.TabIndex = 0; - // - // col_dgv_masterTraders_Id - // - col_dgv_masterTraders_Id.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_masterTraders_Id.DataPropertyName = "Id"; - col_dgv_masterTraders_Id.HeaderText = "Id"; - col_dgv_masterTraders_Id.MinimumWidth = 8; - col_dgv_masterTraders_Id.Name = "col_dgv_masterTraders_Id"; - col_dgv_masterTraders_Id.ReadOnly = true; - col_dgv_masterTraders_Id.Visible = false; - col_dgv_masterTraders_Id.Width = 150; - // - // col_dgv_masterTraders_WalletAddress - // - col_dgv_masterTraders_WalletAddress.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_masterTraders_WalletAddress.DataPropertyName = "WalletAddress"; - col_dgv_masterTraders_WalletAddress.HeaderText = "Wallet"; - col_dgv_masterTraders_WalletAddress.MinimumWidth = 8; - col_dgv_masterTraders_WalletAddress.Name = "col_dgv_masterTraders_WalletAddress"; - col_dgv_masterTraders_WalletAddress.ReadOnly = true; - col_dgv_masterTraders_WalletAddress.Width = 96; - // - // col_dgv_masterTraders_DisplayName - // - col_dgv_masterTraders_DisplayName.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_masterTraders_DisplayName.DataPropertyName = "DisplayName"; - col_dgv_masterTraders_DisplayName.HeaderText = "Name"; - col_dgv_masterTraders_DisplayName.MinimumWidth = 8; - col_dgv_masterTraders_DisplayName.Name = "col_dgv_masterTraders_DisplayName"; - col_dgv_masterTraders_DisplayName.ReadOnly = true; - col_dgv_masterTraders_DisplayName.Width = 95; - // - // col_dgv_masterTraders_Category - // - col_dgv_masterTraders_Category.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_masterTraders_Category.DataPropertyName = "Category"; - col_dgv_masterTraders_Category.HeaderText = "Category"; - col_dgv_masterTraders_Category.MinimumWidth = 8; - col_dgv_masterTraders_Category.Name = "col_dgv_masterTraders_Category"; - col_dgv_masterTraders_Category.ReadOnly = true; - col_dgv_masterTraders_Category.Width = 120; - // - // col_dgv_masterTraders_Description - // - col_dgv_masterTraders_Description.AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader; - col_dgv_masterTraders_Description.DataPropertyName = "Description"; - col_dgv_masterTraders_Description.HeaderText = "Description"; - col_dgv_masterTraders_Description.MinimumWidth = 8; - col_dgv_masterTraders_Description.Name = "col_dgv_masterTraders_Description"; - col_dgv_masterTraders_Description.ReadOnly = true; - col_dgv_masterTraders_Description.Width = 138; - // - // col_dgv_masterTraders_Reasoning - // - col_dgv_masterTraders_Reasoning.AutoSizeMode = DataGridViewAutoSizeColumnMode.ColumnHeader; - col_dgv_masterTraders_Reasoning.DataPropertyName = "Reasoning"; - col_dgv_masterTraders_Reasoning.HeaderText = "Reasoning"; - col_dgv_masterTraders_Reasoning.MinimumWidth = 8; - col_dgv_masterTraders_Reasoning.Name = "col_dgv_masterTraders_Reasoning"; - col_dgv_masterTraders_Reasoning.ReadOnly = true; - col_dgv_masterTraders_Reasoning.Width = 130; - // - // col_dgv_masterTraders_IsActive - // - col_dgv_masterTraders_IsActive.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_masterTraders_IsActive.DataPropertyName = "IsActive"; - col_dgv_masterTraders_IsActive.HeaderText = "Is Active"; - col_dgv_masterTraders_IsActive.MinimumWidth = 8; - col_dgv_masterTraders_IsActive.Name = "col_dgv_masterTraders_IsActive"; - col_dgv_masterTraders_IsActive.ReadOnly = true; - col_dgv_masterTraders_IsActive.Width = 114; - // - // col_dgv_masterTraders_IsHidden - // - col_dgv_masterTraders_IsHidden.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_masterTraders_IsHidden.DataPropertyName = "IsHidden"; - col_dgv_masterTraders_IsHidden.HeaderText = "Is Hidden"; - col_dgv_masterTraders_IsHidden.MinimumWidth = 8; - col_dgv_masterTraders_IsHidden.Name = "col_dgv_masterTraders_IsHidden"; - col_dgv_masterTraders_IsHidden.ReadOnly = true; - col_dgv_masterTraders_IsHidden.Width = 124; - // - // col_dgv_masterTraders_TotalTrades - // - col_dgv_masterTraders_TotalTrades.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_masterTraders_TotalTrades.DataPropertyName = "TotalTrades"; - col_dgv_masterTraders_TotalTrades.HeaderText = "Trades"; - col_dgv_masterTraders_TotalTrades.MinimumWidth = 8; - col_dgv_masterTraders_TotalTrades.Name = "col_dgv_masterTraders_TotalTrades"; - col_dgv_masterTraders_TotalTrades.ReadOnly = true; - col_dgv_masterTraders_TotalTrades.Width = 98; - // - // col_dgv_masterTraders_WinningTrades - // - col_dgv_masterTraders_WinningTrades.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_masterTraders_WinningTrades.DataPropertyName = "WinningTrades"; - col_dgv_masterTraders_WinningTrades.HeaderText = "Wins"; - col_dgv_masterTraders_WinningTrades.MinimumWidth = 8; - col_dgv_masterTraders_WinningTrades.Name = "col_dgv_masterTraders_WinningTrades"; - col_dgv_masterTraders_WinningTrades.ReadOnly = true; - col_dgv_masterTraders_WinningTrades.Width = 87; - // - // col_dgv_masterTraders_Winrate30t - // - col_dgv_masterTraders_Winrate30t.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_masterTraders_Winrate30t.DataPropertyName = "Winrate30t"; - col_dgv_masterTraders_Winrate30t.HeaderText = "Winrate 30t"; - col_dgv_masterTraders_Winrate30t.MinimumWidth = 8; - col_dgv_masterTraders_Winrate30t.Name = "col_dgv_masterTraders_Winrate30t"; - col_dgv_masterTraders_Winrate30t.ReadOnly = true; - col_dgv_masterTraders_Winrate30t.Width = 140; - // - // col_dgv_masterTraders_TotalPnl - // - col_dgv_masterTraders_TotalPnl.AutoSizeMode = DataGridViewAutoSizeColumnMode.AllCells; - col_dgv_masterTraders_TotalPnl.DataPropertyName = "TotalPnl"; - col_dgv_masterTraders_TotalPnl.HeaderText = "Total P&L"; - col_dgv_masterTraders_TotalPnl.MinimumWidth = 8; - col_dgv_masterTraders_TotalPnl.Name = "col_dgv_masterTraders_TotalPnl"; - col_dgv_masterTraders_TotalPnl.ReadOnly = true; - col_dgv_masterTraders_TotalPnl.Width = 122; - // - // toolStrip_MasterTraders - // - toolStrip_MasterTraders.ImageScalingSize = new Size(24, 24); - toolStrip_MasterTraders.Items.AddRange(new ToolStripItem[] { btn_Mastertraders_add, btn_Mastertraders_del }); - toolStrip_MasterTraders.Location = new Point(3, 3); - toolStrip_MasterTraders.Name = "toolStrip_MasterTraders"; - toolStrip_MasterTraders.Size = new Size(2495, 34); - toolStrip_MasterTraders.TabIndex = 0; - toolStrip_MasterTraders.Text = "toolStrip3"; - // - // btn_Mastertraders_add - // - btn_Mastertraders_add.Image = Properties.Resources.add; - btn_Mastertraders_add.Name = "btn_Mastertraders_add"; - btn_Mastertraders_add.Size = new Size(245, 29); - btn_Mastertraders_add.Text = "Master-Trader Hinzufügen"; - btn_Mastertraders_add.Click += btn_Mastertraders_add_Click; - // - // btn_Mastertraders_del - // - btn_Mastertraders_del.Image = Properties.Resources.delete; - btn_Mastertraders_del.Name = "btn_Mastertraders_del"; - btn_Mastertraders_del.Size = new Size(218, 29); - btn_Mastertraders_del.Text = "Master-Trader Löschen"; - btn_Mastertraders_del.Click += btn_Mastertraders_del_Click; - // - // tabPage_slavetraders - // - tabPage_slavetraders.Controls.Add(toolStrip_slaveTraders); - tabPage_slavetraders.Controls.Add(splitContainer_SlaveTraders); - tabPage_slavetraders.Location = new Point(4, 34); - tabPage_slavetraders.Name = "tabPage_slavetraders"; - tabPage_slavetraders.Size = new Size(2501, 1144); - tabPage_slavetraders.TabIndex = 4; - tabPage_slavetraders.Text = "Slave-Traders"; - tabPage_slavetraders.UseVisualStyleBackColor = true; - // - // toolStrip_slaveTraders - // - toolStrip_slaveTraders.ImageScalingSize = new Size(24, 24); - toolStrip_slaveTraders.Items.AddRange(new ToolStripItem[] { btn_Slavetraders_add, btn_Slavetraders_del, toolStripSeparator2, toolStripLabel_deposit, toolStripTextBox_amount, btn_deposit, btn_withdraw, btn_demoreset }); - toolStrip_slaveTraders.Location = new Point(0, 0); - toolStrip_slaveTraders.Name = "toolStrip_slaveTraders"; - toolStrip_slaveTraders.Size = new Size(2501, 41); - toolStrip_slaveTraders.TabIndex = 1; - toolStrip_slaveTraders.Text = "toolStrip_slaveTraders"; - // - // btn_Slavetraders_add - // - btn_Slavetraders_add.Image = Properties.Resources.add; - btn_Slavetraders_add.Name = "btn_Slavetraders_add"; - btn_Slavetraders_add.Size = new Size(232, 36); - btn_Slavetraders_add.Text = "Slave-Trader Hinzufügen"; - btn_Slavetraders_add.Click += btn_Slavetraders_add_Click; - // - // btn_Slavetraders_del - // - btn_Slavetraders_del.Image = Properties.Resources.delete; - btn_Slavetraders_del.Name = "btn_Slavetraders_del"; - btn_Slavetraders_del.Size = new Size(205, 36); - btn_Slavetraders_del.Text = "Slave-Trader Löschen"; - btn_Slavetraders_del.Click += btn_Slavetraders_del_Click; - // - // toolStripSeparator2 - // - toolStripSeparator2.Name = "toolStripSeparator2"; - toolStripSeparator2.Size = new Size(6, 41); - // - // toolStripLabel_deposit - // - toolStripLabel_deposit.Name = "toolStripLabel_deposit"; - toolStripLabel_deposit.Size = new Size(157, 36); - toolStripLabel_deposit.Text = "Buchführung USD:"; - // - // toolStripTextBox_amount - // - toolStripTextBox_amount.Name = "toolStripTextBox_amount"; - toolStripTextBox_amount.Size = new Size(100, 41); - // - // btn_deposit - // - btn_deposit.Image = Properties.Resources.money_add; - btn_deposit.ImageScaling = ToolStripItemImageScaling.None; - btn_deposit.Name = "btn_deposit"; - btn_deposit.Size = new Size(121, 36); - btn_deposit.Text = "Einzahlen"; - btn_deposit.Click += btn_deposit_Click; - // - // btn_withdraw - // - btn_withdraw.Image = Properties.Resources.money_delete; - btn_withdraw.Name = "btn_withdraw"; - btn_withdraw.Size = new Size(120, 36); - btn_withdraw.Text = "Auszahlen"; - btn_withdraw.Click += btn_withdraw_Click; - // - // btn_demoreset - // - btn_demoreset.Image = Properties.Resources.refresh_all; - btn_demoreset.ImageTransparentColor = Color.Magenta; - btn_demoreset.Name = "btn_demoreset"; - btn_demoreset.Size = new Size(206, 36); - btn_demoreset.Text = "Reset Demo Account"; - btn_demoreset.Click += btn_demoreset_Click; - // - // splitContainer_SlaveTraders - // - splitContainer_SlaveTraders.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - splitContainer_SlaveTraders.Location = new Point(8, 44); - splitContainer_SlaveTraders.Name = "splitContainer_SlaveTraders"; - // - // splitContainer_SlaveTraders.Panel1 - // - splitContainer_SlaveTraders.Panel1.Controls.Add(propertyGrid_slaves); - // - // splitContainer_SlaveTraders.Panel2 - // - splitContainer_SlaveTraders.Panel2.Controls.Add(dgv_SlaveTraders); - splitContainer_SlaveTraders.Size = new Size(2366, 825); - splitContainer_SlaveTraders.SplitterDistance = 787; - splitContainer_SlaveTraders.TabIndex = 0; - // - // propertyGrid_slaves - // - propertyGrid_slaves.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - propertyGrid_slaves.Location = new Point(0, 0); - propertyGrid_slaves.Name = "propertyGrid_slaves"; - propertyGrid_slaves.Size = new Size(787, 1097); - propertyGrid_slaves.TabIndex = 0; - // - // dgv_SlaveTraders - // - dgv_SlaveTraders.AllowUserToAddRows = false; - dgv_SlaveTraders.AllowUserToDeleteRows = false; - dgv_SlaveTraders.AllowUserToResizeRows = false; - dgv_SlaveTraders.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - dgv_SlaveTraders.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; - dgv_SlaveTraders.Columns.AddRange(new DataGridViewColumn[] { col_dgv_SlaveTraders_AccountId, col_dgv_SlaveTraders_Name, col_dgv_SlaveTraders_WalletAddress, col_dgv_SlaveTraders_IsDemo, col_dgv_SlaveTraders_IsActive, col_dgv_SlaveTraders_CloseOnlyMode, col_dgv_SlaveTraders_PayoutAddress, col_dgv_SlaveTraders_PayoutLimitUsd, col_dgv_SlaveTraders_PerMarketLimit, col_dgv_SlaveTraders_MaxPriceDifference, col_dgv_SlaveTraders_MaxBuyPrice, col_dgv_SlaveTraders_ProfitTarget, col_dgv_SlaveTraders_LimitUnder6h, col_dgv_SlaveTraders_LimitUnder24h, col_dgv_SlaveTraders_LimitUnder72h, col_dgv_SlaveTraders_LimitOver72h }); - dgv_SlaveTraders.Location = new Point(0, 0); - dgv_SlaveTraders.Name = "dgv_SlaveTraders"; - dgv_SlaveTraders.ReadOnly = true; - dgv_SlaveTraders.RowHeadersVisible = false; - dgv_SlaveTraders.RowHeadersWidth = 62; - dgv_SlaveTraders.Size = new Size(1699, 1097); - dgv_SlaveTraders.TabIndex = 0; - // - // col_dgv_SlaveTraders_AccountId - // - col_dgv_SlaveTraders_AccountId.DataPropertyName = "AccountId"; - col_dgv_SlaveTraders_AccountId.HeaderText = "ID"; - col_dgv_SlaveTraders_AccountId.MinimumWidth = 8; - col_dgv_SlaveTraders_AccountId.Name = "col_dgv_SlaveTraders_AccountId"; - col_dgv_SlaveTraders_AccountId.ReadOnly = true; - col_dgv_SlaveTraders_AccountId.Visible = false; - col_dgv_SlaveTraders_AccountId.Width = 150; - // - // col_dgv_SlaveTraders_Name - // - col_dgv_SlaveTraders_Name.DataPropertyName = "Name"; - col_dgv_SlaveTraders_Name.HeaderText = "Name"; - col_dgv_SlaveTraders_Name.MinimumWidth = 8; - col_dgv_SlaveTraders_Name.Name = "col_dgv_SlaveTraders_Name"; - col_dgv_SlaveTraders_Name.ReadOnly = true; - col_dgv_SlaveTraders_Name.Width = 150; - // - // col_dgv_SlaveTraders_WalletAddress - // - col_dgv_SlaveTraders_WalletAddress.DataPropertyName = "WalletAddress"; - col_dgv_SlaveTraders_WalletAddress.HeaderText = "Wallet"; - col_dgv_SlaveTraders_WalletAddress.MinimumWidth = 8; - col_dgv_SlaveTraders_WalletAddress.Name = "col_dgv_SlaveTraders_WalletAddress"; - col_dgv_SlaveTraders_WalletAddress.ReadOnly = true; - col_dgv_SlaveTraders_WalletAddress.Width = 150; - // - // col_dgv_SlaveTraders_IsDemo - // - col_dgv_SlaveTraders_IsDemo.DataPropertyName = "IsDemo"; - col_dgv_SlaveTraders_IsDemo.HeaderText = "Is Demo"; - col_dgv_SlaveTraders_IsDemo.MinimumWidth = 8; - col_dgv_SlaveTraders_IsDemo.Name = "col_dgv_SlaveTraders_IsDemo"; - col_dgv_SlaveTraders_IsDemo.ReadOnly = true; - col_dgv_SlaveTraders_IsDemo.Width = 150; - // - // col_dgv_SlaveTraders_IsActive - // - col_dgv_SlaveTraders_IsActive.DataPropertyName = "IsActive"; - col_dgv_SlaveTraders_IsActive.HeaderText = "Is Active"; - col_dgv_SlaveTraders_IsActive.MinimumWidth = 8; - col_dgv_SlaveTraders_IsActive.Name = "col_dgv_SlaveTraders_IsActive"; - col_dgv_SlaveTraders_IsActive.ReadOnly = true; - col_dgv_SlaveTraders_IsActive.Width = 150; - // - // col_dgv_SlaveTraders_CloseOnlyMode - // - col_dgv_SlaveTraders_CloseOnlyMode.DataPropertyName = "CloseOnlyMode"; - col_dgv_SlaveTraders_CloseOnlyMode.HeaderText = "Close Only"; - col_dgv_SlaveTraders_CloseOnlyMode.MinimumWidth = 8; - col_dgv_SlaveTraders_CloseOnlyMode.Name = "col_dgv_SlaveTraders_CloseOnlyMode"; - col_dgv_SlaveTraders_CloseOnlyMode.ReadOnly = true; - col_dgv_SlaveTraders_CloseOnlyMode.Width = 150; - // - // col_dgv_SlaveTraders_PayoutAddress - // - col_dgv_SlaveTraders_PayoutAddress.DataPropertyName = "PayoutAddress"; - col_dgv_SlaveTraders_PayoutAddress.HeaderText = "Payout Address"; - col_dgv_SlaveTraders_PayoutAddress.MinimumWidth = 8; - col_dgv_SlaveTraders_PayoutAddress.Name = "col_dgv_SlaveTraders_PayoutAddress"; - col_dgv_SlaveTraders_PayoutAddress.ReadOnly = true; - col_dgv_SlaveTraders_PayoutAddress.Width = 150; - // - // col_dgv_SlaveTraders_PayoutLimitUsd - // - col_dgv_SlaveTraders_PayoutLimitUsd.DataPropertyName = "PayoutLimitUsd"; - col_dgv_SlaveTraders_PayoutLimitUsd.HeaderText = "Payout Limit"; - col_dgv_SlaveTraders_PayoutLimitUsd.MinimumWidth = 8; - col_dgv_SlaveTraders_PayoutLimitUsd.Name = "col_dgv_SlaveTraders_PayoutLimitUsd"; - col_dgv_SlaveTraders_PayoutLimitUsd.ReadOnly = true; - col_dgv_SlaveTraders_PayoutLimitUsd.Width = 150; - // - // col_dgv_SlaveTraders_PerMarketLimit - // - col_dgv_SlaveTraders_PerMarketLimit.DataPropertyName = "PerMarketLimit"; - col_dgv_SlaveTraders_PerMarketLimit.HeaderText = "Max %"; - col_dgv_SlaveTraders_PerMarketLimit.MinimumWidth = 8; - col_dgv_SlaveTraders_PerMarketLimit.Name = "col_dgv_SlaveTraders_PerMarketLimit"; - col_dgv_SlaveTraders_PerMarketLimit.ReadOnly = true; - col_dgv_SlaveTraders_PerMarketLimit.Width = 150; - // - // col_dgv_SlaveTraders_MaxPriceDifference - // - col_dgv_SlaveTraders_MaxPriceDifference.DataPropertyName = "MaxPriceDifference"; - col_dgv_SlaveTraders_MaxPriceDifference.HeaderText = "Max Price Diff"; - col_dgv_SlaveTraders_MaxPriceDifference.MinimumWidth = 8; - col_dgv_SlaveTraders_MaxPriceDifference.Name = "col_dgv_SlaveTraders_MaxPriceDifference"; - col_dgv_SlaveTraders_MaxPriceDifference.ReadOnly = true; - col_dgv_SlaveTraders_MaxPriceDifference.Width = 150; - // - // col_dgv_SlaveTraders_MaxBuyPrice - // - col_dgv_SlaveTraders_MaxBuyPrice.DataPropertyName = "MaxBuyPrice"; - col_dgv_SlaveTraders_MaxBuyPrice.HeaderText = "Max Buy Price"; - col_dgv_SlaveTraders_MaxBuyPrice.MinimumWidth = 8; - col_dgv_SlaveTraders_MaxBuyPrice.Name = "col_dgv_SlaveTraders_MaxBuyPrice"; - col_dgv_SlaveTraders_MaxBuyPrice.ReadOnly = true; - col_dgv_SlaveTraders_MaxBuyPrice.Width = 150; - // - // col_dgv_SlaveTraders_ProfitTarget - // - col_dgv_SlaveTraders_ProfitTarget.DataPropertyName = "ProfitTarget"; - col_dgv_SlaveTraders_ProfitTarget.HeaderText = "Profit Target"; - col_dgv_SlaveTraders_ProfitTarget.MinimumWidth = 8; - col_dgv_SlaveTraders_ProfitTarget.Name = "col_dgv_SlaveTraders_ProfitTarget"; - col_dgv_SlaveTraders_ProfitTarget.ReadOnly = true; - col_dgv_SlaveTraders_ProfitTarget.Width = 150; - // - // col_dgv_SlaveTraders_LimitUnder6h - // - col_dgv_SlaveTraders_LimitUnder6h.DataPropertyName = "perMaxTime6h"; - col_dgv_SlaveTraders_LimitUnder6h.HeaderText = "< 6h"; - col_dgv_SlaveTraders_LimitUnder6h.MinimumWidth = 8; - col_dgv_SlaveTraders_LimitUnder6h.Name = "col_dgv_SlaveTraders_LimitUnder6h"; - col_dgv_SlaveTraders_LimitUnder6h.ReadOnly = true; - col_dgv_SlaveTraders_LimitUnder6h.Width = 150; - // - // col_dgv_SlaveTraders_LimitUnder24h - // - col_dgv_SlaveTraders_LimitUnder24h.DataPropertyName = "perMaxTime24h"; - col_dgv_SlaveTraders_LimitUnder24h.HeaderText = "< 24h"; - col_dgv_SlaveTraders_LimitUnder24h.MinimumWidth = 8; - col_dgv_SlaveTraders_LimitUnder24h.Name = "col_dgv_SlaveTraders_LimitUnder24h"; - col_dgv_SlaveTraders_LimitUnder24h.ReadOnly = true; - col_dgv_SlaveTraders_LimitUnder24h.Width = 150; - // - // col_dgv_SlaveTraders_LimitUnder72h - // - col_dgv_SlaveTraders_LimitUnder72h.DataPropertyName = "perMaxTime72h"; - col_dgv_SlaveTraders_LimitUnder72h.HeaderText = "< 72h"; - col_dgv_SlaveTraders_LimitUnder72h.MinimumWidth = 8; - col_dgv_SlaveTraders_LimitUnder72h.Name = "col_dgv_SlaveTraders_LimitUnder72h"; - col_dgv_SlaveTraders_LimitUnder72h.ReadOnly = true; - col_dgv_SlaveTraders_LimitUnder72h.Width = 150; - // - // col_dgv_SlaveTraders_LimitOver72h - // - col_dgv_SlaveTraders_LimitOver72h.DataPropertyName = "perMaxTimeNone"; - col_dgv_SlaveTraders_LimitOver72h.HeaderText = "> 72h"; - col_dgv_SlaveTraders_LimitOver72h.MinimumWidth = 8; - col_dgv_SlaveTraders_LimitOver72h.Name = "col_dgv_SlaveTraders_LimitOver72h"; - col_dgv_SlaveTraders_LimitOver72h.ReadOnly = true; - col_dgv_SlaveTraders_LimitOver72h.Width = 150; - // - // tabPage_settings - // - tabPage_settings.Controls.Add(toolStrip2); - tabPage_settings.Controls.Add(propertyGrid_serversettings); - tabPage_settings.Location = new Point(4, 34); - tabPage_settings.Name = "tabPage_settings"; - tabPage_settings.Size = new Size(2501, 1144); - tabPage_settings.TabIndex = 6; - tabPage_settings.Text = "Server Settings"; - tabPage_settings.UseVisualStyleBackColor = true; - // - // toolStrip2 - // - toolStrip2.ImageScalingSize = new Size(24, 24); - toolStrip2.Items.AddRange(new ToolStripItem[] { btn_savesettings }); - toolStrip2.Location = new Point(0, 0); - toolStrip2.Name = "toolStrip2"; - toolStrip2.Size = new Size(2501, 34); - toolStrip2.TabIndex = 1; - toolStrip2.Text = "toolStrip2"; - // - // btn_savesettings - // - btn_savesettings.Image = Properties.Resources.diskette; - btn_savesettings.ImageTransparentColor = Color.Magenta; - btn_savesettings.Name = "btn_savesettings"; - btn_savesettings.Size = new Size(117, 29); - btn_savesettings.Text = "Speichern"; - // - // propertyGrid_serversettings - // - propertyGrid_serversettings.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - propertyGrid_serversettings.Location = new Point(8, 37); - propertyGrid_serversettings.Name = "propertyGrid_serversettings"; - propertyGrid_serversettings.Size = new Size(2490, 1104); - propertyGrid_serversettings.TabIndex = 0; - // - // toolStrip1 - // - toolStrip1.ImageScalingSize = new Size(24, 24); - toolStrip1.Items.AddRange(new ToolStripItem[] { btn_livetradingactive, toolStripSeparator6, btn_demotradingactive, toolStripSeparator1 }); - toolStrip1.Location = new Point(0, 33); - toolStrip1.Name = "toolStrip1"; - toolStrip1.RenderMode = ToolStripRenderMode.Professional; - toolStrip1.Size = new Size(2538, 34); - toolStrip1.Stretch = true; - toolStrip1.TabIndex = 3; - toolStrip1.Text = "toolStrip1"; - // - // btn_livetradingactive - // - btn_livetradingactive.Alignment = ToolStripItemAlignment.Right; - btn_livetradingactive.BackColor = Color.IndianRed; - btn_livetradingactive.Image = Properties.Resources.cancel; - btn_livetradingactive.ImageTransparentColor = Color.Magenta; - btn_livetradingactive.Name = "btn_livetradingactive"; - btn_livetradingactive.Size = new Size(240, 29); - btn_livetradingactive.Text = "LiveTrading(DEAKTIVIERT)"; - btn_livetradingactive.Click += btn_livetradingactive_Click; - // - // toolStripSeparator6 - // - toolStripSeparator6.Alignment = ToolStripItemAlignment.Right; - toolStripSeparator6.Name = "toolStripSeparator6"; - toolStripSeparator6.Size = new Size(6, 34); - // - // btn_demotradingactive - // - btn_demotradingactive.Alignment = ToolStripItemAlignment.Right; - btn_demotradingactive.BackColor = Color.IndianRed; - btn_demotradingactive.Image = Properties.Resources.cancel; - btn_demotradingactive.ImageTransparentColor = Color.Magenta; - btn_demotradingactive.Name = "btn_demotradingactive"; - btn_demotradingactive.Size = new Size(263, 29); - btn_demotradingactive.Text = "Demotrading (DEAKTIVIERT)"; - btn_demotradingactive.Visible = false; - btn_demotradingactive.Click += btn_demotradingactive_Click; - // - // toolStripSeparator1 - // - toolStripSeparator1.Alignment = ToolStripItemAlignment.Right; - toolStripSeparator1.Name = "toolStripSeparator1"; - toolStripSeparator1.Size = new Size(6, 34); - // - // tabControl_main - // - tabControl_main.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - tabControl_main.Controls.Add(maintab_dashboard); - tabControl_main.Controls.Add(maintab_terminal); - tabControl_main.Controls.Add(maintab_settings); - tabControl_main.Controls.Add(maintab_jobs); - tabControl_main.Controls.Add(maintab_copytrading); - tabControl_main.ImageList = imageList_tabpages; - tabControl_main.Location = new Point(12, 70); - tabControl_main.Name = "tabControl_main"; - tabControl_main.SelectedIndex = 0; - tabControl_main.Size = new Size(2526, 1229); - tabControl_main.TabIndex = 4; - // - // maintab_dashboard - // - maintab_dashboard.Controls.Add(tabControl_dash); - maintab_dashboard.ImageKey = "areachart.png"; - maintab_dashboard.Location = new Point(4, 34); - maintab_dashboard.Name = "maintab_dashboard"; - maintab_dashboard.Padding = new Padding(3); - maintab_dashboard.Size = new Size(2518, 1191); - maintab_dashboard.TabIndex = 0; - maintab_dashboard.Text = "Dashboard"; - maintab_dashboard.UseVisualStyleBackColor = true; - // - // maintab_terminal - // - maintab_terminal.Controls.Add(toolStrip_terminal); - maintab_terminal.Controls.Add(rtb_Terminal); - maintab_terminal.ImageKey = "application_xp_terminal.png"; - maintab_terminal.Location = new Point(4, 34); - maintab_terminal.Name = "maintab_terminal"; - maintab_terminal.Size = new Size(2518, 1191); - maintab_terminal.TabIndex = 3; - maintab_terminal.Text = "Console"; - maintab_terminal.UseVisualStyleBackColor = true; - // - // maintab_settings - // - maintab_settings.Controls.Add(tabcontrol_settings); - maintab_settings.ImageKey = "setting_tools.png"; - maintab_settings.Location = new Point(4, 34); - maintab_settings.Name = "maintab_settings"; - maintab_settings.Padding = new Padding(3); - maintab_settings.Size = new Size(2518, 1191); - maintab_settings.TabIndex = 1; - maintab_settings.Text = "Settings"; - maintab_settings.UseVisualStyleBackColor = true; - // - // tabcontrol_settings - // - tabcontrol_settings.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - tabcontrol_settings.Controls.Add(tabPage_settings); - tabcontrol_settings.Controls.Add(tabPage_mastertraders); - tabcontrol_settings.Controls.Add(tabPage_slavetraders); - tabcontrol_settings.Controls.Add(tabPage_Iicense); - tabcontrol_settings.Location = new Point(6, 3); - tabcontrol_settings.Name = "tabcontrol_settings"; - tabcontrol_settings.SelectedIndex = 0; - tabcontrol_settings.Size = new Size(2509, 1182); - tabcontrol_settings.TabIndex = 0; - // - // maintab_jobs - // - maintab_jobs.Controls.Add(toolStrip5); - maintab_jobs.Controls.Add(dgv_jobs); - maintab_jobs.ImageKey = "sheduled_task.png"; - maintab_jobs.Location = new Point(4, 34); - maintab_jobs.Name = "maintab_jobs"; - maintab_jobs.Size = new Size(2518, 1191); - maintab_jobs.TabIndex = 2; - maintab_jobs.Text = "Server Jobs"; - maintab_jobs.UseVisualStyleBackColor = true; - maintab_jobs.Click += maintab_jobs_Click; - // - // toolStrip5 - // - toolStrip5.ImageScalingSize = new Size(24, 24); - toolStrip5.Location = new Point(0, 0); - toolStrip5.Name = "toolStrip5"; - toolStrip5.Size = new Size(2518, 25); - toolStrip5.TabIndex = 4; - toolStrip5.Text = "toolStrip5"; - // - // dgv_jobs - // - dgv_jobs.AllowUserToAddRows = false; - dgv_jobs.AllowUserToDeleteRows = false; - dgv_jobs.AllowUserToResizeRows = false; - dgv_jobs.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right; - dgv_jobs.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; - dgv_jobs.Location = new Point(3, 28); - dgv_jobs.MultiSelect = false; - dgv_jobs.Name = "dgv_jobs"; - dgv_jobs.ReadOnly = true; - dgv_jobs.RowHeadersVisible = false; - dgv_jobs.RowHeadersWidth = 62; - dgv_jobs.Size = new Size(2512, 1160); - dgv_jobs.TabIndex = 3; - // - // maintab_copytrading - // - maintab_copytrading.BackColor = Color.Transparent; - maintab_copytrading.ImageKey = "copying_and_distribution.png"; - maintab_copytrading.Location = new Point(4, 34); - maintab_copytrading.Name = "maintab_copytrading"; - maintab_copytrading.Size = new Size(2518, 1191); - maintab_copytrading.TabIndex = 4; - maintab_copytrading.Text = "CopyTrading"; - // - // tabPage_Iicense - // - tabPage_Iicense.Controls.Add(toolStrip6); - tabPage_Iicense.Location = new Point(4, 34); - tabPage_Iicense.Name = "tabPage_Iicense"; - tabPage_Iicense.Padding = new Padding(3); - tabPage_Iicense.Size = new Size(2501, 1144); - tabPage_Iicense.TabIndex = 7; - tabPage_Iicense.Text = "License"; - tabPage_Iicense.UseVisualStyleBackColor = true; - // - // toolStrip6 - // - toolStrip6.ImageScalingSize = new Size(24, 24); - toolStrip6.Items.AddRange(new ToolStripItem[] { btn_licensecheck }); - toolStrip6.Location = new Point(3, 3); - toolStrip6.Name = "toolStrip6"; - toolStrip6.Size = new Size(2495, 34); - toolStrip6.TabIndex = 0; - toolStrip6.Text = "toolStrip6"; - // - // btn_licensecheck - // - btn_licensecheck.Image = Properties.Resources.accept_button; - btn_licensecheck.ImageTransparentColor = Color.Magenta; - btn_licensecheck.Name = "btn_licensecheck"; - btn_licensecheck.Size = new Size(148, 29); - btn_licensecheck.Text = "Check License"; - // - // frm_main - // - AutoScaleDimensions = new SizeF(10F, 25F); - AutoScaleMode = AutoScaleMode.Font; - BackColor = SystemColors.Control; - ClientSize = new Size(2538, 1334); - Controls.Add(tabControl_main); - Controls.Add(toolStrip1); - Controls.Add(statusStrip1); - Controls.Add(menuStrip1); - Icon = (Icon)resources.GetObject("$this.Icon"); - MainMenuStrip = menuStrip1; - Name = "frm_main"; - Text = "Polytrader"; - Load += frm_main_Load; - menuStrip1.ResumeLayout(false); - menuStrip1.PerformLayout(); - statusStrip1.ResumeLayout(false); - statusStrip1.PerformLayout(); - tabControl_dash.ResumeLayout(false); - tabPage_dashboard.ResumeLayout(false); - tabPage_dashboard.PerformLayout(); - toolStrip3.ResumeLayout(false); - toolStrip3.PerformLayout(); - groupBox_Accountdetails.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)dgv_permaster).EndInit(); - tabControl1.ResumeLayout(false); - tabPage_dash_topmaster.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)dgv_dash_toptraders).EndInit(); - tabPage_dash_flopmaster.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)dgv_dash_floptraders).EndInit(); - ((System.ComponentModel.ISupportInitialize)dgv_dashboard_detaillaufzeit).EndInit(); - groupBox_Accountuebersicht.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)dgv_dashboard).EndInit(); - tabPage_trades.ResumeLayout(false); - tabControl_trades.ResumeLayout(false); - tabPage_openTrades.ResumeLayout(false); - tabPage_openTrades.PerformLayout(); - toolStrip_openTrades.ResumeLayout(false); - toolStrip_openTrades.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)dgv_openTrades).EndInit(); - tabPage_closedTrades.ResumeLayout(false); - tabPage_closedTrades.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)dgv_closedTrades).EndInit(); - toolStrip_closedtrades.ResumeLayout(false); - toolStrip_closedtrades.PerformLayout(); - tabPage_jobs.ResumeLayout(false); - tabPage_jobs.PerformLayout(); - toolStrip_terminal.ResumeLayout(false); - toolStrip_terminal.PerformLayout(); - tabPage_mastertraders.ResumeLayout(false); - tabPage_mastertraders.PerformLayout(); - splitContainer_masterTraders.Panel1.ResumeLayout(false); - splitContainer_masterTraders.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)splitContainer_masterTraders).EndInit(); - splitContainer_masterTraders.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)dgv_masterTraders).EndInit(); - toolStrip_MasterTraders.ResumeLayout(false); - toolStrip_MasterTraders.PerformLayout(); - tabPage_slavetraders.ResumeLayout(false); - tabPage_slavetraders.PerformLayout(); - toolStrip_slaveTraders.ResumeLayout(false); - toolStrip_slaveTraders.PerformLayout(); - splitContainer_SlaveTraders.Panel1.ResumeLayout(false); - splitContainer_SlaveTraders.Panel2.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)splitContainer_SlaveTraders).EndInit(); - splitContainer_SlaveTraders.ResumeLayout(false); - ((System.ComponentModel.ISupportInitialize)dgv_SlaveTraders).EndInit(); - tabPage_settings.ResumeLayout(false); - tabPage_settings.PerformLayout(); - toolStrip2.ResumeLayout(false); - toolStrip2.PerformLayout(); - toolStrip1.ResumeLayout(false); - toolStrip1.PerformLayout(); - tabControl_main.ResumeLayout(false); - maintab_dashboard.ResumeLayout(false); - maintab_terminal.ResumeLayout(false); - maintab_terminal.PerformLayout(); - maintab_settings.ResumeLayout(false); - tabcontrol_settings.ResumeLayout(false); - maintab_jobs.ResumeLayout(false); - maintab_jobs.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)dgv_jobs).EndInit(); - tabPage_Iicense.ResumeLayout(false); - tabPage_Iicense.PerformLayout(); - toolStrip6.ResumeLayout(false); - toolStrip6.PerformLayout(); - ResumeLayout(false); - PerformLayout(); - } - - #endregion - - private MenuStrip menuStrip1; - private ToolStripMenuItem toolStripMenuItem_datei; - private StatusStrip statusStrip1; - private ToolStripStatusLabel toolStripStatusLabel_cpuram; - private ToolStripStatusLabel toolStripStatusLabel_ratelimit; - private ToolStripStatusLabel toolStripStatusLabel_ping; - private ToolStripStatusLabel toolStripStatusLabel_vpn; - private TabControl tabControl_dash; - private TabPage tabPage_dashboard; - private TabPage tabPage_trades; - private TabPage tabPage_mastertraders; - private TabControl tabControl_trades; - private TabPage tabPage_openTrades; - private TabPage tabPage_closedTrades; - private ToolStrip toolStrip1; - private ToolStripButton btn_livetradingactive; - private ToolStripButton btn_demotradingactive; - private TabPage tabPage_terminal; - private TabPage tabPage_slavetraders; - private GroupBox groupBox_Accountuebersicht; - private DataGridViewTextBoxColumn col_dgv_SlaveTraders_AccountId; - private DataGridViewTextBoxColumn col_dgv_SlaveTraders_Name; - private DataGridViewTextBoxColumn col_dgv_SlaveTraders_WalletAddress; - private DataGridViewTextBoxColumn col_dgv_SlaveTraders_IsDemo; - private DataGridViewTextBoxColumn col_dgv_SlaveTraders_IsActive; - private DataGridViewTextBoxColumn col_dgv_SlaveTraders_CloseOnlyMode; - private DataGridViewTextBoxColumn col_dgv_SlaveTraders_PayoutAddress; - private DataGridViewTextBoxColumn col_dgv_SlaveTraders_PayoutLimitUsd; - private DataGridViewTextBoxColumn col_dgv_SlaveTraders_PerMarketLimit; - private DataGridViewTextBoxColumn col_dgv_SlaveTraders_MaxPriceDifference; - private DataGridViewTextBoxColumn col_dgv_SlaveTraders_MaxBuyPrice; - private DataGridViewTextBoxColumn col_dgv_SlaveTraders_ProfitTarget; - private DataGridViewTextBoxColumn col_dgv_SlaveTraders_LimitUnder6h; - private DataGridViewTextBoxColumn col_dgv_SlaveTraders_LimitUnder24h; - private DataGridViewTextBoxColumn col_dgv_SlaveTraders_LimitUnder72h; - private DataGridViewTextBoxColumn col_dgv_SlaveTraders_LimitOver72h; - private DataGridView dgv_dashboard; - private TabPage tabPage_jobs; - private Button btn_telegramtest; - private RichTextBox rtb_Terminal; - private ToolStripSeparator toolStripSeparator1; - private TabPage tabPage_settings; - private ToolStrip toolStrip2; - private ToolStripButton btn_savesettings; - private PropertyGrid propertyGrid_serversettings; - private ToolStrip toolStrip_openTrades; - private DataGridView dgv_openTrades; - private ToolStrip toolStrip_closedtrades; - private DataGridView dgv_closedTrades; - private SplitContainer splitContainer_masterTraders; - private DataGridView dgv_masterTraders; - private ToolStrip toolStrip_MasterTraders; - private ToolStrip toolStrip_slaveTraders; - private SplitContainer splitContainer_SlaveTraders; - private DataGridView dgv_SlaveTraders; - private ToolStrip toolStrip_terminal; - private ToolStripLabel Label_TerminalLoglevel; - private ToolStripComboBox cb_terminalLogLevel; - private ToolStripMenuItem btn_ms_test; - private ToolStripSeparator toolStripMenuItem1; - private ToolStripMenuItem btn_ms_beenden; - private PropertyGrid propertyGrid_slaves; - private PropertyGrid propertyGrid_masters; - private ToolStripButton btn_Slavetraders_add; - private ToolStripButton btn_Slavetraders_del; - private ToolStripButton btn_Mastertraders_add; - private ToolStripButton btn_Mastertraders_del; - private CheckedListBox clb_assignedAccounts; - private ToolStripSeparator toolStripSeparator2; - private ToolStripLabel toolStripLabel_deposit; - private ToolStripTextBox toolStripTextBox_amount; - private ToolStripButton btn_deposit; - private ToolStripButton btn_withdraw; - private System.Windows.Forms.GroupBox groupBox_Accountdetails; - private ToolStripMenuItem bearbeitenToolStripMenuItem; - private ToolStripMenuItem btn_showProgrammFolder; - private ToolStrip toolStrip3; - private ToolStripButton btn_dashboardRefresh; - private ToolStripLabel toolStripLabel2; - private ToolStripComboBox cb_opentrades_account; - private ToolStripButton btn_opentrades_refresh; - private ToolStripLabel toolStripLabel1; - private ToolStripComboBox cb_closedTradesAccounts; - private ToolStripSeparator toolStripSeparator3; - private ToolStripButton btn_closedtrades_refresh; - private ToolStripSeparator toolStripSeparator4; - private ToolStripLabel toolStripLabel3; - private ToolStripComboBox cb_opentrades_laufzeit; - private ToolStripSeparator toolStripSeparator5; - private DataGridView dgv_dashboard_detaillaufzeit; - private DataGridViewTextBoxColumn Column_Laufzeit; - private DataGridViewTextBoxColumn Column_LaufzeitProz; - private DataGridViewTextBoxColumn Column_laufzeitUSD; - private DataGridViewTextBoxColumn Column_Aktuellproz; - private DataGridViewTextBoxColumn Column_aktuellusd; - private ToolStripMenuItem vPNToolStripMenuItem; - private ToolStripMenuItem btn_vpnConnect; - private ToolStripMenuItem btn_vpndisconnect; - private ToolStripSeparator toolStripSeparator6; - private DataGridViewTextBoxColumn col_dgv_openTrades_AccountName; - private DataGridViewLinkColumn col_dgv_openTrades_SourceTraderName; - private DataGridViewLinkColumn col_dgv_openTrades_MarketQuestion; - private DataGridViewTextBoxColumn col_dgv_openTrades_MarketSlug; - private DataGridViewTextBoxColumn col_dgv_openTrades_Outcome; - private DataGridViewTextBoxColumn col_dgv_openTrades_Side; - private DataGridViewTextBoxColumn col_dgv_openTrades_EntryPrice; - private DataGridViewTextBoxColumn col_dgv_openTrades_CurrentPrice; - private DataGridViewTextBoxColumn col_dgv_openTrades_Size; - private DataGridViewTextBoxColumn col_dgv_openTrades_AmountUsd; - private DataGridViewButtonColumn col_dgv_openTrades_CloseBtn; - private DataGridViewTextBoxColumn col_dgv_dashboard_AccountId; - private DataGridViewTextBoxColumn col_dgv_dashboard_IsDemo; - private DataGridViewTextBoxColumn col_dgv_dashboard_IsActive; - private DataGridViewTextBoxColumn col_dgv_dashboard_AccountName; - private DataGridViewTextBoxColumn col_dgv_dashboard_TotalBalance; - private DataGridViewTextBoxColumn col_dgv_dashboard_AvailableBalance; - private DataGridViewTextBoxColumn col_dgv_dashboard_PositionBalance; - private DataGridViewTextBoxColumn col_dgv_dashboard_OpenTradesCount; - private DataGridViewTextBoxColumn col_dgv_dashboard_ClosedTrades24h; - private DataGridViewTextBoxColumn col_dgv_dashboard_Pnl24h; - private DataGridViewTextBoxColumn col_dgv_dashboard_Winrate24h; - private DataGridViewTextBoxColumn col_dgv_dashboard_ClosedTrades7d; - private DataGridViewTextBoxColumn col_dgv_dashboard_Pnl7d; - private DataGridViewTextBoxColumn col_dgv_dashboard_Winrate7d; - private ToolStrip toolStrip4; - private ToolStripMenuItem toolStripMenuItem2; - private ToolStripMenuItem btn_debug_pollinglog; - private ToolStripButton btn_demoreset; - private ToolStripMenuItem btn_debugorderpayload; - private ToolStripStatusLabel toolStripStatusLabel_build; - private ToolStripSeparator toolStripSeparator7; - private TabControl tabControl1; - private TabPage tabPage_dash_topmaster; - private DataGridView dgv_dash_toptraders; - private TabPage tabPage_dash_flopmaster; - private DataGridViewLinkColumn col_name; - private DataGridViewTextBoxColumn col_Winrate; - private DataGridViewTextBoxColumn col_pl; - private DataGridViewTextBoxColumn col_trades; - private DataGridView dgv_dash_floptraders; - private DataGridViewLinkColumn dataGridViewLinkColumn1; - private DataGridViewTextBoxColumn dataGridViewTextBoxColumn1; - private DataGridViewTextBoxColumn dataGridViewTextBoxColumn2; - private DataGridViewTextBoxColumn dataGridViewTextBoxColumn3; - private ToolStripSeparator toolStripSeparator8; - private ToolStripButton btn_autoscroll; - private DataGridView dgv_permaster; - private DataGridViewTextBoxColumn col_mastername; - private DataGridViewTextBoxColumn col_aktproz; - private DataGridViewTextBoxColumn col_aktUSD; - private DataGridViewTextBoxColumn col_dgv_closedTrades_AccountName; - private DataGridViewTextBoxColumn col_dgv_closedTrades_TradeId; - private DataGridViewTextBoxColumn col_dgv_closedTrades_AccountId; - private DataGridViewTextBoxColumn col_dgv_closedTrades_SourceTraderId; - private DataGridViewLinkColumn col_dgv_closedTrades_SourceTraderName; - private DataGridViewTextBoxColumn col_dgv_closedTrades_IsDemo; - private DataGridViewTextBoxColumn col_dgv_closedTrades_TokenId; - private DataGridViewTextBoxColumn col_dgv_closedTrades_MarketSlug; - private DataGridViewLinkColumn col_dgv_closedTrades_MarketQuestion; - private DataGridViewTextBoxColumn col_dgv_closedTrades_Outcome; - private DataGridViewTextBoxColumn col_dgv_closedTrades_Side; - private DataGridViewTextBoxColumn col_dgv_closedTrades_EntryPrice; - private DataGridViewTextBoxColumn col_dgv_closedTrades_ExitPrice; - private DataGridViewTextBoxColumn col_dgv_closedTrades_Size; - private DataGridViewTextBoxColumn col_dgv_closedTrades_RealizedPnl; - private DataGridViewTextBoxColumn col_dgv_closedTrades_PnlPercent; - private DataGridViewTextBoxColumn col_dgv_closedTrades_TotalFees; - private DataGridViewTextBoxColumn col_dgv_closedTrades_OpenedAt; - private DataGridViewTextBoxColumn col_dgv_closedTrades_ClosedAt; - private DataGridViewTextBoxColumn col_dgv_closedTrades_ExitReason; - private DataGridViewTextBoxColumn col_dgv_masterTraders_Id; - private DataGridViewTextBoxColumn col_dgv_masterTraders_WalletAddress; - private DataGridViewTextBoxColumn col_dgv_masterTraders_DisplayName; - private DataGridViewTextBoxColumn col_dgv_masterTraders_Category; - private DataGridViewTextBoxColumn col_dgv_masterTraders_Description; - private DataGridViewTextBoxColumn col_dgv_masterTraders_Reasoning; - private DataGridViewTextBoxColumn col_dgv_masterTraders_IsActive; - private DataGridViewTextBoxColumn col_dgv_masterTraders_IsHidden; - private DataGridViewTextBoxColumn col_dgv_masterTraders_TotalTrades; - private DataGridViewTextBoxColumn col_dgv_masterTraders_WinningTrades; - private DataGridViewTextBoxColumn col_dgv_masterTraders_Winrate30t; - private DataGridViewTextBoxColumn col_dgv_masterTraders_TotalPnl; - private ToolStripMenuItem btn_debugMTHistory; - private ToolStripMenuItem btn_sixshares; - private ToolStripMenuItem btn_cleanMasterTraders; - private ToolStripMenuItem btn_debugLiteDB; - private TabControl tabControl_main; - private TabPage maintab_dashboard; - private TabPage maintab_settings; - private TabPage maintab_terminal; - private TabPage maintab_jobs; - private TabPage maintab_copytrading; - private ImageList imageList_tabpages; - private TabControl tabcontrol_settings; - private DataGridView dgv_jobs; - private ToolStrip toolStrip5; - private TabPage tabPage_Iicense; - private ToolStrip toolStrip6; - private ToolStripButton btn_licensecheck; - } -} diff --git a/frm_main.cs b/frm_main.cs deleted file mode 100644 index f2a8145..0000000 --- a/frm_main.cs +++ /dev/null @@ -1,1858 +0,0 @@ -using System; -using MongoDB.Driver; -using PolyTraderSharp.Extensions; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Windows.Forms; -using System.ComponentModel; -using PolyTraderSharp.Models; -using PolyTraderSharp.Services; - -namespace PolyTraderSharp -{ - public partial class frm_main : Form - { - private readonly TradingState _tradingState; - private readonly CopyTradingState _copyState; - private readonly TerminalLogger _logger; - private readonly ThreemaService _threemaService; - private readonly MullvadVpnService _vpnService; - private ServerSettings _serverSettings = null!; - private readonly string _settingsFilePath = "server_settings.xml"; - - // UI Bindings - private BindingSource _bsSlaves = new BindingSource(); - private BindingSource _bsMasters = new BindingSource(); - private BindingList _dashboardList = new BindingList(); - private readonly System.Collections.Concurrent.ConcurrentQueue _logQueue = new System.Collections.Concurrent.ConcurrentQueue(); - private System.Windows.Forms.Timer _uiLogTimer = null!; - - private List GetActivePositions(AccountState acc) - { - var activeList = new List(); - - foreach (var p in acc.OpenPositions.Values) - { - if (_tradingState.MarketCache.TryGetValue(p.TokenId, out var md)) - { - if (!md.Closed) activeList.Add(p); - } - else - { - // Fallback pass-through if completely unknown - activeList.Add(p); - } - } - return activeList; - } - private System.Windows.Forms.Timer _dashboardTimer = null!; - private System.Windows.Forms.Timer _metricsTimer = null!; - private System.Windows.Forms.Timer _backupTimer = null!; - private System.Windows.Forms.Timer _threemaReportTimer = null!; - private readonly IMongoDatabase _db; - private readonly PolymarketApiService _api; - private readonly PolymarketClobClient _clob; - private readonly JobManager _jobManager; - - private DateTimePicker _dtpClosedTrades; - private bool _terminalAutoScroll = true; - - public frm_main(TradingState tradingState, CopyTradingState copyState, TerminalLogger logger, ThreemaService threemaService, MullvadVpnService vpnService, IMongoDatabase db, PolymarketApiService api, PolymarketClobClient clob, JobManager jobManager) - { - InitializeComponent(); - _tradingState = tradingState; - _copyState = copyState; - _logger = logger; - _threemaService = threemaService; - _vpnService = vpnService; - _db = db; - _api = api; - _clob = clob; - _jobManager = jobManager; - - _logger.OnLogMessage += Logger_OnLogMessage; - _threemaService.OnCommandReceived += ThreemaService_OnCommandReceived; - - dgv_openTrades.CellContentClick += DgvOpenTrades_CellContentClick; - dgv_closedTrades.CellContentClick += DgvTrades_CellContentClick; - dgv_jobs.CellContentClick += DgvJobs_CellContentClick; - - if (btn_debugLiteDB != null) btn_debugLiteDB.Click += Btn_debugLiteDB_Click; - - btn_autoscroll.Click += BtnAutoscroll_Click; - btn_autoscroll.BackColor = System.Drawing.Color.LightGreen; - rtb_Terminal.BackColor = System.Drawing.Color.Black; - rtb_Terminal.ForeColor = System.Drawing.Color.White; - - btn_cleanMasterTraders.Click += BtnCleanMasterTraders_Click; - - // Setup DatePicker for Closed Trades ToolStrip - _dtpClosedTrades = new DateTimePicker(); - _dtpClosedTrades.Format = DateTimePickerFormat.Short; - _dtpClosedTrades.Value = DateTime.Today; - _dtpClosedTrades.Width = 120; - _dtpClosedTrades.ValueChanged += (s, ev) => RefreshClosedTrades(); - - var host = new ToolStripControlHost(_dtpClosedTrades); - toolStrip_closedtrades.Items.Add(new ToolStripSeparator()); - toolStrip_closedtrades.Items.Add(new ToolStripLabel("Datum:")); - toolStrip_closedtrades.Items.Add(host); - - _uiLogTimer = new System.Windows.Forms.Timer { Interval = 250 }; - _uiLogTimer.Tick += ProcessLogQueue; - _uiLogTimer.Start(); - } - - private void Logger_OnLogMessage(object? sender, LogMessageEventArgs e) - { - _logQueue.Enqueue(e); - } - - private void ProcessLogQueue(object? sender, EventArgs e) - { - if (_logQueue.IsEmpty || !IsHandleCreated) return; - - string filter = "Alle"; - if (cb_terminalLogLevel.ComboBox != null && cb_terminalLogLevel.ComboBox.InvokeRequired) - { - filter = (string)cb_terminalLogLevel.ComboBox.Invoke(new Func(() => cb_terminalLogLevel.SelectedItem?.ToString() ?? "Alle")); - } - else if (cb_terminalLogLevel.SelectedItem != null) - { - filter = cb_terminalLogLevel.SelectedItem.ToString() ?? "Alle"; - } - - TimeZoneInfo berlinTz = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"); - bool appended = false; - int maxProcess = 500; - int count = 0; - - rtb_Terminal.SuspendLayout(); - - while (count < maxProcess && _logQueue.TryDequeue(out var logEvent)) - { - count++; - if (filter != "Alle" && logEvent.Level.ToString() != filter) continue; - - DateTime logTime = logEvent.Timestamp.Kind == DateTimeKind.Utc ? TimeZoneInfo.ConvertTimeFromUtc(logEvent.Timestamp, berlinTz) : TimeZoneInfo.ConvertTime(logEvent.Timestamp, berlinTz); - string timeStr = $"[{logTime:HH:mm:ss}]"; - - System.Drawing.Color c = System.Drawing.Color.White; - if (logEvent.Level == LogLevel.Error) c = System.Drawing.Color.Red; - else if (logEvent.Level == LogLevel.Warning) c = System.Drawing.Color.Yellow; - else if (logEvent.Level == LogLevel.Trade) c = System.Drawing.Color.LightGreen; - else if (logEvent.Level == LogLevel.TradeReasoning) c = System.Drawing.Color.Orange; - - rtb_Terminal.SelectionStart = rtb_Terminal.TextLength; - rtb_Terminal.SelectionLength = 0; - rtb_Terminal.SelectionColor = c; - rtb_Terminal.AppendText($"{timeStr} [{logEvent.Level}] {logEvent.Message}\n"); - appended = true; - } - - if (appended) - { - if (rtb_Terminal.TextLength > 80000) - { - rtb_Terminal.Clear(); - rtb_Terminal.SelectionColor = System.Drawing.Color.LightPink; - rtb_Terminal.AppendText($"[{DateTime.Now:HH:mm:ss}] [System] Terminal Auto-Clear (RAM Limit erreicht). Vollständige Logs befinden sich im Order /Logs.\n"); - } - - if (_terminalAutoScroll) - { - rtb_Terminal.ScrollToCaret(); - } - } - - rtb_Terminal.ResumeLayout(); - } - - private void AppendToTerminal(LogMessageEventArgs e) - { - _logQueue.Enqueue(e); - } - - private void BtnAutoscroll_Click(object? sender, EventArgs e) - { - _terminalAutoScroll = !_terminalAutoScroll; - btn_autoscroll.BackColor = _terminalAutoScroll ? System.Drawing.Color.LightGreen : System.Drawing.Color.IndianRed; - btn_autoscroll.Text = _terminalAutoScroll ? "Stop Autoscroll" : "Start Autoscroll"; - } - - private void BtnCleanMasterTraders_Click(object? sender, EventArgs e) - { - int clearedCount = 0; - var validAccountIds = _tradingState.Accounts.Keys.ToList(); - - foreach (var trader in _copyState.Traders.Values) - { - var orphanedIds = trader.AssignedAccountIds.Where(id => !validAccountIds.Contains(id)).ToList(); - if (orphanedIds.Count > 0) - { - foreach (var badId in orphanedIds) - { - trader.AssignedAccountIds.Remove(badId); - } - _db.GetCollection("traders").Update(trader); - clearedCount += orphanedIds.Count; - } - } - - MessageBox.Show($"Zuweisung entfernt: {clearedCount} verwaiste Master-Trader Verknüpfungen wurden erfolgreich bereinigt.", - "Bereinigung abgeschlossen", MessageBoxButtons.OK, MessageBoxIcon.Information); - - // Reload grid if master traders UI logic requires it - if (dgv_masterTraders.DataSource is BindingSource bs) bs.ResetBindings(false); - } - - private void ThreemaService_OnCommandReceived(string command) - { - if (!IsHandleCreated) return; - - Invoke(new Action(() => - { - string cmd = command.Trim().ToLower(); - if (cmd == "/stop") - { - _tradingState.LiveTradingMode = TradingMode.Inactive; - _tradingState.DemoTradingMode = TradingMode.Inactive; - UpdateToggleButtons(); - _logger.Warning("🛑 THREEMA COMMAND: Trading wurde komplett GESTOPPT!"); - _ = _threemaService.SendMessageAsync("🛑 Trading Gestoppt\nAlle Live und Demo Aktivitäten wurden deaktiviert."); - } - else if (cmd == "/abverkauf") - { - _tradingState.LiveTradingMode = TradingMode.SellOnly; - _tradingState.DemoTradingMode = TradingMode.SellOnly; - UpdateToggleButtons(); - _logger.Warning("📉 THREEMA COMMAND: Trading auf ABVERKAUF gesetzt!"); - _ = _threemaService.SendMessageAsync("📉 Abverkauf Modus\nAlle Accounts dürfen nur noch offene Positionen verkaufen. Neukäufe sind blockiert."); - } - else if (cmd == "/bericht") - { - _logger.Info("📊 THREEMA COMMAND: Manueller Bericht angefordert."); - _ = SendThreemaReport(); - } - })); - } - - private async Task SendThreemaReport() - { - var timeAgo = DateTime.UtcNow.AddHours(-24); - decimal totalPnl = 0; - var sb = new System.Text.StringBuilder(); - - sb.AppendLine($"📊 PolyTrader — 24h Slave Bericht"); - sb.AppendLine($"{DateTime.UtcNow:dd.MM.yyyy HH:mm} UTC"); - sb.AppendLine(""); - - try - { - var allClosed = await Task.Run(() => _db.GetCollection("closed_trades").LiteFind(t => t.ClosedAt >= timeAgo).ToList()); - - foreach (var acc in _tradingState.Accounts.Values.OrderBy(a => a.IsDemo ? 0 : 1)) - { - if (!acc.IsActive) continue; - - var accClosed = allClosed.Where(t => t.AccountId == acc.AccountId).ToList(); - decimal periodPnl = accClosed.Sum(t => t.RealizedPnl); - totalPnl += periodPnl; - - int winning = accClosed.Count(t => t.RealizedPnl > 0); - double winRate = accClosed.Count > 0 ? (winning * 100.0 / accClosed.Count) : 0; - - int openCount = acc.OpenPositions.Count; - - // Total Portfolio Balance = Liquid + Invested - decimal balance = acc.AvailableBalance + acc.OpenPositions.Values.Sum(p => p.AmountUsd); - - string modeIcon = acc.IsDemo ? "🧪" : "🔴"; - sb.AppendLine($"{modeIcon} {acc.Name}"); - sb.AppendLine($"Balance: ${balance:N2} | P&L: ${(periodPnl > 0 ? "+" : "")}{periodPnl:N2}"); - sb.AppendLine($"Winrate: {winRate:F0}% | Trades (24h): {accClosed.Count}"); - sb.AppendLine($"Offen: {openCount}"); - sb.AppendLine(""); - } - - sb.AppendLine($"📈 Gesamtes P&L (24h): ${(totalPnl > 0 ? "+" : "")}{totalPnl:N2}"); - } - catch (Exception ex) - { - _logger.Error($"Fehler beim Erstellen des Threema Berichts: {ex.Message}"); - sb.AppendLine("Fehler beim Abrufen der Statistiken."); - } - - await _threemaService.SendMessageAsync(sb.ToString()); - } - - private void RenderTerminalHistory() - { - rtb_Terminal.Clear(); - var history = _logger.GetHistory(TimeSpan.FromHours(6)); - foreach (var log in history) - { - AppendToTerminal(log); - } - } - - private void frm_main_Load(object sender, EventArgs e) - { - dgv_dashboard.AutoGenerateColumns = false; - dgv_openTrades.AutoGenerateColumns = false; - dgv_closedTrades.AutoGenerateColumns = false; - dgv_masterTraders.AutoGenerateColumns = false; - dgv_SlaveTraders.AutoGenerateColumns = false; - - // Setup Dashboard Analytics Grids - dgv_dash_toptraders.AutoGenerateColumns = false; - col_name.DataPropertyName = "SourceTraderName"; - col_Winrate.DataPropertyName = "Winrate30T"; - col_Winrate.DefaultCellStyle.Format = "N1"; - col_pl.DataPropertyName = "Pnl30T"; - col_pl.DefaultCellStyle.Format = "C2"; - col_trades.DataPropertyName = "Trades7D"; - - dgv_dash_floptraders.AutoGenerateColumns = false; - dataGridViewLinkColumn1.DataPropertyName = "SourceTraderName"; - dataGridViewTextBoxColumn1.DataPropertyName = "Winrate30T"; - dataGridViewTextBoxColumn1.DefaultCellStyle.Format = "N1"; - dataGridViewTextBoxColumn2.DataPropertyName = "Pnl30T"; - dataGridViewTextBoxColumn2.DefaultCellStyle.Format = "C2"; - dataGridViewTextBoxColumn3.DataPropertyName = "Trades7D"; - - dgv_dash_toptraders.CellContentClick += DgvTrades_CellContentClick; - dgv_dash_floptraders.CellContentClick += DgvTrades_CellContentClick; - - // Setup Jobs DataGrid - dgv_jobs.AutoGenerateColumns = false; - dgv_jobs.Columns.Add(new DataGridViewTextBoxColumn { DataPropertyName = "JobName", HeaderText = "Job Name", Width = 150, ReadOnly = true }); - dgv_jobs.Columns.Add(new DataGridViewTextBoxColumn { DataPropertyName = "StatusText", HeaderText = "Status", Width = 150, ReadOnly = true }); - dgv_jobs.Columns.Add(new DataGridViewTextBoxColumn { DataPropertyName = "LastRun", HeaderText = "Zuletzt ausgeführt", Width = 130, ReadOnly = true, DefaultCellStyle = new DataGridViewCellStyle { Format = "HH:mm:ss" } }); - dgv_jobs.Columns.Add(new DataGridViewTextBoxColumn { DataPropertyName = "NextRun", HeaderText = "Nächster Lauf", Width = 130, ReadOnly = true, DefaultCellStyle = new DataGridViewCellStyle { Format = "HH:mm:ss" } }); - - var enableCol = new DataGridViewCheckBoxColumn { DataPropertyName = "IsEnabled", HeaderText = "Aktiv", Name = "col_dgv_jobs_Enabled", Width = 60 }; - dgv_jobs.Columns.Add(enableCol); - - var runCol = new DataGridViewButtonColumn { HeaderText = "Aktion", Name = "col_dgv_jobs_Run", Text = "Run Now", UseColumnTextForButtonValue = true, Width = 80 }; - dgv_jobs.Columns.Add(runCol); - - dgv_jobs.Columns.Add(new DataGridViewTextBoxColumn { DataPropertyName = "Description", HeaderText = "Beschreibung", AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill, ReadOnly = true }); - - dgv_jobs.DataSource = _jobManager.Jobs; - - this.FormClosing += Frm_main_FormClosing; - - // Setup Terminal Filter - cb_terminalLogLevel.Items.Clear(); - cb_terminalLogLevel.Items.Add("Alle"); - foreach (var lvl in Enum.GetNames(typeof(LogLevel))) { cb_terminalLogLevel.Items.Add(lvl); } - cb_terminalLogLevel.SelectedIndex = 0; - cb_terminalLogLevel.SelectedIndexChanged += (s, ev) => RenderTerminalHistory(); - - _serverSettings = ServerSettings.Load(_settingsFilePath); - propertyGrid_serversettings.SelectedObject = _serverSettings; - - // Threema Report Job Setup - var reportJob = new JobStatusRow - { - JobName = "Threema Auto-Report", - Description = "Sends the Threema trading summary.", - StatusText = "Idle", - IsEnabled = _serverSettings.ThreemaEnabled - }; - reportJob.ManualTriggerAction = async () => - { - if (!reportJob.IsEnabled) return; - reportJob.StatusText = "Sending Report..."; - await SendThreemaReport(); - reportJob.StatusText = "Idle"; - reportJob.LastRun = DateTime.Now; - - int intervalHours = _serverSettings.ThreemaReportIntervalHours > 0 ? _serverSettings.ThreemaReportIntervalHours : 6; - reportJob.NextRun = DateTime.Now.AddHours(intervalHours); - }; - _jobManager.RegisterJob(reportJob); - - int initialHours = _serverSettings.ThreemaReportIntervalHours > 0 ? _serverSettings.ThreemaReportIntervalHours : 6; - reportJob.NextRun = DateTime.Now.AddHours(initialHours); - - _threemaReportTimer = new System.Windows.Forms.Timer(); - _threemaReportTimer.Interval = 60000; // Check every 1 minute - _threemaReportTimer.Tick += (s, ev) => - { - reportJob.IsEnabled = _serverSettings.ThreemaEnabled; // Keep updated - - if (DateTime.Now >= reportJob.NextRun) - { - if (reportJob.IsEnabled) - { - reportJob.ManualTriggerAction.Invoke(); - } - else - { - int currentHours = _serverSettings.ThreemaReportIntervalHours > 0 ? _serverSettings.ThreemaReportIntervalHours : 6; - reportJob.NextRun = DateTime.Now.AddHours(currentHours); - reportJob.LastRun = DateTime.Now; - reportJob.StatusText = "Paused / Disabled"; - } - } - }; - _threemaReportTimer.Start(); - - btn_savesettings.Click -= btn_savesettings_Click; - btn_savesettings.Click += btn_savesettings_Click; - - propertyGrid_slaves.PropertyValueChanged += (s, ev) => - { - if (propertyGrid_slaves.SelectedObject is AccountState acc) SaveAccount(acc); - }; - propertyGrid_masters.PropertyValueChanged += (s, ev) => - { - if (propertyGrid_masters.SelectedObject is TrackedTrader trd) SaveTrader(trd); - }; - - SetupTraderManagementUI(); - UpdateToggleButtons(); - SetupDashboard(); - SetupMetrics(); - - // Setup new ToolStrip Bindings - btn_dashboardRefresh.Click += (s, ev) => RefreshDashboardData(); - btn_opentrades_refresh.Click += (s, ev) => RefreshOpenTrades(); - btn_closedtrades_refresh.Click += (s, ev) => RefreshClosedTrades(); - - btn_debug_pollinglog.Checked = _tradingState.DebugPollingLog; - btn_debug_pollinglog.Click += (s, ev) => - { - _tradingState.DebugPollingLog = !_tradingState.DebugPollingLog; - btn_debug_pollinglog.Checked = _tradingState.DebugPollingLog; - }; - - btn_debugorderpayload.Checked = _tradingState.DebugOrderPayloadLog; - btn_debugorderpayload.Click += (s, ev) => - { - _tradingState.DebugOrderPayloadLog = !_tradingState.DebugOrderPayloadLog; - btn_debugorderpayload.Checked = _tradingState.DebugOrderPayloadLog; - }; - - btn_sixshares.Checked = _copyState.SixSharesMinimum; - btn_sixshares.BackColor = _copyState.SixSharesMinimum ? System.Drawing.Color.LightGreen : System.Drawing.Color.IndianRed; - btn_sixshares.Click += (s, ev) => - { - _copyState.SixSharesMinimum = !_copyState.SixSharesMinimum; - btn_sixshares.Checked = _copyState.SixSharesMinimum; - btn_sixshares.BackColor = _copyState.SixSharesMinimum ? System.Drawing.Color.LightGreen : System.Drawing.Color.IndianRed; - }; - - btn_debugMTHistory.Click += async (s, ev) => - { - var mtJob = _jobManager.Jobs.FirstOrDefault(j => j.JobName == "MasterTrader History"); - if (mtJob != null && mtJob.ManualTriggerAction != null) - { - _logger.Info("📡 Manueller MasterTrader Historien-Download gestartet..."); - await mtJob.ManualTriggerAction(); - } - else - { - _logger.Warning("MasterTrader History Job nicht gefunden."); - } - }; - - UpdateAccountDropdowns(); - - cb_opentrades_account.SelectedIndexChanged += (s, ev) => RefreshOpenTrades(); - cb_closedTradesAccounts.SelectedIndexChanged += (s, ev) => RefreshClosedTrades(); - cb_opentrades_laufzeit.SelectedIndexChanged += (s, ev) => RefreshOpenTrades(); - - // Setup new ExpiryColumn dynamically - var expCol = new DataGridViewTextBoxColumn - { - Name = "col_dgv_openTrades_ExpiryDate", - HeaderText = "Ablaufdatum", - DataPropertyName = "ExpiryDate" - }; - dgv_openTrades.Columns.Add(expCol); - - if (dgv_openTrades.Columns.Contains("col_dgv_openTrades_AmountUsd")) - dgv_openTrades.Columns["col_dgv_openTrades_AmountUsd"].HeaderText = "Buy In"; - - if (dgv_openTrades.Columns.Contains("col_dgv_openTrades_Side")) - dgv_openTrades.Columns["col_dgv_openTrades_Side"].Visible = false; - - try - { - var execAssembly = System.Reflection.Assembly.GetExecutingAssembly(); - var fileInfo = new System.IO.FileInfo(execAssembly.Location); - DateTime buildTime = fileInfo.LastWriteTimeUtc; - TimeZoneInfo berlinTz = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"); - DateTime meszTime = TimeZoneInfo.ConvertTimeFromUtc(buildTime, berlinTz); - toolStripStatusLabel_build.Text = $"Build: {meszTime:dd.MM.yyyy HH:mm} MESZ"; - } - catch { } - - // Timezone Formatters - dgv_closedTrades.CellFormatting += Dgv_CellFormatting_TimeZone; - dgv_openTrades.CellFormatting += Dgv_CellFormatting_TimeZone; - - // Closed Trades PnL row coloring - dgv_closedTrades.CellFormatting += Dgv_ClosedTrades_CellFormatting; - - // VPN Buttons - btn_vpnConnect.Click += async (s, ev) => await _vpnService.ConnectAsync(); - btn_vpndisconnect.Click += async (s, ev) => await _vpnService.DisconnectAsync(); - - // Default Inactive overriding snapshot (State-Hydration erfolgt im StartupHydrationService) - _tradingState.LiveTradingMode = TradingMode.Inactive; - _tradingState.DemoTradingMode = TradingMode.Inactive; - UpdateToggleButtons(); - - // Open Trades Snapshot system - LoadOpenTradesSnapshot(); - System.Windows.Forms.Timer snapshotTimer = new System.Windows.Forms.Timer { Interval = 30000 }; - snapshotTimer.Tick += (s, ev) => SaveOpenTradesSnapshot(); - snapshotTimer.Start(); - - // Auto-Connect VPN - if (_serverSettings.VpnEnabled) - { - _ = Task.Run(() => _vpnService.ConnectAsync()); - } - - // Expiry Dropdown Colors - cb_opentrades_laufzeit.ComboBox.DrawMode = DrawMode.OwnerDrawFixed; - cb_opentrades_laufzeit.ComboBox.DrawItem += Cb_opentrades_laufzeit_DrawItem; - } - - private void Frm_main_FormClosing(object? sender, FormClosingEventArgs e) - { - if (e.CloseReason == CloseReason.UserClosing) - { - var result = MessageBox.Show("Möchten Sie den PolyTrader wirklich beenden?\n\nAlle laufenden Automatisierungen werden gestoppt!", "Sicherheitsabfrage", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); - if (result == DialogResult.No) - { - e.Cancel = true; - } - } - } - - private void SetupMetrics() - { - _metricsTimer = new System.Windows.Forms.Timer(); - _metricsTimer.Interval = 2000; - _metricsTimer.Tick += (s, e) => UpdateStatusStrip(); - _metricsTimer.Start(); - - // LiteDB Backup every 30 minutes - _backupTimer = new System.Windows.Forms.Timer(); - _backupTimer.Interval = 30 * 60 * 1000; // 30 min - _backupTimer.Tick += (s, e) => BackupDatabase(); - _backupTimer.Start(); - BackupDatabase(); // Initial backup on startup - } - - private async void UpdateStatusStrip() - { - try - { - using var process = System.Diagnostics.Process.GetCurrentProcess(); - long memoryMb = process.PrivateMemorySize64 / (1024 * 1024); - - toolStripStatusLabel_cpuram.Text = $"RAM: {memoryMb} MB"; - - if (_vpnService.IsConnected) - { - toolStripStatusLabel_vpn.Text = "VPN: Verbunden"; - try { toolStripStatusLabel_vpn.Image = Properties.Resources.traffic_lights_green; } catch { } - try { btn_vpnConnect.Image = Properties.Resources.traffic_lights_green; } catch { } - toolStripStatusLabel_vpn.ForeColor = System.Drawing.Color.Green; - } - else - { - toolStripStatusLabel_vpn.Text = "VPN: Getrennt"; - try { toolStripStatusLabel_vpn.Image = Properties.Resources.traffic_lights_red; } catch { } - try { btn_vpnConnect.Image = Properties.Resources.traffic_lights_red; } catch { } - toolStripStatusLabel_vpn.ForeColor = System.Drawing.Color.Red; - } - - int ping = await _api.MeasurePingAsync(); - toolStripStatusLabel_ping.Text = ping >= 0 ? $"Ping: {ping} ms" : "Ping: Error"; - - var rates = _api.GetRateLimitsPerTenSeconds(); - var limits = PolymarketApiService.RateLimits; - toolStripStatusLabel_ratelimit.Text = $"Activity: {rates["Activity"]}/{limits["Activity"]} · Pos: {rates["Positions"]}/{limits["Positions"]} · Gamma: {rates["Gamma"]}/{limits["Gamma"]} · CLOB: {rates["CLOB"]}/{limits["CLOB"]} (/10s)"; - } - catch - { - // Ignore metrics errors - } - } - - private void SetupDashboard() - { - dgv_dashboard.DataSource = _dashboardList; - FormatDataGrid(dgv_dashboard); - - dgv_dashboard.CellFormatting += Dgv_dashboard_CellFormatting; - dgv_dashboard.SelectionChanged += Dgv_dashboard_SelectionChanged; - - _dashboardTimer = new System.Windows.Forms.Timer(); - _dashboardTimer.Interval = 300000; // 5 mins - _dashboardTimer.Tick += (s, e) => RefreshDashboardData(); - _dashboardTimer.Start(); - - RefreshDashboardData(); - } - private async void RefreshDashboardData() - { - if (InvokeRequired) - { - Invoke(new Action(RefreshDashboardData)); - return; - } - - var cutoff24h = DateTime.UtcNow.AddHours(-24); - var cutoff7d = DateTime.UtcNow.AddDays(-7); - - var sortedAccounts = _tradingState.Accounts.Values - .OrderBy(a => a.IsDemo) - .ThenBy(a => a.AccountId).ToList(); - - var allRecentTrades = new List(); - try - { - allRecentTrades = await Task.Run(() => - { - return _db.GetCollection("closed_trades") - .LiteFind(t => t.ClosedAt >= cutoff7d).ToList(); - }); - } - catch { } - - _dashboardList.Clear(); - - foreach (var acc in sortedAccounts) - { - if (!acc.IsDemo && !string.IsNullOrEmpty(acc.WalletAddress)) - { - decimal liveBal = await _clob.GetUsdcBalanceAsync(acc); - acc.UpdateBalance(liveBal); - } - - var trades24h = allRecentTrades.Where(t => t.AccountId == acc.AccountId && t.ClosedAt >= cutoff24h).ToList(); - var trades7d = allRecentTrades.Where(t => t.AccountId == acc.AccountId).ToList(); - - var pnl24 = trades24h.Sum(t => t.RealizedPnl); - var pnl7 = trades7d.Sum(t => t.RealizedPnl); - - var wins24 = trades24h.Count(t => t.RealizedPnl > 0); - var wins7 = trades7d.Count(t => t.RealizedPnl > 0); - - var activePositions = GetActivePositions(acc); - - var row = new DashboardRow - { - AccountId = acc.AccountId, - IsDemo = acc.IsDemo, - IsActive = acc.IsActive, - AccountName = acc.Name, - TotalBalance = Math.Round(acc.TotalBalance, 2), - AvailableBalance = Math.Round(acc.AvailableBalance, 2), - PositionBalance = Math.Round(activePositions.Sum(p => p.AmountUsd), 2), - OpenTradesCount = activePositions.Count, - ClosedTrades24h = trades24h.Count, - Pnl24h = Math.Round(pnl24, 2), - Winrate24h = trades24h.Count > 0 ? $"{(wins24 * 100.0m / trades24h.Count):F1}%" : "0%", - ClosedTrades7d = trades7d.Count, - Pnl7d = Math.Round(pnl7, 2), - Winrate7d = trades7d.Count > 0 ? $"{(wins7 * 100.0m / trades7d.Count):F1}%" : "0%" - }; - - _dashboardList.Add(row); - } - - Dgv_dashboard_SelectionChanged(this, EventArgs.Empty); - } - - private void Dgv_dashboard_CellFormatting(object? sender, DataGridViewCellFormattingEventArgs e) - { - if (e.RowIndex >= 0 && e.RowIndex < _dashboardList.Count) - { - var row = _dashboardList[e.RowIndex]; - e.CellStyle!.BackColor = row.IsDemo ? System.Drawing.Color.Aquamarine : System.Drawing.Color.Wheat; - - var colName = dgv_dashboard.Columns[e.ColumnIndex].Name; - if (colName == nameof(DashboardRow.Pnl24h) || colName == nameof(DashboardRow.Pnl7d)) - { - if (e.Value is decimal val) - { - e.CellStyle!.ForeColor = val < 0 ? System.Drawing.Color.Red : (val > 0 ? System.Drawing.Color.Green : System.Drawing.Color.Black); - } - } - } - } - - private void Dgv_ClosedTrades_CellFormatting(object? sender, DataGridViewCellFormattingEventArgs e) - { - if (e.RowIndex < 0) return; - var dgv = sender as DataGridView; - if (dgv != null && dgv.Rows[e.RowIndex].DataBoundItem is ClosedTrade ct) - { - decimal netPnl = ct.RealizedPnl - ct.TotalFees; - if (netPnl > 1m) - e.CellStyle!.BackColor = System.Drawing.Color.LightGreen; - else if (netPnl < -1m) - e.CellStyle!.BackColor = System.Drawing.Color.LightCoral; - // else stays default (white) - } - } - - private void Dgv_dashboard_SelectionChanged(object? sender, EventArgs e) - { - if (dgv_dashboard_detaillaufzeit != null) dgv_dashboard_detaillaufzeit.Rows.Clear(); - if (dgv_permaster != null) dgv_permaster.Rows.Clear(); - - if (dgv_dashboard.CurrentRow?.DataBoundItem is DashboardRow row) - { - if (_tradingState.Accounts.TryGetValue(row.AccountId, out var acc)) - { - var now = DateTime.UtcNow; - decimal under6 = 0, under24 = 0, under72 = 0, over72 = 0; - - var activePositions = GetActivePositions(acc); - foreach (var pos in activePositions) - { - if (pos.ExpiryDate == null) { over72 += pos.AmountUsd; continue; } - var diff = pos.ExpiryDate.Value - now; - if (diff.TotalHours < 6) under6 += pos.AmountUsd; - else if (diff.TotalHours < 24) under24 += pos.AmountUsd; - else if (diff.TotalHours < 72) under72 += pos.AmountUsd; - else over72 += pos.AmountUsd; - } - - if (dgv_dashboard_detaillaufzeit != null) - { - decimal SafeMaxUsd(decimal pct, decimal tot) => tot * (pct / 100m); - decimal SafeUtil(decimal curr, decimal maxUsd) => maxUsd > 0 ? (curr / maxUsd) * 100m : 0m; - - decimal max6 = SafeMaxUsd(_copyState.GetAccountSettings(acc.AccountId).perMaxTime6h, acc.TotalBalance); - dgv_dashboard_detaillaufzeit.Rows.Add( - "< 6h", - $"{_copyState.GetAccountSettings(acc.AccountId).perMaxTime6h:F2}%", - $"${max6:F2}", - $"{SafeUtil(under6, max6):F2}%", - $"${under6:F2}"); - - decimal max24 = SafeMaxUsd(_copyState.GetAccountSettings(acc.AccountId).perMaxTime24h, acc.TotalBalance); - dgv_dashboard_detaillaufzeit.Rows.Add( - "< 24h", - $"{_copyState.GetAccountSettings(acc.AccountId).perMaxTime24h:F2}%", - $"${max24:F2}", - $"{SafeUtil(under24, max24):F2}%", - $"${under24:F2}"); - - decimal max72 = SafeMaxUsd(_copyState.GetAccountSettings(acc.AccountId).perMaxTime72h, acc.TotalBalance); - dgv_dashboard_detaillaufzeit.Rows.Add( - "< 72h", - $"{_copyState.GetAccountSettings(acc.AccountId).perMaxTime72h:F2}%", - $"${max72:F2}", - $"{SafeUtil(under72, max72):F2}%", - $"${under72:F2}"); - - decimal maxOver72 = SafeMaxUsd(_copyState.GetAccountSettings(acc.AccountId).perMaxTimeNone, acc.TotalBalance); - dgv_dashboard_detaillaufzeit.Rows.Add( - "> 72h", - $"{_copyState.GetAccountSettings(acc.AccountId).perMaxTimeNone:F2}%", - $"${maxOver72:F2}", - $"{SafeUtil(over72, maxOver72):F2}%", - $"${over72:F2}"); - } - - if (dgv_permaster != null) - { - var masterPositions = activePositions - .GroupBy(p => p.SourceTraderName) - .Select(g => new - { - Name = string.IsNullOrEmpty(g.Key) ? "Unbekannt" : g.Key, - TotalUsd = g.Sum(p => p.AmountUsd) - }) - .Where(x => x.TotalUsd > 0) - .OrderByDescending(x => x.TotalUsd); - - foreach (var mp in masterPositions) - { - decimal pct = acc.TotalBalance > 0 ? (mp.TotalUsd / acc.TotalBalance) * 100m : 0m; - dgv_permaster.Rows.Add( - mp.Name, - $"{Math.Round(pct, 2):F2}%", - $"${Math.Round(mp.TotalUsd, 2):F2}" - ); - } - } - - UpdateTraderAnalyticsUI(acc.AccountId); - } - } - } - - private void UpdateTraderAnalyticsUI(int accountId) - { - if (_copyState.TraderAnalyticsCache.TryGetValue(accountId, out var results) && results != null) - { - // Top Traders (Positive or 0 PnL, descending) - var top = results.Where(x => x.Pnl30T >= 0).OrderByDescending(x => x.Pnl30T).ToList(); - dgv_dash_toptraders.DataSource = top; - - // Flop Traders (Negative PnL, ascending) - var flop = results.Where(x => x.Pnl30T < 0).OrderBy(x => x.Pnl30T).ToList(); - dgv_dash_floptraders.DataSource = flop; - } - else - { - dgv_dash_toptraders.DataSource = null; - dgv_dash_floptraders.DataSource = null; - } - } - - private void UpdateAccountDropdowns() - { - var accounts = _tradingState.Accounts.Values.OrderBy(a => a.IsDemo).ThenBy(a => a.Name).ToList(); - - cb_opentrades_account.Items.Clear(); - cb_opentrades_account.Items.Add("Alle"); - foreach (var acc in accounts) cb_opentrades_account.Items.Add(acc.Name); - if (cb_opentrades_account.Items.Count > 0) cb_opentrades_account.SelectedIndex = 0; - - if (cb_opentrades_laufzeit.Items.Count > 0 && cb_opentrades_laufzeit.SelectedIndex < 0) - cb_opentrades_laufzeit.SelectedIndex = 0; - - cb_closedTradesAccounts.Items.Clear(); - cb_closedTradesAccounts.Items.Add("Alle"); - foreach (var acc in accounts) cb_closedTradesAccounts.Items.Add(acc.Name); - if (cb_closedTradesAccounts.Items.Count > 0) cb_closedTradesAccounts.SelectedIndex = 0; - } - - private void RefreshOpenTrades() - { - var list = new BindingList(); - string filter = cb_opentrades_account.SelectedItem?.ToString() ?? "Alle"; - string runtimeFilter = cb_opentrades_laufzeit.SelectedItem?.ToString() ?? "Alle"; - - foreach (var acc in _tradingState.Accounts.Values) - { - if (filter != "Alle" && acc.Name != filter) continue; - - foreach (var pos in acc.OpenPositions.Values) - { - if (runtimeFilter != "Alle") - { - if (!pos.ExpiryDate.HasValue) - { - if (runtimeFilter != "Über 72h" && runtimeFilter != "Über 72h") continue; - } - else - { - var rest = pos.ExpiryDate.Value - DateTime.UtcNow; - if (runtimeFilter == "Unter 6h" && rest.TotalHours >= 6) continue; - if (runtimeFilter == "Unter 24h" && rest.TotalHours >= 24) continue; - if (runtimeFilter == "Unter 72h" && rest.TotalHours >= 72) continue; - if ((runtimeFilter == "Über 72h" || runtimeFilter == "Über 72h") && rest.TotalHours < 72) continue; - } - } - - list.Add(new OpenTradeRow - { - AccountName = acc.Name, - TokenId = pos.TokenId, - SourceTraderName = pos.SourceTraderName, - SourceTraderAddress = pos.SourceTraderAddress, - MarketQuestion = string.IsNullOrEmpty(pos.MarketQuestion) ? pos.ConditionId : pos.MarketQuestion, - MarketSlug = pos.MarketSlug, - Outcome = pos.Outcome, - Side = pos.Side, - EntryPrice = pos.EntryPrice, - CurrentPrice = pos.CurrentPrice, - Size = pos.Size, - AmountUsd = pos.AmountUsd, - CurrentValueUsd = pos.CurrentValueUsd, - ExpiryDate = pos.ExpiryDate - }); - } - } - - var bs = new BindingSource(); - bs.DataSource = list; - dgv_openTrades.DataSource = bs; - FormatTradeGrid(dgv_openTrades); - } - - private async void RefreshClosedTrades() - { - string filter = cb_closedTradesAccounts.SelectedItem?.ToString() ?? "Alle"; - - DateTime selectedDate = _dtpClosedTrades?.Value.Date ?? DateTime.Today; - selectedDate = DateTime.SpecifyKind(selectedDate, DateTimeKind.Unspecified); - - var berlinTz = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"); - var utcStart = TimeZoneInfo.ConvertTimeToUtc(selectedDate, berlinTz); - var utcEnd = TimeZoneInfo.ConvertTimeToUtc(selectedDate.AddDays(1), berlinTz); - - var targetAcc = _tradingState.Accounts.Values.FirstOrDefault(a => a.Name == filter); - - var trades = await Task.Run(() => - { - var col = _db.GetCollection("closed_trades"); - if (filter == "Alle") - { - return col.LiteFind(x => x.ClosedAt >= utcStart && x.ClosedAt < utcEnd) - .OrderByDescending(x => x.ClosedAt) - .Take(100).ToList(); - } - else - { - if (targetAcc != null) - { - return col.LiteFind(x => x.AccountId == targetAcc.AccountId && x.ClosedAt >= utcStart && x.ClosedAt < utcEnd) - .OrderByDescending(x => x.ClosedAt).Take(100).ToList(); - } - return new List(); - } - }); - - var rowTrades = trades.Select(t => - { - var r = new ClosedTradeRow - { - TradeId = t.TradeId, - AccountId = t.AccountId, - SourceTraderId = t.SourceTraderId, - IsDemo = t.IsDemo, - TokenId = t.TokenId, - MarketSlug = t.MarketSlug, - MarketQuestion = t.MarketQuestion, - Outcome = t.Outcome, - Side = t.Side, - EntryPrice = t.EntryPrice, - ExitPrice = t.ExitPrice, - Size = t.Size, - RealizedPnl = t.RealizedPnl, - PnlPercent = t.PnlPercent, - TotalFees = t.TotalFees, - OpenedAt = t.OpenedAt, - ClosedAt = t.ClosedAt, - ExitReason = t.ExitReason - }; - r.AccountName = _tradingState.Accounts.TryGetValue(t.AccountId, out var a) ? a.Name : "Unknown"; - if (_copyState.Traders.TryGetValue(t.SourceTraderId, out var mt)) - { - r.SourceTraderName = mt.DisplayName; - r.SourceTraderAddress = mt.WalletAddress; - } - else - { - r.SourceTraderName = t.SourceTraderId > 0 ? $"Trader #{t.SourceTraderId}" : "Unbekannt"; - } - return r; - }).ToList(); - - var bs = new BindingSource(); - bs.DataSource = new BindingList(rowTrades); - dgv_closedTrades.DataSource = bs; - FormatTradeGrid(dgv_closedTrades); - } - - // Hydration des TradingState erfolgt jetzt zentral im StartupHydrationService - // (läuft vor den Trading-Services). Die frühere LoadDatabaseAndState()-Methode - // wurde entfernt, um doppelte/überschreibende Hydration zu vermeiden. - - private void SetupTraderManagementUI() - { - dgv_SlaveTraders.DataSource = _bsSlaves; - dgv_SlaveTraders.SelectionChanged += (s, ev) => - { - propertyGrid_slaves.SelectedObject = _bsSlaves.Current; - }; - - dgv_masterTraders.DataSource = _bsMasters; - dgv_masterTraders.SelectionChanged += (s, ev) => - { - propertyGrid_masters.SelectedObject = _bsMasters.Current; - UpdateAssignedAccountsList(); - }; - - // Load initial data - RefreshSlaveGrid(); - RefreshMasterGrid(); - - // Format DGV Columns (Hide complex/unwanted stuff) - FormatDataGrid(dgv_SlaveTraders); - FormatDataGrid(dgv_masterTraders); - } - - private void SaveAccount(AccountState acc) - { - _db.GetCollection("accounts").Upsert(acc); - } - - private void SaveTrader(TrackedTrader trd) - { - _db.GetCollection("trackers").Upsert(trd); - } - - private void btn_Slavetraders_add_Click(object sender, EventArgs e) - { - int newId = _tradingState.Accounts.Count > 0 ? _tradingState.Accounts.Keys.Max() + 1 : 1; - var newAcc = new AccountState { AccountId = newId, Name = "Neuer Slave Account" }; - _tradingState.Accounts[newAcc.AccountId] = newAcc; - SaveAccount(newAcc); - RefreshSlaveGrid(); - _bsSlaves.Position = _bsSlaves.Count - 1; - } - - private void btn_Slavetraders_del_Click(object? sender, EventArgs e) - { - if (_bsSlaves.Current is AccountState acc) - { - var confirm = MessageBox.Show($"Möchten Sie den Slave-Account '{acc.Name}' wirklich löschen?", "Löschen bestätigen", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); - if (confirm == DialogResult.Yes) - { - _tradingState.Accounts.TryRemove(acc.AccountId, out _); - _db.GetCollection("accounts").DeleteMany(x => x.AccountId == acc.AccountId); - RefreshSlaveGrid(); - UpdateAccountDropdowns(); - } - } - } - - private void btn_Mastertraders_add_Click(object? sender, EventArgs e) - { - int newId = _copyState.Traders.Count > 0 ? _copyState.Traders.Keys.Max() + 1 : 1; - var newTrd = new TrackedTrader { Id = newId, DisplayName = "Neuer Master", WalletAddress = "0x..." }; - _copyState.Traders[newTrd.Id] = newTrd; - SaveTrader(newTrd); - RefreshMasterGrid(); - _bsMasters.Position = _bsMasters.Count - 1; - } - - private void btn_Mastertraders_del_Click(object? sender, EventArgs e) - { - if (_bsMasters.Current is TrackedTrader trd) - { - var confirm = MessageBox.Show($"Möchten Sie den Master-Trader '{trd.DisplayName}' wirklich löschen?", "Löschen bestätigen", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); - if (confirm == DialogResult.Yes) - { - _copyState.Traders.TryRemove(trd.Id, out _); - _db.GetCollection("trackers").DeleteMany(x => x.Id == trd.Id); - RefreshMasterGrid(); - } - } - } - - private void UpdateAssignedAccountsList() - { - clb_assignedAccounts.ItemCheck -= clb_assignedAccounts_ItemCheck; - clb_assignedAccounts.Items.Clear(); - - if (_bsMasters.Current is TrackedTrader trd) - { - foreach (var acc in _tradingState.Accounts.Values) - { - bool isChecked = trd.AssignedAccountIds.Contains(acc.AccountId); - clb_assignedAccounts.Items.Add(new AccountWrapper(acc), isChecked); - } - } - clb_assignedAccounts.ItemCheck += clb_assignedAccounts_ItemCheck; - } - - private void clb_assignedAccounts_ItemCheck(object? sender, ItemCheckEventArgs e) - { - if (_bsMasters.Current is TrackedTrader trd) - { - if (clb_assignedAccounts.Items[e.Index] is AccountWrapper wrapper) - { - if (e.NewValue == CheckState.Checked) - trd.AssignedAccountIds.Add(wrapper.Account.AccountId); - else - trd.AssignedAccountIds.Remove(wrapper.Account.AccountId); - - SaveTrader(trd); - } - } - } - - private void btn_deposit_Click(object? sender, EventArgs e) - { - if (_bsSlaves.Current is AccountState acc && acc.IsDemo) - { - if (decimal.TryParse(toolStripTextBox_amount.Text, out decimal amount)) - { - acc.UpdateBalance(acc.AvailableBalance + amount); - SaveAccount(acc); - _logger.Info($"[{acc.Name}] {amount} USD eingezahlt. Neuer verfügbarer Saldo: {acc.AvailableBalance}"); - RefreshSlaveGrid(); - toolStripTextBox_amount.Text = ""; - } - else - { - MessageBox.Show("Bitte gib eine gültige Zahl im Buchführungs-Feld ein.", "Warnung", MessageBoxButtons.OK, MessageBoxIcon.Warning); - } - } - else - { - MessageBox.Show("Ein- / Auszahlungen sind nur für Demo-Konten erlaubt!"); - } - } - - private void btn_withdraw_Click(object? sender, EventArgs e) - { - if (_bsSlaves.Current is AccountState acc && acc.IsDemo) - { - if (decimal.TryParse(toolStripTextBox_amount.Text, out decimal amount)) - { - acc.UpdateBalance(acc.AvailableBalance - amount); - SaveAccount(acc); - _logger.Info($"[{acc.Name}] {amount} USD ausgezahlt. Neuer verfügbarer Saldo: {acc.AvailableBalance}"); - RefreshSlaveGrid(); - toolStripTextBox_amount.Text = ""; - } - else - { - MessageBox.Show("Bitte gib eine gültige Zahl im Buchführungs-Feld ein.", "Warnung", MessageBoxButtons.OK, MessageBoxIcon.Warning); - } - } - else - { - MessageBox.Show("Ein- / Auszahlungen sind nur für Demo-Konten erlaubt!"); - } - } - - private void btn_demoreset_Click(object? sender, EventArgs e) - { - if (_bsSlaves.Current is AccountState acc) - { - if (!acc.IsDemo) - { - MessageBox.Show("Diese Funktion ist nur für Demo-Accounts verfügbar.", "Hinweis", MessageBoxButtons.OK, MessageBoxIcon.Information); - return; - } - - var confirmResult = MessageBox.Show($"Möchten Sie den Demo-Account '{acc.Name}' wirklich komplett zurücksetzen?\nAlle Positionen und generierten Trades dieses Accounts werden unwiderruflich gelöscht. Das Guthaben wird auf $1000 zurückgesetzt.", - "Demo Account Reset", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); - - if (confirmResult == DialogResult.Yes) - { - var previousMode = _tradingState.DemoTradingMode; - _tradingState.DemoTradingMode = TradingMode.Inactive; - UpdateToggleButtons(); - - try - { - acc.OpenPositions.Clear(); - acc.TotalBalance = 1000m; - acc.AvailableBalance = 1000m; - - _db.DropCollection($"demo_positions_{acc.AccountId}"); - _db.GetCollection("closed_trades").DeleteMany(t => t.AccountId == acc.AccountId); - - SaveAccount(acc); - - _logger.Warning($"🔄 Demo-Account '{acc.Name}' wurde komplett zurückgesetzt!"); - - RefreshSlaveGrid(); - RefreshDashboardData(); - RefreshOpenTrades(); - RefreshClosedTrades(); - } - catch (Exception ex) - { - _logger.Error($"Fehler beim Zurücksetzen des Kontos: {ex.Message}"); - MessageBox.Show($"Fehler: {ex.Message}", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - finally - { - MessageBox.Show($"Rücksetzung von {acc.Name} erfolgreich.", "Erfolgreich", MessageBoxButtons.OK, MessageBoxIcon.Information); - _tradingState.DemoTradingMode = previousMode; - UpdateToggleButtons(); - } - } - } - } - - - private class AccountWrapper - { - public AccountState Account { get; } - public AccountWrapper(AccountState acc) { Account = acc; } - public override string ToString() => $"[{Account.AccountId}] {Account.Name} ({(Account.IsDemo ? "DEMO" : "LIVE")})"; - } - - private void FormatDataGrid(DataGridView dgv) - { - dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill; - dgv.RowHeadersVisible = false; - dgv.SelectionMode = DataGridViewSelectionMode.FullRowSelect; - dgv.MultiSelect = false; - } - - private void RefreshSlaveGrid() - { - var currentPos = _bsSlaves.Position; - _bsSlaves.DataSource = _tradingState.Accounts.Values.ToList(); - _bsSlaves.ResetBindings(false); - if (currentPos >= 0 && currentPos < _bsSlaves.Count) _bsSlaves.Position = currentPos; - } - - private void RefreshMasterGrid() - { - var currentPos = _bsMasters.Position; - _bsMasters.DataSource = _copyState.Traders.Values.ToList(); - _bsMasters.ResetBindings(false); - if (currentPos >= 0 && currentPos < _bsMasters.Count) _bsMasters.Position = currentPos; - } - - private void Dgv_CellFormatting_TimeZone(object? sender, DataGridViewCellFormattingEventArgs e) - { - if (e.Value is DateTime dt) - { - try - { - TimeZoneInfo berlinTz = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time"); - if (dt.Kind == DateTimeKind.Utc) - { - e.Value = TimeZoneInfo.ConvertTimeFromUtc(dt, berlinTz).ToString("dd.MM.yyyy HH:mm:ss"); - e.FormattingApplied = true; - } - else if (dt.Kind == DateTimeKind.Unspecified) - { - e.Value = TimeZoneInfo.ConvertTimeFromUtc(DateTime.SpecifyKind(dt, DateTimeKind.Utc), berlinTz).ToString("dd.MM.yyyy HH:mm:ss"); - e.FormattingApplied = true; - } - } - catch { } - } - else if (e.Value is decimal decVal) - { - e.Value = decVal.ToString("N2"); - e.FormattingApplied = true; - } - - if (sender is DataGridView dgv && dgv == dgv_openTrades && e.RowIndex >= 0) - { - if (dgv.Rows[e.RowIndex].DataBoundItem is OpenTradeRow rowData) - { - if (rowData.ExpiryDate.HasValue) - { - var rest = rowData.ExpiryDate.Value - DateTime.UtcNow; - if (rest.TotalHours < 6) e.CellStyle!.BackColor = System.Drawing.Color.LightCoral; - else if (rest.TotalHours < 24) e.CellStyle!.BackColor = System.Drawing.Color.LightSalmon; - else if (rest.TotalHours < 72) e.CellStyle!.BackColor = System.Drawing.Color.LightYellow; - else e.CellStyle!.BackColor = System.Drawing.Color.LightGreen; - } - else - { - e.CellStyle!.BackColor = System.Drawing.Color.LightGreen; - } - } - } - } - - private void btn_savesettings_Click(object? sender, EventArgs e) - { - try - { - _serverSettings.Save(_settingsFilePath); - _threemaService.ReloadSettings(); - _vpnService.ReloadSettings(); - _logger.Info("Server-Einstellungen erfolgreich gespeichert und Services neu geladen."); - - // Refresh Grids in case property edits need persistence (Mock save here) - RefreshSlaveGrid(); - RefreshMasterGrid(); - - MessageBox.Show("Server-Einstellungen & Trader gespeichert.", "Erfolg", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - catch (Exception ex) - { - MessageBox.Show($"Fehler beim Speichern: {ex.Message}", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - - private void btn_livetradingactive_Click(object sender, EventArgs e) - { - // Cycle LiveTradingMode: Inactive -> SellOnly -> Active - if (_tradingState.LiveTradingMode == TradingMode.Inactive) _tradingState.LiveTradingMode = TradingMode.SellOnly; - else if (_tradingState.LiveTradingMode == TradingMode.SellOnly) _tradingState.LiveTradingMode = TradingMode.Active; - else _tradingState.LiveTradingMode = TradingMode.Inactive; - - UpdateToggleButtons(); - } - - private void btn_demotradingactive_Click(object sender, EventArgs e) - { - // Cycle DemoTradingMode: Inactive -> SellOnly -> Active - if (_tradingState.DemoTradingMode == TradingMode.Inactive) _tradingState.DemoTradingMode = TradingMode.SellOnly; - else if (_tradingState.DemoTradingMode == TradingMode.SellOnly) _tradingState.DemoTradingMode = TradingMode.Active; - else _tradingState.DemoTradingMode = TradingMode.Inactive; - - UpdateToggleButtons(); - } - - private void UpdateToggleButtons() - { - // Update Demo Toggle - if (_tradingState.DemoTradingMode == TradingMode.Active) - { - btn_demotradingactive.Text = "Demotrading (AKTIV)"; - btn_demotradingactive.BackColor = System.Drawing.Color.LightGreen; - } - else if (_tradingState.DemoTradingMode == TradingMode.SellOnly) - { - btn_demotradingactive.Text = "Demotrading (SELL-ONLY)"; - btn_demotradingactive.BackColor = System.Drawing.Color.Orange; - } - else - { - btn_demotradingactive.Text = "Demotrading (DEAKTIVIERT)"; - btn_demotradingactive.BackColor = System.Drawing.Color.IndianRed; - } - - // Update Live Toggle - if (_tradingState.LiveTradingMode == TradingMode.Active) - { - btn_livetradingactive.Text = "LiveTrading (AKTIV)"; - btn_livetradingactive.BackColor = System.Drawing.Color.LightGreen; - } - else if (_tradingState.LiveTradingMode == TradingMode.SellOnly) - { - btn_livetradingactive.Text = "LiveTrading (SELL-ONLY)"; - btn_livetradingactive.BackColor = System.Drawing.Color.Orange; - } - else - { - btn_livetradingactive.Text = "LiveTrading (DEAKTIVIERT)"; - btn_livetradingactive.BackColor = System.Drawing.Color.IndianRed; - } - } - - private void groupBox1_Enter(object sender, EventArgs e) - { - - } - - private void DgvOpenTrades_CellContentClick(object? sender, DataGridViewCellEventArgs e) - { - if (e.RowIndex < 0 || e.ColumnIndex < 0) return; - var dgv = sender as DataGridView; - if (dgv == null) return; - var colName = dgv.Columns[e.ColumnIndex].Name; - var row = dgv.Rows[e.RowIndex]; - - if (colName == "col_dgv_openTrades_CloseBtn") - { - if (row.DataBoundItem is OpenTradeRow otr) - { - _ = CloseTradeManuallyAsync(otr); - } - return; - } - - // Delegate to common link handler - DgvTrades_CellContentClick(sender, e); - } - - private async Task CloseTradeManuallyAsync(OpenTradeRow tradeRow) - { - // Find the account - var account = _tradingState.Accounts.Values.FirstOrDefault(a => a.Name == tradeRow.AccountName); - if (account == null) - { - MessageBox.Show($"Account '{tradeRow.AccountName}' nicht gefunden.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - - // Confirmation dialog - var confirm = MessageBox.Show( - $"Möchten Sie diesen Trade wirklich manuell schließen?\n\n" + - $"Markt: {tradeRow.MarketQuestion}\n" + - $"Konto: {tradeRow.AccountName}\n" + - $"Outcome: {tradeRow.Outcome}\n" + - $"Einsatz: ${tradeRow.AmountUsd:F2}\n" + - $"Shares: {tradeRow.Size:F2} @ ${tradeRow.EntryPrice:F3}", - "Trade schließen", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); - - if (confirm != DialogResult.Yes) return; - - if (account.IsDemo) - { - // Fetch current orderbook price - _logger.Info($"📊 Hole aktuellen Orderbuch-Preis für Token {tradeRow.TokenId}..."); - var exitPrice = await _api.GetOrderBookPriceAsync(tradeRow.TokenId, "SELL"); - - if (exitPrice == null || exitPrice <= 0) - { - var fallbackConfirm = MessageBox.Show( - "Kein Orderbuch-Preis verfügbar. Soll der Trade mit Exit-Preis $0.00 (Totalverlust) geschlossen werden?", - "Kein Preis", MessageBoxButtons.YesNo, MessageBoxIcon.Question); - if (fallbackConfirm != DialogResult.Yes) return; - exitPrice = 0m; - } - - // Remove from open positions - if (account.OpenPositions.TryRemove(tradeRow.TokenId, out var openPos)) - { - // Delete from LiteDB demo collection - _db.GetCollection($"demo_positions_{account.AccountId}").Delete(tradeRow.TokenId); - - decimal exitUsd = openPos.Size * exitPrice.Value; - decimal realizedPnl = exitUsd - openPos.AmountUsd; - - _tradingState.GlobalPnl += realizedPnl; - account.UpdateBalance(account.AvailableBalance + exitUsd); - SaveAccount(account); - - var ct = new ClosedTrade - { - TradeId = _copyState.GetNextTradeId(), - AccountId = account.AccountId, - IsDemo = true, - MarketSlug = openPos.MarketSlug, - MarketQuestion = openPos.MarketQuestion, - TokenId = openPos.TokenId, - Outcome = openPos.Outcome, - Side = "SELL", - EntryPrice = openPos.EntryPrice, - ExitPrice = exitPrice.Value, - Size = openPos.Size, - RealizedPnl = realizedPnl, - PnlPercent = openPos.AmountUsd > 0 ? (realizedPnl / openPos.AmountUsd * 100m) : 0m, - OpenedAt = openPos.OpenedAt, - ClosedAt = DateTime.UtcNow, - ExitReason = "Manuell geschlossen" - }; - - _db.GetCollection("closed_trades").Insert(ct); - - _logger.Trade($"✅ [MANUELL GESCHLOSSEN]\n" + - $" Konto: {account.Name}\n" + - $" Markt: {openPos.MarketQuestion}\n" + - $" Exit: {openPos.Size:F2} Shares @ ${exitPrice.Value:F3}\n" + - $" PnL: ${realizedPnl:F2} ({(realizedPnl >= 0 ? "+" : "")}{(openPos.AmountUsd > 0 ? (realizedPnl / openPos.AmountUsd * 100m) : 0m):F1}%)"); - - MessageBox.Show( - $"Trade erfolgreich geschlossen!\n\n" + - $"Exit-Preis: ${exitPrice.Value:F3}\n" + - $"Realisierter PnL: ${realizedPnl:F2}", - "Erfolg", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - else - { - MessageBox.Show("Position konnte nicht gefunden werden.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - else - { - // Live mode: place FAK SELL via CLOB - _logger.Info($"📊 Hole aktuellen Orderbuch-Preis für Token {tradeRow.TokenId}..."); - var exitPrice = await _api.GetOrderBookPriceAsync(tradeRow.TokenId, "SELL"); - - if (exitPrice == null || exitPrice <= 0) - { - MessageBox.Show("Kein Orderbuch-Preis verfügbar. Live-Verkauf abgebrochen, um Totalverlust zu vermeiden.", "Schutz", MessageBoxButtons.OK, MessageBoxIcon.Warning); - return; - } - - // Polymarket Rejects Orders with Amount = 0. - // We use an aggressive limit (e.g. 10% slippage) clamped at 1 cent. - decimal sellLimit = Math.Max(0.01m, exitPrice.Value * 0.90m); - - var liveConfirm = MessageBox.Show( - $"Live-Trade manuell schließen?\n\n" + - $"Orderbuch-Bid: ${(exitPrice.Value > 0 ? exitPrice.Value.ToString("F3") : "N/A")}\n\n" + - $"Achtung: Dies sendet eine MARKET-Order (Mit 10% Slippage Toleranz) um sofortige Ausführung zu erzwingen. " + - $"Bei geringer Liquidität kann es zu starker Slippage kommen.", - "Live-MARKET-Verkauf bestätigen", MessageBoxButtons.YesNo, MessageBoxIcon.Warning); - - if (liveConfirm != DialogResult.Yes) return; - - if (account.OpenPositions.TryRemove(tradeRow.TokenId, out var liveOpenPos)) - { - decimal takerUsdMinimum = liveOpenPos.Size * sellLimit; - // Absolute hard floor for Polymarket USDC amounts is 0.01 - if (takerUsdMinimum < 0.01m) takerUsdMinimum = 0.01m; - - bool isNegRisk = false; - try - { - var mkts = _db.GetCollection("markets"); - var md = mkts.LiteFind(x => x.ClobTokenIds != null && x.ClobTokenIds.Contains(tradeRow.TokenId)).FirstOrDefault(); - if (md != null) isNegRisk = md.NegRisk; - } - catch { } - - _logger.Info($"🌐 [MANUELLER VERKAUF] Sende MARKET SELL an Polymarket CTF-Router...\n" + - $" Account: {account.Name}\n" + - $" Typ: MARKET (Ohne Limit)"); - - var result = await _clob.PlaceOrderAsync(account, tradeRow.TokenId, "SELL", takerUsdMinimum, sellLimit, "MARKET", false, isNegRisk); - - if (result == "OK") - { - decimal exitUsd = liveOpenPos.Size * exitPrice.Value; - decimal realizedPnl = exitUsd - liveOpenPos.AmountUsd; - - _tradingState.GlobalPnl += realizedPnl; - account.UpdateBalance(account.AvailableBalance + exitUsd); - - var ct = new ClosedTrade - { - TradeId = _copyState.GetNextTradeId(), - AccountId = account.AccountId, - IsDemo = false, - MarketSlug = liveOpenPos.MarketSlug, - MarketQuestion = liveOpenPos.MarketQuestion, - TokenId = liveOpenPos.TokenId, - Outcome = liveOpenPos.Outcome, - Side = "SELL", - EntryPrice = liveOpenPos.EntryPrice, - ExitPrice = exitPrice.Value, - Size = liveOpenPos.Size, - RealizedPnl = realizedPnl, - PnlPercent = liveOpenPos.AmountUsd > 0 ? (realizedPnl / liveOpenPos.AmountUsd * 100m) : 0m, - OpenedAt = liveOpenPos.OpenedAt, - ClosedAt = DateTime.UtcNow, - ExitReason = "Manuell geschlossen (Live)" - }; - - _db.GetCollection("closed_trades").Insert(ct); - _logger.Trade($"✅ [LIVE MANUELL GESCHLOSSEN] - {account.Name} - Exakte Beträge im nächsten API Sync."); - - MessageBox.Show("Live SELL Order wurde gesendet.\nExakte Beträge werden beim nächsten API Sync aktualisiert.", - "Erfolg", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - else - { - // Re-add position if sell failed - account.OpenPositions.TryAdd(tradeRow.TokenId, liveOpenPos); - MessageBox.Show($"Fehler beim Senden der SELL Order:\n{result}", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - else - { - MessageBox.Show("Position konnte nicht gefunden werden.", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } // Closes Live Mode else block - - RefreshOpenTrades(); - } - - private void DgvJobs_CellContentClick(object? sender, DataGridViewCellEventArgs e) - { - if (e.RowIndex < 0 || e.ColumnIndex < 0) return; - var dgv = (DataGridView)sender!; - var colName = dgv.Columns[e.ColumnIndex].Name; - - if (dgv.Rows[e.RowIndex].DataBoundItem is JobStatusRow job) - { - if (colName == "col_dgv_jobs_Run") - { - if (job.ManualTriggerAction != null) - { - _ = Task.Run(() => job.ManualTriggerAction.Invoke()); - } - } - else if (colName == "col_dgv_jobs_Enabled") - { - // Toggle because clicking checkbox doesn't instantly commit to binding source - dgv.EndEdit(); - } - } - } - - private async void DgvTrades_CellContentClick(object? sender, DataGridViewCellEventArgs e) - { - if (e.RowIndex < 0 || e.ColumnIndex < 0) return; - var dgv = sender as DataGridView; - if (dgv == null) return; - var colName = dgv.Columns[e.ColumnIndex].Name; - var row = dgv.Rows[e.RowIndex]; - - if (colName.Contains("MarketQuestion") || colName.Contains("MarketSlug")) - { - string slug = ""; - string tokenId = ""; - if (dgv == dgv_openTrades && row.DataBoundItem is OpenTradeRow otr) - { - slug = otr.MarketSlug; - tokenId = otr.TokenId; - } - else if (dgv == dgv_closedTrades && row.DataBoundItem is ClosedTrade ct) - { - slug = ct.MarketSlug; - tokenId = ct.TokenId; - } - - // If slug is missing or looks like a ConditionId (0x...), resolve via our markets dictionary - if (string.IsNullOrEmpty(slug) || slug.StartsWith("0x") || slug.Length > 200) - { - try - { - var mkts = _db.GetCollection("markets"); - var md = mkts.LiteFind(x => x.ClobTokenIds != null && x.ClobTokenIds.Contains(tokenId)).FirstOrDefault(); - if (md != null && !string.IsNullOrEmpty(md.Slug)) - { - slug = md.Slug; - } - } - catch { } // Ignore DB lookup errors for UI stability - } - - string eventSlug = await _api.ResolveEventSlugAsync(slug, tokenId); - if (!string.IsNullOrEmpty(eventSlug) && !eventSlug.StartsWith("0x")) - { - System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo($"https://polymarket.com/event/{eventSlug}") { UseShellExecute = true }); - } - } - else if (colName.Contains("SourceTraderName") || colName == "col_name" || colName == "dataGridViewLinkColumn1") - { - string address = ""; - if (dgv == dgv_openTrades && row.DataBoundItem is OpenTradeRow otr) address = otr.SourceTraderAddress; - else if (dgv == dgv_closedTrades && row.DataBoundItem is ClosedTradeRow ctr) address = ctr.SourceTraderAddress; - else if ((dgv == dgv_dash_toptraders || dgv == dgv_dash_floptraders) && row.DataBoundItem is TraderAnalyticsResult tar) address = tar.SourceTraderAddress; - - if (!string.IsNullOrEmpty(address)) - { - // If it's a raw wallet address (0x...) route properly - if (address.StartsWith("0x", StringComparison.OrdinalIgnoreCase)) - System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo($"https://polymarket.com/profile/{address}") { UseShellExecute = true }); - else - System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo($"https://polymarket.com/profile/{address}") { UseShellExecute = true }); - } - } - } - - private void Cb_opentrades_laufzeit_DrawItem(object? sender, DrawItemEventArgs e) - { - if (e.Index < 0) return; - e.DrawBackground(); - - string text = cb_opentrades_laufzeit.Items[e.Index]?.ToString() ?? ""; - System.Drawing.Color bgColor = e.BackColor; - - if (text.Contains("6h")) bgColor = System.Drawing.Color.LightCoral; - else if (text.Contains("24h")) bgColor = System.Drawing.Color.LightSalmon; - else if (text.Contains("72h") && text.Contains("Unter")) bgColor = System.Drawing.Color.LightYellow; - else if (text.Contains("72h") && (text.Contains("Über") || text.Contains("Über"))) bgColor = System.Drawing.Color.LightGreen; - - using (var brush = new System.Drawing.SolidBrush(bgColor)) - { - e.Graphics?.FillRectangle(brush, e.Bounds); - } - - using (var textBrush = new System.Drawing.SolidBrush(System.Drawing.Color.Black)) - { - e.Graphics?.DrawString(text, cb_opentrades_laufzeit.Font, textBrush, e.Bounds); - } - e.DrawFocusRectangle(); - } - - private async void BackupDatabase() - { - } - - private void FormatTradeGrid(DataGridView dgv) - { - FormatDataGrid(dgv); - foreach (DataGridViewColumn col in dgv.Columns) - { - if (col.Name == "MarketQuestion" || col.Name == "SourceTraderName") - { - if (!(col is DataGridViewLinkColumn)) - { - var linkCol = new DataGridViewLinkColumn - { - DataPropertyName = col.DataPropertyName, - HeaderText = col.HeaderText, - Name = col.Name, - ActiveLinkColor = System.Drawing.Color.White, - LinkBehavior = LinkBehavior.SystemDefault, - LinkColor = System.Drawing.Color.Blue, - TrackVisitedState = true, - VisitedLinkColor = System.Drawing.Color.Purple - }; - int idx = col.Index; - dgv.Columns.RemoveAt(idx); - dgv.Columns.Insert(idx, linkCol); - } - } - } - } - - private void SaveOpenTradesSnapshot() - { - var backupFile = "open_trades.json"; - var data = new Dictionary>(); - foreach (var acc in _tradingState.Accounts) - data[acc.Key] = acc.Value.OpenPositions; - System.IO.File.WriteAllText(backupFile, Newtonsoft.Json.JsonConvert.SerializeObject(data)); - } - - private void LoadOpenTradesSnapshot() - { - var backupFile = "open_trades.json"; - if (System.IO.File.Exists(backupFile)) - { - try - { - var json = System.IO.File.ReadAllText(backupFile); - var data = Newtonsoft.Json.JsonConvert.DeserializeObject>>(json); - if (data != null) - { - foreach (var kvp in data) - { - if (_tradingState.Accounts.TryGetValue(kvp.Key, out var acc)) - { - foreach (var pos in kvp.Value) acc.OpenPositions[pos.Key] = pos.Value; - acc.UpdateBalance(acc.AvailableBalance); - } - } - } - } - catch (Exception ex) - { - _logger.Error("Error loading open_trades.json: $($ex.Message)"); - } - } - } - - private void btn_showProgrammFolder_Click(object sender, EventArgs e) - { - System.Diagnostics.Process.Start("explorer.exe", Environment.CurrentDirectory); - } - - private async void Btn_debugLiteDB_Click(object? sender, EventArgs e) - { - if (MessageBox.Show("Moechtest du wirklich einen EINMALIGEN Import der alten 'data.db' in die NEUE MongoDB starten? Dies sollte nur genau einmal passieren!", "LiteDB Migration", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes) return; - - string dbPath = "data.db"; - if (!System.IO.File.Exists(dbPath)) - { - MessageBox.Show("Die Datei data.db wurde im Ordner nicht gefunden!", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error); - return; - } - - try - { - _logger.Info("Starte LiteDB -> MongoDB Datenmigration..."); - using var litedb = new LiteDB.LiteDatabase($"Filename={dbPath};ReadOnly=true"); - - var mapper = litedb.Mapper; - - var accColRaw = litedb.GetCollection("accounts").FindAll().ToList(); - var trdColRaw = litedb.GetCollection("trackers").FindAll().ToList(); - var mdColRaw = litedb.GetCollection("markets").FindAll().ToList(); - var ctColRaw = litedb.GetCollection("closed_trades").FindAll().ToList(); - var mtColRaw = litedb.GetCollection("mt_history").FindAll().ToList(); - - var accCol = accColRaw.Select(d => mapper.ToObject(d)).ToList(); - var trdCol = trdColRaw.Select(d => mapper.ToObject(d)).ToList(); - var mdCol = mdColRaw.Select(d => mapper.ToObject(d)).ToList(); - - var ctCol = new System.Collections.Generic.List(); - foreach (var doc in ctColRaw) - { - if (doc.TryGetValue("_id", out var id) && id.IsInt32) doc["_id"] = id.AsInt32.ToString(); - try { ctCol.Add(mapper.ToObject(doc)); } catch { } - } - - var mtCol = new System.Collections.Generic.List(); - foreach (var doc in mtColRaw) - { - if (doc.TryGetValue("_id", out var id) && id.IsInt32) doc["_id"] = id.AsInt32.ToString(); - try { mtCol.Add(mapper.ToObject(doc)); } catch { } - } - - _logger.Info($"LiteDB Export: {accCol.Count} Accounts, {trdCol.Count} MasterTrader, {mdCol.Count} Markets, {ctCol.Count} Trades, {mtCol.Count} mt_history."); - - var mAccounts = _db.GetCollection("accounts"); - var mTrackers = _db.GetCollection("trackers"); - var mMarkets = _db.GetCollection("markets"); - var mClosed = _db.GetCollection("closed_trades"); - var mMtHist = _db.GetCollection("mt_history"); - - // Clear Collections completely before migration to ensure no ghost-duplicates - _db.DropCollection("accounts"); - _db.DropCollection("trackers"); - _db.DropCollection("markets"); - _db.DropCollection("closed_trades"); - _db.DropCollection("mt_history"); - - // Re-fetch after drop - mAccounts = _db.GetCollection("accounts"); - mTrackers = _db.GetCollection("trackers"); - mMarkets = _db.GetCollection("markets"); - mClosed = _db.GetCollection("closed_trades"); - mMtHist = _db.GetCollection("mt_history"); - - foreach (var a in accCol) mAccounts.Upsert(a); - foreach (var a in trdCol) mTrackers.Upsert(a); - foreach (var a in mdCol) mMarkets.Upsert(a); - - foreach (var a in ctCol) - { - try { mClosed.InsertOne(a); } catch { } - } - - foreach (var a in mtCol) - { - try - { - if (string.IsNullOrEmpty(a.Id) || a.Id == "0") a.Id = MongoDB.Bson.ObjectId.GenerateNewId().ToString(); - mMtHist.InsertOne(a); - } - catch { } // Ignore duplicates! - } - - _logger.Info("✅ Migration ERFOLGREICH abgeschlossen!"); - MessageBox.Show("Migration in MongoDB abgeschlossen! Bitte PolyTrader neustarten.", "Erfolg", MessageBoxButtons.OK, MessageBoxIcon.Information); - } - catch (Exception ex) - { - _logger.Warning($"Migrationsfehler: {ex.Message}"); - MessageBox.Show($"Fehler bei der Migration:\n{ex.Message}", "Fehler", MessageBoxButtons.OK, MessageBoxIcon.Error); - } - } - - private void maintab_jobs_Click(object sender, EventArgs e) - { - - } - } - - public class OpenTradeRow - { - public string AccountName { get; set; } = string.Empty; - public string SourceTraderName { get; set; } = string.Empty; - - [System.ComponentModel.Browsable(false)] - public string SourceTraderAddress { get; set; } = string.Empty; - - public string MarketQuestion { get; set; } = string.Empty; - [System.ComponentModel.Browsable(false)] - public string MarketSlug { get; set; } = string.Empty; - public string Outcome { get; set; } = string.Empty; - public string Side { get; set; } = string.Empty; - public decimal EntryPrice { get; set; } - public decimal CurrentPrice { get; set; } - public decimal Size { get; set; } // Shares - public decimal AmountUsd { get; set; } // Renamed to 'Buy In' in UI - public decimal CurrentValueUsd { get; set; } - public decimal PnL => CurrentValueUsd > 0 ? (CurrentValueUsd - AmountUsd) : 0m; - public DateTime? ExpiryDate { get; set; } - - [System.ComponentModel.Browsable(false)] - public string TokenId { get; set; } = string.Empty; - } -} diff --git a/frm_main.resx b/frm_main.resx deleted file mode 100644 index 914d016..0000000 --- a/frm_main.resx +++ /dev/null @@ -1,371 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 17, 17 - - - 175, 17 - - - 1615, 17 - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - True - - - 625, 17 - - - 770, 17 - - - 1760, 17 - - - 1905, 17 - - - - AAEAAAD/////AQAAAAAAAAAMAgAAAEZTeXN0ZW0uV2luZG93cy5Gb3JtcywgQ3VsdHVyZT1uZXV0cmFs - LCBQdWJsaWNLZXlUb2tlbj1iNzdhNWM1NjE5MzRlMDg5BQEAAAAmU3lzdGVtLldpbmRvd3MuRm9ybXMu - SW1hZ2VMaXN0U3RyZWFtZXIBAAAABERhdGEHAgIAAAAJAwAAAA8DAAAAfh0AAAJNU0Z0AUkBTAIBAQUB - AAEoAQABKAEAARABAAEQAQAE/wEhAQAI/wFCAU0BNgcAATYDAAEoAwABQAMAASADAAEBAQABIAYAASAS - AAMEAQUDIwEzAywBQwMsAUMDLAFDAywBQwMsAUMDLAFDAywBQwMsAUMDLAFDAywBQwMsAUMDLAFDAysB - QQMSARjAAAMQARUDyQH/AfcC9gH/AfgC9wH/AfgC9wH/AfgC9wH/AfgC9wH/AfgC9wH/AfgC9wH/AfgC - 9wH/AfcC9gH/AfYC9QH/AfYC9QH/AfYC9QH/AfkC+AH/A20B38AAAxEBFgH5AvgB/wHzAfIB8QH/AXEB - bQFrAf8BcQFtAWsB/wFxAW0BawH/AXEBbQFrAf8BcQFtAWsB/wFxAW0BawH/AXEBbQFrAf8B8wHyAfEB - /wHrAeoB6QH/AesB6gHpAf8B6wHqAekB/wHsAesB6gH/A5gB/8AAAxEBFgH6AvkB/wHyAfAB8QH/AW8B - bAFqFf8BbwFsAWoB/wHyAvEB/wHnAuUB/wHnAuUB/wHnAuUB/wHnAuUB/wOYAf/AAAMRARYB/AL7Af8B - 7gLsAf8BaQFmAWQB/wHlAuMB/wHjAuEB/wHjAuEB/wHjAuEB/wHlAuMB/wFpAWYBZAH/Ae4C7QH/AeMC - 4QH/AeMC4QH/AeMC4QH/AeMC4QH/A5gB/8AAAxEBFgP+Af8B6QHoAecB/wFlAWMBYQH/AeAB3wHeAf8B - 3gHdAdwB/wHeAd0B3AH/Ad4B3QHcAf8B4AHfAd4B/wFlAWMBYQH/AfIB8QHwAf8B6QHoAecB/wHpAegB - 5wH/AeYB5QHkAf8B3gHdAdsB/wOYAf/AAAMRARYE/wHlAeQB4wH/AWEBXwFdAf8B3AHbAdoB/wHaAdkB - 2AH/AdoB2QHYAf8B2gHZAdgB/wHcAdsB2gH/AWIBYAFdAf8BYwFhAV8B/wFeAVwBWgH/AWIBYAFeAf8B - YQFfAVwB/wHaAdkB2AH/A5gB/8AAAxEBFgT/AeEB3wHeAf8BXQFbAVkB/wHYAdYB1QH/AdYB1AHTAf8B - 1gHUAdMB/wHWAdQB0wH/AdgB1gHVAf8BXQFbAVkB/wHhAd8B3gH/AdUB0wHSAf8B4QHfAd4B/wFdAVsB - WQH/AdYB1AHTAf8DmAH/wAADEQEWBP8B3QHbAdoB/wFdAVsBWgH/Ab4BvAG7Af8BvQG7AboB/wG9AbsB - ugH/Ab0BuwG6Af8BvgG8AbsB/wFdAVsBWgH/Ad0B2wHaAf8B0gHQAc8B/wHdAdsB2gH/AVkBVwFWAf8B - 0QHPAc4B/wGXApgB/8AAAxEBFgT/AdQB0gHQAf8BUQFPAU4B/wFSAU8BTgH/AVIBUAFPAf8BXAFaAVkB - /wFWAVMBUgH/AVIBTwFOAf8BUQFPAU4B/wHVAdMB0QH/Ac4BzAHKAf8B2QHXAdUB/wFVAVMBUgH/Ac0B - ygHIAf8BlwKYAf/AAAMRARYE/wHIAcUBxAH/AcgBxQHEAf8ByAHFAcQB/wHKAccBxgH/AVEBTgFNAf8B - 1AHQAc8B/wHIAcUBxAH/AcgBxQHEAf8ByQHGAcUB/wHKAccBxgH/AdUB0gHRAf8BUgFPAU4B/wHIAcUB - xAH/ApcBmAH/wAADEQEWBP8BxQHCAcEB/wHGAcMBwgH/AcYBwwHCAf8ByAHFAcQB/wFOAUsBSgH/AdQB - 0QHQAf8BygHHAcYB/wHKAccBxgH/AcoBxwHGAf8BygHHAcYB/wHUAdEB0AH/AU4BSwFKAf8BxAHAAb8B - /wOXAf/AAAMRARYE/wHAAb4BvAH/AcEBvwG9Af8BwQG/Ab0B/wHDAcEBvwH/AUkCRwH/AU4BTAFLAf8B - SwFJAUgB/wFLAUkBSAH/AUsBSQFIAf8BSwFJAUgB/wFOAUwBSwH/AUkCRwH/Ab4BvAG6Af8DlwH/wAAD - EQEWBP8BvAG6AbgB/wG9AbsBuQH/Ab0BuwG5Af8BvQG7Abkh/wG4AbYBswH/A5cB/8AAAwwBDwT/AbIB - rwGsAf8BswGwAa4B/wGzAbABrgH/AbMBsAGtAf8BsgGvAawB/wGyAa4BrAH/AbIBrgGsAf8BsgGuAawB - /wGyAa4BrAH/AbIBrgGsAf8BsgGuAawB/wGyAa8BrAH/AbUBswGxAf8DmAH/xAADagHXA5cB/wOXAf8D - lwH/A5cB/wOXAf8DlwH/A5cB/wOXAf8DlwH/A5cB/wOXAf8DlwH/A5gB/wMEAQXAAAMMARADKwFCAywB - QwMsAUMDLAFDAywBQwMsAUMDLAFDAywBQwMsAUMDLAFDAywBQwMsAUMDLAFDAywBQwMiATEDBAEFAxEB - FgMRARYDEQEWAxEBFgMRARYDEQEWAxEBFgMRARYDEQEWAxEBFgMRARYDEQEWAxEBFgMRARYDCgENBAAD - BAEFAxABFQMPARQDAgEDIAADCgENAwoBDSgAAwYBCAMgAS4DKwFCAysBQgMgAS4DBwEJBAADEQEWOP8B - jwFxAVYB/wMRARYBtwF/AQ8B/wG2AXwBCQH/AbYBfAEJAf8BtgF8AQkB/wG2AXwBCQH/AbYBfAEJAf8B - tgF8AQkB/wG2AXwBCQH/AbYBfAEJAf8BtgF8AQkB/wG2AXwBCQH/AbYBfAEJAf8BtgF8AQkB/wG2AX0B - CgH/AWIBXQFVAcQEAAMjATMBtwGDARkB/wG4AYUBHAH/AyMBMgMCAQMYAAMPARQBYQFdAVYBxQFhAV0B - VgHFAw8BFAMKAQ0DKgE/AywBQwMsAUMDLAFDAywBQwMsAUMDLAFDAywBQwNEAXkBrwGuAa0B/wHcAdsB - 3AH/AdwB2wHcAf8BrwGuAa0B/wNEAXcDBwEJAxEBFgT/AWQBxwGTAf8BZwHIAZQB/wFnAcgBlAH/AWcB - yAGUAf8BZwHIAZQB/wFnAcgBlAH/AWcByAGUAf8BZgHIAZQB/wFlAcgBkwH/AWUBxwGTAf8BZQHIAZMB - /wFmAcgBlAH/AVoBxgGNAf8BjgFtAVMB/wMRARYB3AHiAesB/wPQAf8D0AH/A9AB/wPQAf8D0AH/A9AB - /wPQAf8D0AH/A9AB/wPQAf8D0AH/A9AB/wPQAf8BtgF9AQoB/wQAAcABjgEqAf8B5QGsAU4B/wHlAaoB - SQH/AbkBhgEdAf8DIQEwBAIQAAMPARQBXgFcAVYBwQHkAaQBPAH/AegBsgFXAf8BXwFbAVYBwAMRARYB - UAGFAawB/wFLAYABqgH/AUoBfwGqAf8BSgF/AaoB/wFKAX8BqgH/AUoBfwGqAf8BSgF/AaoB/wFHAX0B - qQH/AcYBwgG/Af8BrQGrAagJ/wGtAasBqAH/AcMBwQG/Af8DIAEuAxEBFgT/AVkBuQGFAf8BXAG7AYgB - /wFdAbsBiAH/AV0BuwGIAf8BXAG7AYcB/wFaAboBhgH/AVUBuAGCAf8BigHPAasB/wHRAe4B3wH/AdEB - 6gHbAf8ByQHqAdkB/wGKAc8BqwH/AUgBtAF7Af8BjgFtAVMB/wMRARYE/wFqAWcBZgH/AWwBaAFnAf8B - bAFoAWcB/wFsAWgBZwH/AWwBaAFnAf8BbAFoAWcB/wFsAWgBZwH/AWwBaAFnAf8BbAFoAWcB/wFsAWgB - ZwH/AWwBaAFnAf8BbAFoAWcB/wFjAmAB/wG0AXoBBwH/BAABugGGAR0B/wHsAboBawH/AeUBrgFRAf8B - 5QGqAUkB/wG5AYYBHgH/AxwBJwQCCAADDwEUAV4BXAFWAcEB5AGkATsB/wHkAa0BUQL/AecBxAH/AVoB - WAFVAbMDEQEWAV0BjQG1Af8BkwGkAa4B/wG5AbMBrQH/AbgBswGsAf8BuAGzAawB/wG4AbMBrAH/AbkB - swGtAf8BnQGXAZMB/wGoAaUBowH/Av4B/QP/Af4D/wH+Af8C/gH9Af8BqAGlAaMB/wGPAY4BjQH5AxEB - FgT/AakB2AG+Af8BdwHAAZgB/wFmAbgBiwH/AWYBuAGLAf8BgAHFAZ8B/wHNAegB2QH/AZgBugGTAf8B - QwGFAU8B/wFCAb0BzAH/AUEBxAHZAf8BQQG3Ab4B/wFDAYUBTwH/AbIB0gG2Af8BjgFuAVMB/wMRARYE - /wFxAm4B/wFzAnAB/wFzAnAB/wFzAnAB/wFzAnAB/wFzAnAB/wFzAnAB/wFzAnAB/wFzAnAB/wFzAnAB - /wFzAnAB/wFzAnAB/wFlAWMBZQH/AbQBegEHAf8EAAMDAQQB6QHBAYIB/wHsAboBawH/AeUBrgFRAf8B - 5gGqAUkB/wG3AYQBGwH/AxgBIQQBAwoBDQFeAVwBVgHBAeQBowE7Af8B5AGtAVEC/wHnAcMB/wFXAVYB - VAGuBAADEQEWAWkBmQG+Af8BuAGzAawL/wH+A/8B/gX/AZkBlQGTAf8BnwGcAZoB/wNPAf8DVwH/A1oB - /wKnAagB/wGgAZ0BmwH/AaIBngGcAf8DEQEWBP8BPQGfAZQB/wFFAYEBQgH/AUUBfAE1Af8BRQF8ATQB - /wFEAYcBUAH/AT0BtQHLAf8BOwHNAv8BPQHLAv8BPQHJAv8BPQHJAv8BPQHJAv8BPQHLAv8BKgHKAv8B - jwFuAVIB/wMRARYE/wFrAWkBaAH/AW0BawFqAf8BbQFrAWoB/wFtAWsBagH/AW0BawFqAf8BbQFrAWoB - /wFtAWsBagH/AW0BawFqAf8BbQFrAWoB/wFtAWsBagH/AW0BawFqAf8BbQFrAWoB/wFfAV0BXgH/AbQB - egEHAf8IAAMDAQQB4wG5AXcB/wHsAbsBbAH/AeUBrgFRAf8B5gGqAUkB/wG3AYQBGwH/AxkBIgMjATMB - /wHyAcoB/wHjAawBTQL/AecBwwH/AVcBVgFUAa4IAAMRARYBdgGiAccB/wG5AbIBrAH/AQABfwE+Af8B - AAGAAUAF/wPCAf8DwAH/AZ8BnQGaAf8BpwGjAaEB/wHyAfEB8AH/AfYB9QH0Af8B9gH1AfQB/wHyAfEB - 8AH/AacBpAGiAf8BmgKYAfgDEQEWBP8BMwG9Av8BNgG+Av8BNgG+Av8BNgG+Av8BNgG+Av8BNgG9Av8B - NgG9Av8BNQG9Av8BNAG8Av8BMwG8Av8BNAG8Av8BNQG9Av8BJAG5Av8BkAFuAVEB/wMRARYE/wFkAWIB - YQH/AWcBZQFkAf8BZwFlAWQB/wFnAWUBZAH/AWcBZQFkAf8BZwFlAWQB/wFnAWUBZAH/AWcBZQFkAf8B - ZwFlAWQB/wFnAWUBZAH/AWcBZQFkAf8BZwFlAWQB/wFYAlcB/wG0AXoBBwH/DAAEAgHUAaYBVAH/Ae0B - uwFtAf8B5QGuAVEB/wHmAaoBSQH/AbwBhQEUAf8BpAGmAawB/wG1AZABSAL/AewBygH/AVcBVgFUAa4M - AAMRARYBgwGtAc4B/wG3AbIBqwL/AfoB/AL/AfsB/gH/AfwB+QH6Af8D+AH/A/gB/wH4AfcB+AH/AdgB - 1wHWAf8BogGgAZ4B/wHwAe8B7gH/AfAB7wHuAf8BogGgAZ4B/wHaAdkB2AH/AwcBCQMRARYE/wEqAbAC - /wEuAbIC/wEuAbIC/wEuAbIC/wEuAbIC/wEsAbEC/wElAa8C/wFoAcoC/wHFAewC/wHEAewC/wG6AegC - /wFoAcoC/wEVAasC/wGPAW4BUQH/AxEBFgT/AV4BXAFbAf8BYQFfAV4B/wFhAV8BXgH/AWEBXwFeAf8B - YQFfAV4B/wFhAV8BXgH/AWEBXwFeAf8BYQFfAV4B/wFhAV8BXgH/AWEBXwFeAf8BYQFfAV4B/wFhAV8B - XgH/AVEBUAFRAf8BtAF6AQcB/wgAAwoBDQMKAQ0EAQHFAZMBNAH/Ae4BvAFuAf8B5QGuAVEB/wHmAaoB - SAH/AbMBhQEpAf8B2wHeAeMB/wMCAQMQAAMRARYBkAG3AdcB/wG4AbIBqwH/AQABgAE/Af8BAAGCAUIB - /wH9AvkB/wLBAcAB/wLAAb8B/wL5AfgB/wG+Ab0BvAH/AdEB0AHOAf8B8wLyAf8B9ALyAf8C1AHRAf8D - MQFNBAADEQEWBP8BlgHWAv8BWAG8Av8BRAGyAv8BRAGzAv8BYgHAAv8BwQHnAv8BYQGxAecB/wEAAXUB - vwH/AaYBqwGKAf8BuAGxAYcB/wGSAaUBkAH/AQABdAG/Af8BjgHNAfkB/wGPAW8BUgH/AxEBFgT/AVgC - VgH/AVICUAH/AVgCVgH/AVsCWQH/AVsCWQH/AVsCWQH/AVsCWQH/AVsCWQH/AVsCWQH/AVsCWQH/AVsC - WQH/AVsCWQH/AUsBSQFLAf8BtAF6AQcB/wQAAw8BFANdAcUDXQHFAwYBBwMGAQcBwgGNASQB/wHvAb0B - bgH/AeUBrgFRAf8B5wGpAUMB/wMnAToDEAEVAxIBGAMPARQDAwEEBAADEQEWAZsBvwHcAf8BtwGxAaoB - /wH4AfIB9AH/Af4B9AH3Af8B9gHxAfMB/wHyAvEB/wHxAvAB/wHxAvAB/wHxAfAB8QX/AUIBhgG9Af8B - LAFjAZUB/wwAAxEBFgT/AVcBjgGdAf8BAAFqAc0B/wEAAWoBzAH/AQABagHMAf8BAAF1AcAB/wGhAaUB - hQH/AfcBvwFpAf8B7QG8AW0B/wHqAbsBbwH/AekBuwFvAf8B6gG7AW8B/wHtAb0BbQH/AfQBugFfAf8B - jgFvAVQB/wMRARYE/wFRAk8B/wGRAo8B/wGPAo0B/wFSAlAB/wFVAlMB/wFVAlMB/wFVAlMB/wFVAlMB - /wFVAlMB/wFVAlMB/wFVAlMB/wFVAlMB/wFEAUMBRQH/AbQBewEIAf8DCgENA1wBwQHCAcEBvgH/AZoB - lwGVAf8DPQFpAz0BaQGkAaUBqgH/AbYBiAEsAf8B7QG6AWcB/wG7AZcBUAH/AaUCpAH/AXUBcwFxAfYB - hAGCAYAB/wF3AXUBcwH/AygBPAMFAQYDEQEWAagByAHjAf8BuAGxAaoB/wEAAYEBQAH/AQABhAFEAf8B - 9gLxAf8CvgG9Af8B8gHxAfAB/wG+Ab8BvQH/ArwBuwX/AUsBjAHCAf8BPQFtAZkB/wwAAxEBFgH7A/8B - 5QGzAWMB/wHmAbQBZQH/AecBtAFkAf8B5wG0AWQB/wHmAbQBZQH/AeQBswFmAf8B4wGzAWYB/wHjAbMB - ZQH/AeMBsgFkAf8B4wGyAWQB/wHjAbIBZAH/AeMBswFlAf8B4wGuAVoB/wGNAW8BVAH/AxEBFgT/AUsC - SQH/AY0CiwH/AYwCiQH/AUwCSgH/AU8CTQH/AU8CTQH/AU8CTQH/AU8CTQH/AU8CTQH/AU8CTQH/AU8C - TQH/AU8CTQH/AT4BPAE+Af8BtAF7AQgB/wMKAQ0E/wHAAb4BvQH/AZ4BnQGcAf8BtwG1AbMB/wGwAa0B - qwH/AZIBkAGOAf8B3AHeAeAB/wMGAQcBxgHFAcgB/wHDAcEBvwH/AcQBwgHAAf8BzgHMAcoB/wHdAdsB - 2gH/AcgCxgH/AwwBEAMRARYBswHSAekB/wG2AbABqQH/AfAC6wH/AfYB7gHwAf8B7wLrAf8C6gHpAf8C - 6gHpAf8B6gHrAekB/wHpAeoB6AX/AU4BkAHIAf8BPgFwAZoB/wwAAxEBFgH7A/8B3QGpAVgB/wHeAasB - WwH/Ad4BqwFcAf8B3gGrAVwB/wHeAasBWwH/Ad0BqQFZAf8B3QGnAVQB/wHpAcMBigH/AfkB6QHSAf8B - +QHoAdEB/wH4AeUBygH/AekBwwGKAf8B3AGjAUkB/wGNAW8BVAH/AxEBFgT/AUICQAH/ATwCOgH/AUMC - QQH/AUYCRAH/AUYCRAH/AUYCRAH/AUYCRAH/AUYCRAH/AUYCRAH/AUYCRAH/AUYCRAH/AUYCRAH/ATQB - MwE1Af8BtAF7AQgB/wQAAwIBAwGzAbEBsAH/AdABzgHNAf8BwwHBAcAB/wG2AbQBsgH/Ab8BvQG7Af8D - EAEVBAABbQJsAeYBvQG6AbkB/wG4AbYBtAH/AY4BiwGKAf8MAAMRARYBvgHaAe8B/wG3AbABqQH/AQAB - gwFCAf8BAAGGAUYB/wHvAuoB/wK7AboB/wKcAZ0B/wK8AbsB/wK6AbkF/wFPAZMBzAH/AT8BcAGcAf8M - AAMRARYE/wHwAdIBqgH/AeQBuQF6Af8B3wGvAWoB/wHfAa8BagH/AeYBvQGCAf8B9gHlAc0B/wHNAbIB - fgH/AacBfAEpAf8BzgHBAacB/wHRAcgBtAH/AckBuQGaAf8BpgF8ASkB/wHjAc0BpQH/AY0BbwFUAf8D - EQEWOP8BtQF8AQoB/wgAA1cBsgT/AdMB0AHPAf8B0AHPAc0B/wGuAa0BrAH/AwMBBAQAAYQBgQF/Af8B - qAGlAaIB/wGwAa0BqwH/AY8BjQGLAf8MAAMRARYBygHgAfQB/wG1AbABqAH/AeIB4AHfAf8B6gLlAf8B - 7wHrAeoB/wHrAeoB6QH/AesB6gHpAf8B6AHnAeYB/wHiAeAB3wX/AVEBlgHPAf8BPgFyAZwB/wwAAxEB - FgT/AbsBoAFtAf8BoAFuAQ4B/wGgAW4BDwH/AaABbgEPAf8BqAF8ASkB/wHLAb4BpAH/Ad8B4AHkAf8B - 3QLcAf8B3ALaAf8B3ALaAf8B3ALaAf8B3QHcAd0B/wLeAeEB/wGNAW4BUwH/AxEBFgH2Ad4BugH/AdIB - jwEdAf8B0wGSASQB/wHVAZUBKQH/AdYBlwEvAf8B1wGaATQB/wHZAZ0BOQH/AdoBnwE+Af8B2wGiAUMB - /wHrAcUBhgH/AbIBegEKAf8BwgGGAQ8C/wHiAaoB/wEAAQoB/AH/AbgBgQERAf8MAANWAa4E/wHYAdcB - 1QH/AWkCaAHkAxUBHAMDAQQBcQFwAW8B6AG/AbwBugH/AawBqAGmAf8BjwGMAYoB/wMsAUMDLAFDAw0B - EQMQARUB1gHoAfgB/wGVAaoBugH/AbIBrgGoAf8BjAGLAYoB/wK0AbIB/wK1AbMB/wK1AbMB/wKzAbEB - /wGyAa8BqgH/AbUBrwGoAf8BVgGaAdMB/wE/AXMBnQH/DAADEAEVBP8B2QHXAdgB/wHZAdgB2QH/A9kB - /wPZAf8B2QHYAdkB/wHZAtcB/wHZAdcB1gH/AdkB1wHWAf8B2QHXAdYB/wHZAdcB1gH/AdkB1wHWAf8B - 2QHXAdYB/wHYAdcB1gH/AY0BbgFTAf8DBAEFAdkBswFqAf8B7QHQAZ4B/wHtAc8BnQH/AewBzwGcAf8B - 7AHOAZsB/wHsAc4BmgH/AewBzQGZAf8B7AHNAZgB/wHrAcwBlwH/AewBzAGXAf8B7gHOAZkB/wHtAc4B - mAH/Ae8BzgGRAf8B9wHTAY0B/wFaAVgBVQGzEAADVgGuA/wB/wHzAfIB8wH/AXcBdQFzAf8DPgFqAxMB - GgGvAawBqwH/Ab8BvAG6Af8BqQGmAaQB/wHBAb8BvAH/AuMB4gH/AwYBBwMDAQQBRAF4AaEB/wFBAXYB - oAH/AT8BdQGgAf8BsAGsAagB/wHSAdABzgH/Ac4BzAHKAf8BzAHKAckB/wHQAc0BywH/ATkBcgGhAf8B - QQF2AaAB/wFCAXYBoAH/AVUBWAFaAbQMAAMDAQQBjwFxAVYB/wGOAW8BUwH/AY4BbwFTAf8BjgFvAVMB - /wGOAW8BUwH/AY4BbwFTAf8BjgFvAVMB/wGOAW8BUwH/AY4BbwFTAf8BjgFvAVMB/wGOAW8BUwH/AY4B - bwFTAf8BjgFvAVMB/wGOAW8BUwH/AVkBWAFXAbRUAAMMAQ8BeQF1AXMB9wGzAbIBsQH/AcEBwAG/Af8D - XAHBBAIBcAFvAW4B5QGZAZYBlAH/AYIBgAF+Af8DGwEmGAADWQGzA6cB/wOoAf8DAwEEHAABQgFNAT4H - AAE+AwABKAMAAUADAAEgAwABAQEAAQEGAAEBFgAD/3kAAYALAAGHAfkB/wGBBAABgwHwBgABgQHgBgAB - gAHABgABgAEBBgABwAEDBgAB4AEHBgABwAEPAQABAQQAAYABAQEAAQcHAAEHBwABBwQAAYABhwEAAQcE - AAHAAYcBAAEHBAAB4AIAAQcEAAHwAgABBwIAAv8B+AEBAfgBfws= - - - - 1409, 17 - - - 1012, 17 - - - 1264, 17 - - - 480, 17 - - - 335, 17 - - - 2273, 17 - - - 2128, 17 - - - 156 - - - - - AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAA - AADGxsb///////j4+P/4+Pj/+/v7/+/v7//Ly8v/w8PD/8jIyP/CwsL/8fHx//v7+//4+Pj/+Pj4//// - ///FxcX//Pz8//n5+f/5+fn/+fn5//v7+//s7Oz/2NjY/9nZ2f/b29v/2dnZ//Hx8f/6+vr/+fn5//n5 - +f/5+fn//Pz8//f39//5+fn/+vr6//r6+v/5+fn//v7+//j4+P/8/Pz//f39//j4+P/+/v7/+vr6//r6 - +v/6+vr/+fn5//j4+P/5+fn/+fn5//r6+v/4+Pj//////5+dnv8mISL/VFBR/1dTVP8kHh//mJWW//// - ///4+Pj/+vr6//r6+v/5+fn/+vr6//r6+v/5+fn//v7+/+vq6v8gGxz/FA4P/xEMDf8QCwz/FQ8Q/xwX - GP/m5ub///////n5+f/6+vr/+vr6//r6+v/6+vr/+vn5//z8/P/39/f/ODM0/wMAAP8cFxj/GxYX/wQA - AP8zLi//8fHx//v7+//5+fn/+vr6//r6+v/6+vr/+vr6//7+/v/r6+v/4uHh/9bV1f9wbW7/KCMk/ykk - Jf9xbm//zs3N///////39/f/+vr6//r6+v/6+vr/+vr6//f39///////fHl6/zMuL//w8PD//////0A7 - PP9EQEH/4eDh/+Tj5P/r6uv/8fHx//39/f/6+vr/+vr6//v7+//4+Pj//////5OQkf9eWlv/raur/6Og - of9FQUL/QTw9/zw4Of9VUVH/eXZ3/56cnP//////+Pj4//r6+v/6+vr/+vr6//39/f/u7e3/8PDw/1dT - VP81MDH/RUFC/0hERP+0srL/srCx/yEbHP9jX1////////f39//6+vr/+fn5//r6+v/6+vr/+Pj4//// - ///S0dH/zs3N/z46O/80MDD//////+7u7v8ZFBX/Y19g///////39/f/+vr6//n5+f/6+vr/+vr6//r6 - +v/6+vr/+fj4//////+Fg4P/gX9////////6+vr/cm9v/6Sio///////+Pj4//n5+f/6+vr/+Pj4//n5 - +f/6+vr/+fn5//j4+P//////4+Pj/+Pi4//+/v7//v7+/+Tj4//w8PD//f39//n5+f/5+fn/9fX1//v7 - +//8/Pz/+vr6//z8/P/8/Pz/+vr6//j4+P/4+Pj/+vr6//r6+v/4+Pj/+Pj4//n5+f/5+fn/+Pj4/+Tk - 5P+4uLj/ysrK/8XFxf/Gxsb/xcXF//T09P/7+/v/+fn5//n5+f/6+vr/+fn5//n5+f/5+fn/+fn5//39 - /f/CwsL/6enp/+7u7v/09PT/8/Pz//Ly8v/4+Pj/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/9/f3//// - ///Dw8P/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAA== - - - \ No newline at end of file diff --git a/services/ConfigMigrator.cs b/services/ConfigMigrator.cs index 035508e..eb8295b 100644 --- a/services/ConfigMigrator.cs +++ b/services/ConfigMigrator.cs @@ -6,100 +6,21 @@ using System.Linq; using System.Text.Json; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; -using MongoDB.Bson; -using MongoDB.Driver; using PolyTrader.Core.Persistence; using PolyTrader.Core.Persistence.Ef; -using PolyTrader.Core.Persistence.Mongo; using PolyTrader.Modules.CopyTrading.Persistence; using PolyTrader.Modules.CopyTrading.Persistence.Ef; -using PolyTrader.Modules.CopyTrading.Persistence.Mongo; using PolyTraderSharp.Models; namespace PolyTraderSharp.Services { /// - /// Einmalige Config-Migration Mongo → MySQL (Phase 6, Stufe 4). - /// Kopiert NUR Konfiguration: Accounts, aktive Markets, Master-Trader, - /// Copytrading-Account-Settings (inkl. Fallback auf Alt-Felder im accounts-Dokument) - /// und Demo-Positionen (reines App-State). Handels-/Master-Trader-Historie startet leer. - /// - /// Aufruf: PolyTraderSharp.exe --migrate-config (kein UI-Start). - /// Liest die Mongo-Verbindung aus Database:ConnectionString/DatabaseName, die - /// MySQL-Verbindung aus Database:MySqlConnectionString (appsettings[.Local].json). - /// Idempotent über Upserts (mehrfacher Aufruf überschreibt, dupliziert nicht). + /// Einmalige Config-Migration nach MySQL (Phase 6, Stufe 4). + /// Quelle: mongoexport-JSON (). + /// liest die migrierte Config zur Kontrolle zurück. Idempotent über Upserts. /// public static class ConfigMigrator { - public static void Run(string mongoConnection, string mongoDbName, string mySqlConnection) - { - Console.WriteLine("=== Config-Migration Mongo -> MySQL ==="); - Console.WriteLine($"Quelle (Mongo): {mongoDbName} @ {mongoConnection}"); - Console.WriteLine($"Ziel (MySQL): {Redact(mySqlConnection)}"); - - // --- Quelle: Mongo --- - var mongoDb = new MongoClient(mongoConnection).GetDatabase(mongoDbName); - var srcAccounts = new MongoAccountRepository(mongoDb); - var srcMarkets = new MongoMarketRepository(mongoDb); - var srcPositions = new MongoPositionRepository(mongoDb); - var srcTraders = new MongoTrackedTraderRepository(mongoDb); - var srcSettings = new MongoCopyTradingAccountSettingsRepository(mongoDb); - var rawAccounts = mongoDb.GetCollection("accounts"); - - // --- Ziel: MySQL/EF (eigene Mini-Container für die DbContext-Factories) --- - var target = new ServiceCollection() - .AddDbContextFactory(o => o.UseMySql(mySqlConnection, ServerVersion.AutoDetect(mySqlConnection))) - .AddDbContextFactory(o => o.UseMySql(mySqlConnection, ServerVersion.AutoDetect(mySqlConnection))) - .BuildServiceProvider(); - - var coreFactory = target.GetRequiredService>(); - var ctFactory = target.GetRequiredService>(); - - IAccountRepository dstAccounts = new EfAccountRepository(coreFactory); - IMarketRepository dstMarkets = new EfMarketRepository(coreFactory); - IPositionRepository dstPositions = new EfPositionRepository(coreFactory); - ITrackedTraderRepository dstTraders = new EfTrackedTraderRepository(ctFactory); - ICopyTradingAccountSettingsRepository dstSettings = new EfCopyTradingAccountSettingsRepository(ctFactory); - - dstMarkets.EnsureIndexes(); - - // 1) Accounts - var accounts = srcAccounts.GetAll(); - foreach (var acc in accounts) - dstAccounts.Upsert(acc); - Console.WriteLine($"[OK] Accounts: {accounts.Count}"); - - // 2) Aktive Markets - var markets = srcMarkets.GetActive(); - foreach (var m in markets) - dstMarkets.Upsert(m); - Console.WriteLine($"[OK] Markets (aktiv): {markets.Count}"); - - // 3) Master-Trader - var traders = srcTraders.GetAll(); - foreach (var t in traders) - dstTraders.Upsert(t); - Console.WriteLine($"[OK] Master-Trader: {traders.Count}"); - - // 4) Copytrading-Account-Settings (mit Fallback auf Alt-Felder) - int settingsCount = MigrateSettings(accounts, srcSettings, dstSettings, rawAccounts); - Console.WriteLine($"[OK] Copytrading-Settings: {settingsCount}"); - - // 5) Demo-Positionen (reines App-State; Live-Positionen werden aus der Chain rekonstruiert) - int demoPos = 0; - foreach (var acc in accounts.Where(a => a.IsDemo)) - { - foreach (var pos in srcPositions.GetDemo(acc.AccountId)) - { - dstPositions.UpsertDemo(acc.AccountId, pos); - demoPos++; - } - } - Console.WriteLine($"[OK] Demo-Positionen: {demoPos}"); - - Console.WriteLine("=== Migration abgeschlossen ==="); - } - /// /// Config-Migration aus mongoexport-JSON (Ordner mit PolyTraderDB.accounts.json / /// .trackers.json) → MySQL. Markets bleiben aussen vor (bereits migriert und werden @@ -321,60 +242,6 @@ namespace PolyTraderSharp.Services return set; } - private static int MigrateSettings( - List accounts, - ICopyTradingAccountSettingsRepository src, - ICopyTradingAccountSettingsRepository dst, - IMongoCollection rawAccounts) - { - var existing = src.GetAll().ToDictionary(s => s.AccountId); - int count = 0; - - foreach (var acc in accounts) - { - if (existing.TryGetValue(acc.AccountId, out var s)) - { - dst.Upsert(s); - count++; - continue; - } - - var settings = new CopyTradingAccountSettings { AccountId = acc.AccountId }; - try - { - var raw = rawAccounts.Find(Builders.Filter.Eq("_id", acc.AccountId)).FirstOrDefault(); - if (raw != null) - { - settings.PerMarketLimit = Dec(raw, "PerMarketLimit", settings.PerMarketLimit); - settings.MaxPriceDifference = Dec(raw, "MaxPriceDifference", settings.MaxPriceDifference); - settings.MaxBuyPrice = Dec(raw, "MaxBuyPrice", settings.MaxBuyPrice); - settings.ProfitTarget = Dec(raw, "ProfitTarget", settings.ProfitTarget); - settings.PreRedeemLimit = Dec(raw, "PreRedeemLimit", settings.PreRedeemLimit); - settings.PerMasterLimit = Dec(raw, "PerMasterLimit", settings.PerMasterLimit); - settings.perMaxTime6h = Dec(raw, "perMaxTime6h", settings.perMaxTime6h); - settings.perMaxTime24h = Dec(raw, "perMaxTime24h", settings.perMaxTime24h); - settings.perMaxTime72h = Dec(raw, "perMaxTime72h", settings.perMaxTime72h); - settings.perMaxTimeNone = Dec(raw, "perMaxTimeNone", settings.perMaxTimeNone); - } - } - catch { } - - dst.Upsert(settings); - count++; - } - - return count; - } - - private static decimal Dec(BsonDocument doc, string field, decimal fallback) - { - if (doc.TryGetValue(field, out var v)) - { - try { return v.ToDecimal(); } catch { } - } - return fallback; - } - private static string Redact(string conn) => System.Text.RegularExpressions.Regex.Replace(conn, "(?i)(password=)[^;]*", "$1***"); } diff --git a/services/PersistenceService.cs b/services/PersistenceService.cs index c736204..4157a92 100644 --- a/services/PersistenceService.cs +++ b/services/PersistenceService.cs @@ -24,7 +24,7 @@ namespace PolyTraderSharp.Services _jobStatus = new JobStatusRow { - JobName = "MongoDB Transaction Log", + JobName = "MySQL Transaction Log", Description = "Awaits internal signals to write Closed Trades to the database safely.", StatusText = "Pending Initial Delay..." }; @@ -97,7 +97,7 @@ namespace PolyTraderSharp.Services ExitReason = trade.ExitReason }); - _logger.Debug($"Saved ClosedTrade {trade.TradeId} to MongoDB"); + _logger.Debug($"Saved ClosedTrade {trade.TradeId} to MySQL"); _jobStatus.LastRun = DateTime.Now; } catch (Exception ex) diff --git a/services/SnapshotService.cs b/services/SnapshotService.cs index 87a1d2d..2464489 100644 --- a/services/SnapshotService.cs +++ b/services/SnapshotService.cs @@ -23,7 +23,7 @@ namespace PolyTraderSharp.Services _jobStatus = new JobStatusRow { - JobName = "LiteDB State Snapshot", + JobName = "State Snapshot", Description = "Saves active application state (balances, open pos) to snapshot.json.", StatusText = "Pending Initial Delay..." }; diff --git a/services/StartupHydrationService.cs b/services/StartupHydrationService.cs index fc36b42..502a418 100644 --- a/services/StartupHydrationService.cs +++ b/services/StartupHydrationService.cs @@ -3,8 +3,6 @@ using System.Linq; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Hosting; -using MongoDB.Bson; -using MongoDB.Driver; using PolyTrader.Core.Persistence; using PolyTrader.Modules.CopyTrading.Persistence; using PolyTraderSharp.Models; @@ -26,7 +24,6 @@ namespace PolyTraderSharp.Services private readonly IPositionRepository _positionRepo; private readonly ICopyTradingAccountSettingsRepository _accountSettingsRepo; private readonly ITrackedTraderRepository _traderRepo; - private readonly IMongoDatabase _db; private readonly TerminalLogger _logger; public StartupHydrationService( @@ -36,7 +33,6 @@ namespace PolyTraderSharp.Services IPositionRepository positionRepo, ICopyTradingAccountSettingsRepository accountSettingsRepo, ITrackedTraderRepository traderRepo, - IMongoDatabase db, TerminalLogger logger) { _state = state; @@ -45,7 +41,6 @@ namespace PolyTraderSharp.Services _positionRepo = positionRepo; _accountSettingsRepo = accountSettingsRepo; _traderRepo = traderRepo; - _db = db; _logger = logger; } @@ -85,14 +80,12 @@ namespace PolyTraderSharp.Services /// /// Lädt die Copytrading-Account-Settings in den State. Existiert für einen Account noch - /// kein Eintrag, werden die Werte einmalig aus den alten AccountState-Feldern des - /// Roh-Dokuments migriert (damit konfigurierte Limits nach dem Modell-Split erhalten bleiben). + /// kein Eintrag, wird ein Default-Eintrag angelegt und persistiert. /// private void HydrateAccountSettings(List accounts) { var existing = _accountSettingsRepo.GetAll().ToDictionary(s => s.AccountId); - var rawAccounts = _db.GetCollection("accounts"); - int migrated = 0; + int created = 0; foreach (var acc in accounts) { @@ -103,41 +96,13 @@ namespace PolyTraderSharp.Services } var settings = new CopyTradingAccountSettings { AccountId = acc.AccountId }; - try - { - var raw = rawAccounts.Find(Builders.Filter.Eq("_id", acc.AccountId)).FirstOrDefault(); - if (raw != null) - { - settings.PerMarketLimit = Dec(raw, "PerMarketLimit", settings.PerMarketLimit); - settings.MaxPriceDifference = Dec(raw, "MaxPriceDifference", settings.MaxPriceDifference); - settings.MaxBuyPrice = Dec(raw, "MaxBuyPrice", settings.MaxBuyPrice); - settings.ProfitTarget = Dec(raw, "ProfitTarget", settings.ProfitTarget); - settings.PreRedeemLimit = Dec(raw, "PreRedeemLimit", settings.PreRedeemLimit); - settings.PerMasterLimit = Dec(raw, "PerMasterLimit", settings.PerMasterLimit); - settings.perMaxTime6h = Dec(raw, "perMaxTime6h", settings.perMaxTime6h); - settings.perMaxTime24h = Dec(raw, "perMaxTime24h", settings.perMaxTime24h); - settings.perMaxTime72h = Dec(raw, "perMaxTime72h", settings.perMaxTime72h); - settings.perMaxTimeNone = Dec(raw, "perMaxTimeNone", settings.perMaxTimeNone); - migrated++; - } - } - catch { } - _accountSettingsRepo.Upsert(settings); _copyState.AccountSettings[acc.AccountId] = settings; + created++; } - if (migrated > 0) - _logger.Info($"Copytrading-Account-Settings: {migrated} Account(s) aus Alt-Feldern migriert."); - } - - private static decimal Dec(BsonDocument doc, string field, decimal fallback) - { - if (doc.TryGetValue(field, out var v)) - { - try { return v.ToDecimal(); } catch { } - } - return fallback; + if (created > 0) + _logger.Info($"Copytrading-Account-Settings: {created} Default-Eintrag/-Einträge angelegt."); } public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask; diff --git a/src/PolyTrader.Core/Configuration/DatabaseOptions.cs b/src/PolyTrader.Core/Configuration/DatabaseOptions.cs index 3f73504..7c074d1 100644 --- a/src/PolyTrader.Core/Configuration/DatabaseOptions.cs +++ b/src/PolyTrader.Core/Configuration/DatabaseOptions.cs @@ -8,15 +8,7 @@ namespace PolyTrader.Core.Configuration { public const string SectionName = "Database"; - /// "MySql" (Zielzustand) oder "Mongo" (Übergang/Config-Migration). - public string Provider { get; set; } = "MySql"; - /// MySQL-Connection-String (aus gitignorierter appsettings.Local.json). public string MySqlConnectionString { get; set; } = string.Empty; - - // --- MongoDB (nur noch für die einmalige Config-Migration nach MySQL) --- - public string ConnectionString { get; set; } = "mongodb://localhost:27017"; - - public string DatabaseName { get; set; } = "PolyTraderDB"; } } diff --git a/src/PolyTrader.Core/DependencyInjection/ServiceCollectionExtensions.cs b/src/PolyTrader.Core/DependencyInjection/ServiceCollectionExtensions.cs index 12e1f3c..e863b43 100644 --- a/src/PolyTrader.Core/DependencyInjection/ServiceCollectionExtensions.cs +++ b/src/PolyTrader.Core/DependencyInjection/ServiceCollectionExtensions.cs @@ -4,37 +4,25 @@ using Microsoft.Extensions.DependencyInjection; using PolyTrader.Core.Configuration; using PolyTrader.Core.Persistence; using PolyTrader.Core.Persistence.Ef; -using PolyTrader.Core.Persistence.Mongo; namespace PolyTrader.Core.DependencyInjection { public static class ServiceCollectionExtensions { /// - /// Registriert die Core-Persistenzschicht hinter den Repository-Interfaces. - /// Provider "MySql" -> EF Core (Pomelo) über einen DbContextFactory (thread-safe, - /// kurzlebiger Context je Operation). Provider "Mongo" -> Mongo-Implementierungen - /// (Übergang / Config-Migration). + /// Registriert die Core-Persistenzschicht (EF Core / Pomelo / MySQL) hinter den + /// Repository-Interfaces über einen DbContextFactory (thread-safe, kurzlebiger + /// Context je Operation). /// public static IServiceCollection AddCorePersistence(this IServiceCollection services, DatabaseOptions options) { - if (string.Equals(options.Provider, "MySql", StringComparison.OrdinalIgnoreCase)) - { - var conn = options.MySqlConnectionString; - services.AddDbContextFactory(o => o.UseMySql(conn, ServerVersion.AutoDetect(conn))); + var conn = options.MySqlConnectionString; + services.AddDbContextFactory(o => o.UseMySql(conn, ServerVersion.AutoDetect(conn))); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - } - else - { - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - } + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); return services; } diff --git a/src/PolyTrader.Core/Models/AccountState.cs b/src/PolyTrader.Core/Models/AccountState.cs index c1dd19f..6a29e0f 100644 --- a/src/PolyTrader.Core/Models/AccountState.cs +++ b/src/PolyTrader.Core/Models/AccountState.cs @@ -8,7 +8,7 @@ namespace PolyTraderSharp.Models public class AccountState { [Browsable(false)] - [MongoDB.Bson.Serialization.Attributes.BsonId] public int AccountId { get; set; } + public int AccountId { get; set; } [Category("01. General")] public string Name { get; set; } = string.Empty; diff --git a/src/PolyTrader.Core/Models/MarketData.cs b/src/PolyTrader.Core/Models/MarketData.cs index b9cefa9..74e6651 100644 --- a/src/PolyTrader.Core/Models/MarketData.cs +++ b/src/PolyTrader.Core/Models/MarketData.cs @@ -2,7 +2,7 @@ namespace PolyTraderSharp.Models { public class MarketData { - [MongoDB.Bson.Serialization.Attributes.BsonId] public string Id { get; set; } = string.Empty; + public string Id { get; set; } = string.Empty; public string ConditionId { get; set; } = string.Empty; public string Question { get; set; } = string.Empty; public string Slug { get; set; } = string.Empty; diff --git a/src/PolyTrader.Core/Models/Position.cs b/src/PolyTrader.Core/Models/Position.cs index 0bd4b5d..7765472 100644 --- a/src/PolyTrader.Core/Models/Position.cs +++ b/src/PolyTrader.Core/Models/Position.cs @@ -7,7 +7,6 @@ namespace PolyTraderSharp.Models public int AccountId { get; set; } public bool IsDemo { get; set; } - [MongoDB.Bson.Serialization.Attributes.BsonId] public string TokenId { get; set; } = string.Empty; public string MarketSlug { get; set; } = string.Empty; public string ConditionId { get; set; } = string.Empty; diff --git a/src/PolyTrader.Core/Models/TradeRecord.cs b/src/PolyTrader.Core/Models/TradeRecord.cs index 360fb3b..b7549f0 100644 --- a/src/PolyTrader.Core/Models/TradeRecord.cs +++ b/src/PolyTrader.Core/Models/TradeRecord.cs @@ -11,8 +11,7 @@ namespace PolyTraderSharp.Models /// public class TradeRecord { - [MongoDB.Bson.Serialization.Attributes.BsonId] - public string Id { get; set; } = MongoDB.Bson.ObjectId.GenerateNewId().ToString(); + public string Id { get; set; } = Guid.NewGuid().ToString("N"); /// Herkunftsmodul, z.B. "CopyTrading". public string ModuleName { get; set; } = string.Empty; diff --git a/src/PolyTrader.Core/Persistence/Mongo/MongoAccountRepository.cs b/src/PolyTrader.Core/Persistence/Mongo/MongoAccountRepository.cs deleted file mode 100644 index 5a66026..0000000 --- a/src/PolyTrader.Core/Persistence/Mongo/MongoAccountRepository.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using MongoDB.Driver; -using PolyTraderSharp.Models; - -namespace PolyTrader.Core.Persistence.Mongo -{ - public class MongoAccountRepository : IAccountRepository - { - private readonly IMongoCollection _col; - - public MongoAccountRepository(IMongoDatabase db) - { - _col = db.GetCollection("accounts"); - } - - public List GetAll() => _col.Find(_ => true).ToList(); - - public void Upsert(AccountState account) => - _col.ReplaceOne(x => x.AccountId == account.AccountId, account, new ReplaceOptions { IsUpsert = true }); - - public void Delete(int accountId) => _col.DeleteMany(x => x.AccountId == accountId); - } -} diff --git a/src/PolyTrader.Core/Persistence/Mongo/MongoMarketRepository.cs b/src/PolyTrader.Core/Persistence/Mongo/MongoMarketRepository.cs deleted file mode 100644 index 5fa67e1..0000000 --- a/src/PolyTrader.Core/Persistence/Mongo/MongoMarketRepository.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using MongoDB.Driver; -using PolyTraderSharp.Models; - -namespace PolyTrader.Core.Persistence.Mongo -{ - public class MongoMarketRepository : IMarketRepository - { - private readonly IMongoCollection _col; - - public MongoMarketRepository(IMongoDatabase db) - { - _col = db.GetCollection("markets"); - } - - public MarketData? GetById(string id) => _col.Find(x => x.Id == id).FirstOrDefault(); - - public MarketData? FindByTokenId(string tokenId) => - _col.Find(x => x.ClobTokenIds != null && x.ClobTokenIds.Contains(tokenId)).FirstOrDefault(); - - public List GetActive() => _col.Find(x => !x.Closed).ToList(); - - public void Upsert(MarketData market) => - _col.ReplaceOne(x => x.Id == market.Id, market, new ReplaceOptions { IsUpsert = true }); - - public void Insert(MarketData market) => _col.InsertOne(market); - - public void Update(MarketData market) => _col.ReplaceOne(x => x.Id == market.Id, market); - - public void EnsureIndexes() - { - try - { - var keys = Builders.IndexKeys.Ascending(x => x.Id); - _col.Indexes.CreateOne(new CreateIndexModel(keys)); - } - catch { } - } - } -} diff --git a/src/PolyTrader.Core/Persistence/Mongo/MongoPositionRepository.cs b/src/PolyTrader.Core/Persistence/Mongo/MongoPositionRepository.cs deleted file mode 100644 index 95ae92c..0000000 --- a/src/PolyTrader.Core/Persistence/Mongo/MongoPositionRepository.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using MongoDB.Driver; -using PolyTraderSharp.Models; - -namespace PolyTrader.Core.Persistence.Mongo -{ - public class MongoPositionRepository : IPositionRepository - { - private readonly IMongoDatabase _db; - - public MongoPositionRepository(IMongoDatabase db) - { - _db = db; - } - - private IMongoCollection Live(int accountId) => - _db.GetCollection($"open_positions_{accountId}"); - - private IMongoCollection Demo(int accountId) => - _db.GetCollection($"demo_positions_{accountId}"); - - public List GetLive(int accountId) => Live(accountId).Find(_ => true).ToList(); - public List GetDemo(int accountId) => Demo(accountId).Find(_ => true).ToList(); - - public Position? FindLive(int accountId, string tokenId) => - Live(accountId).Find(x => x.TokenId == tokenId).FirstOrDefault(); - - public Position? FindDemo(int accountId, string tokenId) => - Demo(accountId).Find(x => x.TokenId == tokenId).FirstOrDefault(); - - public void UpsertLive(int accountId, Position position) => - Live(accountId).ReplaceOne(x => x.TokenId == position.TokenId, position, new ReplaceOptions { IsUpsert = true }); - - public void UpsertDemo(int accountId, Position position) => - Demo(accountId).ReplaceOne(x => x.TokenId == position.TokenId, position, new ReplaceOptions { IsUpsert = true }); - - public void DeleteLive(int accountId, string tokenId) => - Live(accountId).DeleteOne(x => x.TokenId == tokenId); - - public void DeleteDemo(int accountId, string tokenId) => - Demo(accountId).DeleteOne(x => x.TokenId == tokenId); - - public void DropDemo(int accountId) => _db.DropCollection($"demo_positions_{accountId}"); - } -} diff --git a/src/PolyTrader.Core/Persistence/Mongo/MongoTradeLogRepository.cs b/src/PolyTrader.Core/Persistence/Mongo/MongoTradeLogRepository.cs deleted file mode 100644 index aeb93d7..0000000 --- a/src/PolyTrader.Core/Persistence/Mongo/MongoTradeLogRepository.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using MongoDB.Driver; -using PolyTraderSharp.Models; - -namespace PolyTrader.Core.Persistence.Mongo -{ - public class MongoTradeLogRepository : ITradeLogRepository - { - private readonly IMongoCollection _col; - - public MongoTradeLogRepository(IMongoDatabase db) - { - _col = db.GetCollection("trade_log"); - } - - public void EnsureIndexes() - { - try - { - _col.Indexes.CreateOne(new CreateIndexModel( - Builders.IndexKeys.Descending(x => x.ClosedAt))); - _col.Indexes.CreateOne(new CreateIndexModel( - Builders.IndexKeys.Ascending(x => x.ModuleName))); - _col.Indexes.CreateOne(new CreateIndexModel( - Builders.IndexKeys.Ascending(x => x.AccountId))); - } - catch { } - } - - public void Insert(TradeRecord record) => _col.InsertOne(record); - - public List GetRecent(int limit) => - _col.Find(_ => true).SortByDescending(x => x.ClosedAt).Limit(limit).ToList(); - - public List Find(Expression> predicate) => - _col.Find(predicate).ToList(); - } -} diff --git a/src/PolyTrader.Core/PolyTrader.Core.csproj b/src/PolyTrader.Core/PolyTrader.Core.csproj index 4845e9d..897d291 100644 --- a/src/PolyTrader.Core/PolyTrader.Core.csproj +++ b/src/PolyTrader.Core/PolyTrader.Core.csproj @@ -10,7 +10,6 @@ - all diff --git a/src/PolyTrader.Core/Services/MarketSyncService.cs b/src/PolyTrader.Core/Services/MarketSyncService.cs index 62f934b..deed3dc 100644 --- a/src/PolyTrader.Core/Services/MarketSyncService.cs +++ b/src/PolyTrader.Core/Services/MarketSyncService.cs @@ -2,7 +2,6 @@ using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; -using MongoDB.Driver; using PolyTrader.Core.Persistence; using PolyTraderSharp.Models; using PolyTraderSharp.Services; diff --git a/src/PolyTrader.Modules.CopyTrading/CopyTradingModule.cs b/src/PolyTrader.Modules.CopyTrading/CopyTradingModule.cs index ccd57ed..fcd9915 100644 --- a/src/PolyTrader.Modules.CopyTrading/CopyTradingModule.cs +++ b/src/PolyTrader.Modules.CopyTrading/CopyTradingModule.cs @@ -8,7 +8,6 @@ using Microsoft.Extensions.DependencyInjection; using PolyTrader.Core.Modularity; using PolyTrader.Modules.CopyTrading.Persistence; using PolyTrader.Modules.CopyTrading.Persistence.Ef; -using PolyTrader.Modules.CopyTrading.Persistence.Mongo; using PolyTraderSharp; using PolyTraderSharp.Models; using PolyTraderSharp.Services; @@ -37,25 +36,14 @@ namespace PolyTrader.Modules.CopyTrading services.AddSingleton(closedTradeChannel.Writer); services.AddSingleton(closedTradeChannel.Reader); - // Modul-Persistenz: Provider-Toggle (MySql via EF / Mongo im Übergang). - var provider = configuration["Database:Provider"] ?? "Mongo"; - if (string.Equals(provider, "MySql", StringComparison.OrdinalIgnoreCase)) - { - var conn = configuration["Database:MySqlConnectionString"] ?? string.Empty; - services.AddDbContextFactory(o => o.UseMySql(conn, ServerVersion.AutoDetect(conn))); + // Modul-Persistenz: EF Core / Pomelo / MySQL (thread-safer DbContextFactory). + var conn = configuration["Database:MySqlConnectionString"] ?? string.Empty; + services.AddDbContextFactory(o => o.UseMySql(conn, ServerVersion.AutoDetect(conn))); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - } - else - { - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - services.AddSingleton(); - } + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); + services.AddSingleton(); // Modul-Services (Signalquelle, Ausführung, Analytics) services.AddSingleton(); diff --git a/src/PolyTrader.Modules.CopyTrading/Models/ClosedTrade.cs b/src/PolyTrader.Modules.CopyTrading/Models/ClosedTrade.cs index 4dd9f71..ce0f987 100644 --- a/src/PolyTrader.Modules.CopyTrading/Models/ClosedTrade.cs +++ b/src/PolyTrader.Modules.CopyTrading/Models/ClosedTrade.cs @@ -2,7 +2,7 @@ namespace PolyTraderSharp.Models { public class ClosedTrade { - [MongoDB.Bson.Serialization.Attributes.BsonId] public int TradeId { get; set; } + public int TradeId { get; set; } public int AccountId { get; set; } public int SourceTraderId { get; set; } public bool IsDemo { get; set; } diff --git a/src/PolyTrader.Modules.CopyTrading/Models/CopyTradingAccountSettings.cs b/src/PolyTrader.Modules.CopyTrading/Models/CopyTradingAccountSettings.cs index 71a71bd..5f4a209 100644 --- a/src/PolyTrader.Modules.CopyTrading/Models/CopyTradingAccountSettings.cs +++ b/src/PolyTrader.Modules.CopyTrading/Models/CopyTradingAccountSettings.cs @@ -6,12 +6,11 @@ namespace PolyTraderSharp.Models /// Copytrading-spezifische Detail-Einstellungen je Account (Investment-/Zeit-Limits). /// Bewusst getrennt vom Core- (allgemeine Account-Daten): /// Diese Werte gehören dem Copytrading-Modul und werden im Modul-View bearbeitet. - /// Persistiert in der Collection "ct_account_settings" (BsonId = AccountId). + /// Persistiert in Tabelle "mod_copytrading_account_settings" (Key = AccountId). /// public class CopyTradingAccountSettings { [Browsable(false)] - [MongoDB.Bson.Serialization.Attributes.BsonId] public int AccountId { get; set; } [Category("01. Risk Management")] diff --git a/src/PolyTrader.Modules.CopyTrading/Models/MasterTraderHistoryRecord.cs b/src/PolyTrader.Modules.CopyTrading/Models/MasterTraderHistoryRecord.cs index 8f661b2..0e2a594 100644 --- a/src/PolyTrader.Modules.CopyTrading/Models/MasterTraderHistoryRecord.cs +++ b/src/PolyTrader.Modules.CopyTrading/Models/MasterTraderHistoryRecord.cs @@ -4,7 +4,7 @@ namespace PolyTraderSharp.Models { public class MasterTraderHistoryRecord { - [MongoDB.Bson.Serialization.Attributes.BsonId] public string Id { get; set; } = MongoDB.Bson.ObjectId.GenerateNewId().ToString(); + public string Id { get; set; } = Guid.NewGuid().ToString("N"); // Verknüpfung zum Master Trader public int TraderId { get; set; } diff --git a/src/PolyTrader.Modules.CopyTrading/Models/TrackedTrader.cs b/src/PolyTrader.Modules.CopyTrading/Models/TrackedTrader.cs index ce90d47..9b3ba69 100644 --- a/src/PolyTrader.Modules.CopyTrading/Models/TrackedTrader.cs +++ b/src/PolyTrader.Modules.CopyTrading/Models/TrackedTrader.cs @@ -7,7 +7,7 @@ namespace PolyTraderSharp.Models public class TrackedTrader { [Browsable(false)] - [MongoDB.Bson.Serialization.Attributes.BsonId] public int Id { get; set; } + public int Id { get; set; } [Category("01. Identification")] public string WalletAddress { get; set; } = string.Empty; diff --git a/src/PolyTrader.Modules.CopyTrading/Persistence/Mongo/MongoMasterTraderHistoryRepository.cs b/src/PolyTrader.Modules.CopyTrading/Persistence/Mongo/MongoMasterTraderHistoryRepository.cs deleted file mode 100644 index f39a3d5..0000000 --- a/src/PolyTrader.Modules.CopyTrading/Persistence/Mongo/MongoMasterTraderHistoryRepository.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using MongoDB.Driver; -using PolyTraderSharp.Models; - -namespace PolyTrader.Modules.CopyTrading.Persistence.Mongo -{ - public class MongoMasterTraderHistoryRepository : IMasterTraderHistoryRepository - { - private readonly IMongoCollection _col; - - public MongoMasterTraderHistoryRepository(IMongoDatabase db) - { - _col = db.GetCollection("mt_history"); - } - - public void EnsureIndexes() - { - try - { - _col.Indexes.CreateOne(new CreateIndexModel( - Builders.IndexKeys.Ascending(x => x.TraderId))); - _col.Indexes.CreateOne(new CreateIndexModel( - Builders.IndexKeys.Ascending(x => x.ClosedAt))); - } - catch { } - } - - public bool Exists(int traderId, string tokenId, DateTime windowStart, DateTime windowEnd) => - _col.Find(x => x.TraderId == traderId && x.TokenId == tokenId - && x.ClosedAt >= windowStart && x.ClosedAt <= windowEnd).Any(); - - public void Insert(MasterTraderHistoryRecord record) => _col.InsertOne(record); - - public List GetByTraderSince(int traderId, DateTime since) => - _col.Find(x => x.TraderId == traderId && x.ClosedAt >= since).ToList(); - } -} diff --git a/src/PolyTrader.Modules.CopyTrading/Persistence/Mongo/MongoTrackedTraderRepository.cs b/src/PolyTrader.Modules.CopyTrading/Persistence/Mongo/MongoTrackedTraderRepository.cs deleted file mode 100644 index f408956..0000000 --- a/src/PolyTrader.Modules.CopyTrading/Persistence/Mongo/MongoTrackedTraderRepository.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using MongoDB.Driver; -using PolyTraderSharp.Models; - -namespace PolyTrader.Modules.CopyTrading.Persistence.Mongo -{ - public class MongoTrackedTraderRepository : ITrackedTraderRepository - { - private readonly IMongoCollection _col; - - public MongoTrackedTraderRepository(IMongoDatabase db) - { - _col = db.GetCollection("trackers"); - } - - public List GetAll() => _col.Find(_ => true).ToList(); - - public void Upsert(TrackedTrader trader) => - _col.ReplaceOne(x => x.Id == trader.Id, trader, new ReplaceOptions { IsUpsert = true }); - - public void Update(TrackedTrader trader) => _col.ReplaceOne(x => x.Id == trader.Id, trader); - - public void Delete(int id) => _col.DeleteOne(x => x.Id == id); - } -} diff --git a/src/PolyTrader.Modules.CopyTrading/Persistence/MongoCopyTradeLogRepository.cs b/src/PolyTrader.Modules.CopyTrading/Persistence/MongoCopyTradeLogRepository.cs deleted file mode 100644 index 39e12c6..0000000 --- a/src/PolyTrader.Modules.CopyTrading/Persistence/MongoCopyTradeLogRepository.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Expressions; -using MongoDB.Driver; -using PolyTraderSharp.Models; - -namespace PolyTrader.Modules.CopyTrading.Persistence -{ - public class MongoCopyTradeLogRepository : ICopyTradeLogRepository - { - private readonly IMongoCollection _col; - - public MongoCopyTradeLogRepository(IMongoDatabase db) - { - _col = db.GetCollection("closed_trades"); - } - - public void EnsureIndexes() - { - CreateIndex(x => x.TradeId); - CreateIndex(x => x.AccountId); - CreateIndex(x => x.TokenId); - CreateIndex(x => x.SourceTraderId); - } - - private void CreateIndex(Expression> field) - { - try - { - var keys = Builders.IndexKeys.Ascending(field); - _col.Indexes.CreateOne(new CreateIndexModel(keys)); - } - catch { } - } - - public bool Exists(int accountId, string tokenId) => - _col.Find(x => x.AccountId == accountId && x.TokenId == tokenId).Any(); - - public void Insert(ClosedTrade trade) => _col.InsertOne(trade); - - public List Find(Expression> predicate) => - _col.Find(predicate).ToList(); - } -} diff --git a/src/PolyTrader.Modules.CopyTrading/Persistence/MongoCopyTradingAccountSettingsRepository.cs b/src/PolyTrader.Modules.CopyTrading/Persistence/MongoCopyTradingAccountSettingsRepository.cs deleted file mode 100644 index 44ffcdf..0000000 --- a/src/PolyTrader.Modules.CopyTrading/Persistence/MongoCopyTradingAccountSettingsRepository.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using MongoDB.Driver; -using PolyTraderSharp.Models; - -namespace PolyTrader.Modules.CopyTrading.Persistence -{ - public class MongoCopyTradingAccountSettingsRepository : ICopyTradingAccountSettingsRepository - { - private readonly IMongoCollection _col; - - public MongoCopyTradingAccountSettingsRepository(IMongoDatabase db) - { - _col = db.GetCollection("ct_account_settings"); - } - - public List GetAll() => _col.Find(_ => true).ToList(); - - public CopyTradingAccountSettings? Get(int accountId) => - _col.Find(x => x.AccountId == accountId).FirstOrDefault(); - - public void Upsert(CopyTradingAccountSettings settings) => - _col.ReplaceOne(x => x.AccountId == settings.AccountId, settings, new ReplaceOptions { IsUpsert = true }); - - public void Delete(int accountId) => _col.DeleteOne(x => x.AccountId == accountId); - } -} diff --git a/src/PolyTrader.Modules.CopyTrading/Services/CopyTradingEngine.cs b/src/PolyTrader.Modules.CopyTrading/Services/CopyTradingEngine.cs index bd7ac8a..eb30a0c 100644 --- a/src/PolyTrader.Modules.CopyTrading/Services/CopyTradingEngine.cs +++ b/src/PolyTrader.Modules.CopyTrading/Services/CopyTradingEngine.cs @@ -52,7 +52,7 @@ namespace PolyTraderSharp.Services public override async Task StartAsync(CancellationToken cancellationToken) { - _logger.Info("Starte Preload des MarketCache aus MongoDB um Flaschenhälse zu vermeiden..."); + _logger.Info("Starte Preload des MarketCache aus der Datenbank um Flaschenhälse zu vermeiden..."); { // Initialize cache for EVERYTHING in DB that is not closed! var activeMarkets = _marketRepo.GetActive();