using Microsoft.DotNet.Interactive.Formatting; using System.ComponentModel.DataAnnotations; using System.Text; namespace QuanTAlib; public static class Formatters { const string smallfont = "smaller"; const string pad = "18"; public static void Initialize() { Formatter.Register((tick, writer) => { var sb = new StringBuilder(); sb.Append(""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append("
{tick.Time:yyyy-MM-dd HH:mm:ss}{tick.Value:F2}{(tick.IsHot ? "🔥" : "❄️")}
"); writer.Write(sb.ToString()); }, HtmlFormatter.MimeType); Formatter.Register((series, writer) => { var sb = new StringBuilder(); sb.Append(""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append(""); for (int i = 0; i < Math.Min(100, series.Count); i++) { TValue item = series[i]; sb.Append(""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append(""); } sb.Append("
{series.Name}IndexValue
{item.Time:yyyy-MM-dd HH:mm:ss}{i}{item.Value:F2}{(item.IsHot ? "🔥" : "❄️")}
"); if (series.Count > 100) { sb.Append("

Showing first 100 items. Total items: " + series.Count + "

"); } writer.Write(sb.ToString()); }, HtmlFormatter.MimeType); Formatter.Register((bar, writer) => { var sb = new StringBuilder(); sb.Append(""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append("
{bar.Time:yyyy-MM-dd HH:mm:ss}{bar.Open:F2}{bar.High:F2}{bar.Low:F2}{bar.Close:F2} {bar.Volume:F2}
"); writer.Write(sb.ToString()); }, HtmlFormatter.MimeType); Formatter.Register((series, writer) => { var sb = new StringBuilder(); sb.Append(""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append(""); for (int i = 0; i < Math.Min(100, series.Count); i++) { TBar item = series[i]; sb.Append(""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append($""); sb.Append(""); } sb.Append("
{series.Name}IndexOpenHighLowCloseVolume
{item.Time:yyyy-MM-dd HH:mm:ss}{i}{item.Open:F2}{item.High:F2}{item.Low:F2}{item.Close:F2}{item.Volume:F2}
"); if (series.Count > 100) { sb.Append("

Showing first 100 items. Total items: " + series.Count + "

"); } writer.Write(sb.ToString()); }, HtmlFormatter.MimeType); } }