Advertisement
Jimi2000

Binance Form

Mar 19th, 2021
1,954
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 18.27 KB | None | 0 0
  1. ' ----------------------------
  2. ' Form Code
  3. ' ----------------------------
  4.  
  5. Imports System.Data
  6. Imports System.Globalization
  7. Imports System.IO
  8. Imports Newtonsoft.Json
  9.  
  10. Public Class frmJsonToDatatTable
  11.  
  12.     Private binanceSource As BindingSource = Nothing
  13.     Private binanceData As DataTable = Nothing
  14.     Private jsonPath As String = Path.Combine(Application.CommonAppDataPath, "BinanceData.json")
  15.  
  16.     Public Sub New()
  17.         InitializeComponent()
  18.  
  19.         InitializeDataSource()
  20.         InitializeBinanceUI()
  21.     End Sub
  22.  
  23.     Private Sub InitializeDataSource()
  24.         If File.Exists(jsonPath) Then
  25.             Dim settings = New JsonSerializerSettings() With {
  26.                 .FloatParseHandling = FloatParseHandling.Decimal
  27.             }
  28.             Dim json = File.ReadAllText(jsonPath)
  29.             Dim dt = JsonConvert.DeserializeObject(Of DataTable)(json, settings)
  30.             If dt IsNot Nothing AndAlso dt.Columns.Count > 0 Then
  31.                 dt.Columns(0).AutoIncrement = True
  32.                 dt.Columns(0).AutoIncrementSeed = CType(dt.Rows(dt.Rows.Count - 1)("Index"), Long) + 1
  33.                 dt.Columns(0).AutoIncrementStep = 1
  34.                 binanceData = dt
  35.                 Return
  36.             End If
  37.         End If
  38.  
  39.         binanceData = New DataTable("BinanceData")
  40.         binanceData.Columns.Add(New DataColumn() With {
  41.             .DataType = GetType(Long),
  42.             .ColumnName = "Index",
  43.             .AutoIncrement = True,
  44.             .AutoIncrementSeed = 1,
  45.             .AutoIncrementStep = 1
  46.         })
  47.  
  48.         binanceData.Columns.Add("Date", GetType(Date))
  49.         binanceData.Columns.Add("Pair", GetType(String))
  50.         binanceData.Columns.Add("Type", GetType(String))
  51.         binanceData.Columns.Add("Side", GetType(String))
  52.  
  53.         binanceData.Columns.Add("Average", GetType(Decimal))
  54.         binanceData.Columns.Add("Price", GetType(Decimal))
  55.         binanceData.Columns.Add("Executed", GetType(Decimal))
  56.         binanceData.Columns.Add("Amount", GetType(Decimal))
  57.         binanceData.Columns.Add("Total", GetType(Decimal))
  58.     End Sub
  59.  
  60.     Private Sub InitializeBinanceUI()
  61.         AddHandler dgvBinance.CellFormatting, AddressOf dgvBinanceCellFormatting
  62.         binanceSource = New BindingSource(binanceData, "")
  63.         dgvBinance.DataSource = binanceSource
  64.         dgvBinance.Columns("Date").DefaultCellStyle.Format = "MM-dd H:mm:ss"
  65.         dgvBinance.Columns("Average").DefaultCellStyle.Format = "N5"
  66.         dgvBinance.Columns("Price").DefaultCellStyle.Format = "N5"
  67.         dgvBinance.Columns("Executed").DefaultCellStyle.Format = "N1"
  68.         dgvBinance.Columns("Amount").DefaultCellStyle.Format = "N1"
  69.         dgvBinance.Columns("Total").DefaultCellStyle.Format = "N5"
  70.     End Sub
  71.  
  72.     Private Function BinanceParseCopyData(input As String, dataSource As DataTable) As Integer
  73.         Dim culture = CultureInfo.InvariantCulture
  74.         input.Trim({ChrW(13), ChrW(10), ChrW(32)})
  75.  
  76.         Dim allData = input.Split({vbCrLf}, StringSplitOptions.RemoveEmptyEntries)
  77.         If allData.Length Mod 9 <> 0 Then
  78.             Throw New FormatException($"Unexpected Data Format. A Data Row must be composed of 9 Columns. Found {allData.Length}")
  79.         End If
  80.  
  81.         Dim rowsCount As Integer = 0
  82.         For pos As Integer = 0 To allData.Length - 1 Step 9
  83.             Dim row As Object() = New Object(9) {}
  84.             Array.Copy(allData, pos, row, 1, 9)
  85.             row(1) = Date.ParseExact(row(1).ToString().Trim(), "MM-dd H:mm:ss", culture)
  86.             row(2) = row(2).ToString().Trim()
  87.             row(3) = row(3).ToString().Trim()
  88.             row(4) = row(4).ToString().Trim()
  89.             row(5) = Decimal.Parse(row(5).ToString().Trim(), NumberStyles.AllowDecimalPoint Or NumberStyles.AllowThousands, culture)
  90.             row(6) = Decimal.Parse(row(6).ToString().Trim(), NumberStyles.AllowDecimalPoint Or NumberStyles.AllowThousands, culture)
  91.             row(7) = Decimal.Parse(row(7).ToString().Trim(), NumberStyles.AllowDecimalPoint Or NumberStyles.AllowThousands, culture)
  92.             row(8) = Decimal.Parse(row(8).ToString().Trim(), NumberStyles.AllowDecimalPoint Or NumberStyles.AllowThousands, culture)
  93.             row(9) = Decimal.Parse(row(9).ToString().Trim(), NumberStyles.AllowDecimalPoint Or NumberStyles.AllowThousands, culture)
  94.             dataSource.Rows.Add(row)
  95.             rowsCount += 1
  96.         Next
  97.         Return rowsCount
  98.     End Function
  99.  
  100.     Private Sub SaveBinanceDataTable()
  101.         Dim json As String = JsonConvert.SerializeObject(binanceData, Formatting.Indented)
  102.         File.WriteAllText(jsonPath, json)
  103.     End Sub
  104.  
  105.     Private Sub BinanceWebCopyToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles BinanceWebCopyToolStripMenuItem.Click
  106.         Dim sourceData = Clipboard.GetText(TextDataFormat.Text)
  107.         Dim rowsAdded = BinanceParseCopyData(sourceData, binanceData)
  108.     End Sub
  109.  
  110.     Private Sub dgvBinanceCellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs)
  111.         If e.Value Is Nothing OrElse dgvBinance.Columns(e.ColumnIndex).Name <> "Side" Then Return
  112.         e.CellStyle.ForeColor = If(e.Value.ToString().Equals("Buy"), Color.Green, Color.Red)
  113.     End Sub
  114.  
  115.     Private Sub frmJsonToDatatTable_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing
  116.         SaveBinanceDataTable()
  117.     End Sub
  118. End Class
  119.  
  120. ' ----------------------------
  121. ' Form Designer
  122. ' ----------------------------
  123.  
  124. <Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()>
  125. Partial Class frmJsonToDatatTable
  126.     Inherits System.Windows.Forms.Form
  127.  
  128.     <System.Diagnostics.DebuggerNonUserCode()>
  129.     Protected Overrides Sub Dispose(ByVal disposing As Boolean)
  130.         Try
  131.             If disposing AndAlso components IsNot Nothing Then
  132.                 components.Dispose()
  133.             End If
  134.         Finally
  135.             MyBase.Dispose(disposing)
  136.         End Try
  137.     End Sub
  138.  
  139.     Private components As System.ComponentModel.IContainer
  140.  
  141.     <System.Diagnostics.DebuggerStepThrough()>
  142.     Private Sub InitializeComponent()
  143.         Me.components = New System.ComponentModel.Container()
  144.         Dim DataGridViewCellStyle1 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
  145.         Dim DataGridViewCellStyle2 As System.Windows.Forms.DataGridViewCellStyle = New System.Windows.Forms.DataGridViewCellStyle()
  146.         Me.dgvBinance = New System.Windows.Forms.DataGridView()
  147.         Me.cmsDgv = New System.Windows.Forms.ContextMenuStrip(Me.components)
  148.         Me.CopyCurrentRowToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
  149.         Me.CopySelectedRowsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
  150.         Me.CopySelectedCellsToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
  151.         Me.PasteToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
  152.         Me.PasteSpecialToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
  153.         Me.ExcelGridToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
  154.         Me.ExcelRangeToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
  155.         Me.BinanceWebCopyToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
  156.         Me.PasteWithHeadersToolStripMenuItem = New System.Windows.Forms.ToolStripMenuItem()
  157.         CType(Me.dgvBinance, System.ComponentModel.ISupportInitialize).BeginInit()
  158.         Me.cmsDgv.SuspendLayout()
  159.         Me.SuspendLayout()
  160.         '
  161.         'dgvBinance
  162.         '
  163.         Me.dgvBinance.AllowUserToAddRows = False
  164.         Me.dgvBinance.AllowUserToDeleteRows = False
  165.         Me.dgvBinance.AllowUserToResizeRows = False
  166.         Me.dgvBinance.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.AllCells
  167.         Me.dgvBinance.BackgroundColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
  168.         Me.dgvBinance.ClipboardCopyMode = System.Windows.Forms.DataGridViewClipboardCopyMode.EnableWithoutHeaderText
  169.         Me.dgvBinance.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.None
  170.         DataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter
  171.         DataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
  172.         DataGridViewCellStyle1.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
  173.         DataGridViewCellStyle1.ForeColor = System.Drawing.Color.DarkGray
  174.         DataGridViewCellStyle1.SelectionBackColor = System.Drawing.Color.FromArgb(CType(CType(0, Byte), Integer), CType(CType(64, Byte), Integer), CType(CType(64, Byte), Integer))
  175.         DataGridViewCellStyle1.SelectionForeColor = System.Drawing.Color.White
  176.         DataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.[True]
  177.         Me.dgvBinance.ColumnHeadersDefaultCellStyle = DataGridViewCellStyle1
  178.         Me.dgvBinance.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize
  179.         Me.dgvBinance.ContextMenuStrip = Me.cmsDgv
  180.         DataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter
  181.         DataGridViewCellStyle2.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
  182.         DataGridViewCellStyle2.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
  183.         DataGridViewCellStyle2.ForeColor = System.Drawing.Color.White
  184.         DataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight
  185.         DataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText
  186.         DataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.[False]
  187.         Me.dgvBinance.DefaultCellStyle = DataGridViewCellStyle2
  188.         Me.dgvBinance.EnableHeadersVisualStyles = False
  189.         Me.dgvBinance.GridColor = System.Drawing.Color.FromArgb(CType(CType(42, Byte), Integer), CType(CType(42, Byte), Integer), CType(CType(42, Byte), Integer))
  190.         Me.dgvBinance.Location = New System.Drawing.Point(12, 25)
  191.         Me.dgvBinance.Name = "dgvBinance"
  192.         Me.dgvBinance.RowHeadersVisible = False
  193.         Me.dgvBinance.RowTemplate.DefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter
  194.         Me.dgvBinance.RowTemplate.DefaultCellStyle.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
  195.         Me.dgvBinance.RowTemplate.DefaultCellStyle.ForeColor = System.Drawing.Color.White
  196.         Me.dgvBinance.SelectionMode = System.Windows.Forms.DataGridViewSelectionMode.FullRowSelect
  197.         Me.dgvBinance.Size = New System.Drawing.Size(689, 266)
  198.         Me.dgvBinance.TabIndex = 2
  199.         '
  200.         'cmsDgv
  201.         '
  202.         Me.cmsDgv.Items.AddRange(New System.Windows.Forms.ToolStripItem() {Me.CopyCurrentRowToolStripMenuItem, Me.CopySelectedRowsToolStripMenuItem, Me.CopySelectedCellsToolStripMenuItem, Me.PasteToolStripMenuItem, Me.PasteSpecialToolStripMenuItem, Me.PasteWithHeadersToolStripMenuItem})
  203.         Me.cmsDgv.Name = "cmsDgv"
  204.         Me.cmsDgv.Size = New System.Drawing.Size(181, 136)
  205.         '
  206.         'CopyCurrentRowToolStripMenuItem
  207.         '
  208.         Me.CopyCurrentRowToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
  209.         Me.CopyCurrentRowToolStripMenuItem.ForeColor = System.Drawing.Color.White
  210.         Me.CopyCurrentRowToolStripMenuItem.Name = "CopyCurrentRowToolStripMenuItem"
  211.         Me.CopyCurrentRowToolStripMenuItem.Size = New System.Drawing.Size(180, 22)
  212.         Me.CopyCurrentRowToolStripMenuItem.Text = "Copy Current Row"
  213.         '
  214.         'CopySelectedRowsToolStripMenuItem
  215.         '
  216.         Me.CopySelectedRowsToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
  217.         Me.CopySelectedRowsToolStripMenuItem.ForeColor = System.Drawing.Color.White
  218.         Me.CopySelectedRowsToolStripMenuItem.Name = "CopySelectedRowsToolStripMenuItem"
  219.         Me.CopySelectedRowsToolStripMenuItem.Size = New System.Drawing.Size(180, 22)
  220.         Me.CopySelectedRowsToolStripMenuItem.Text = "Copy Selected Rows"
  221.         '
  222.         'CopySelectedCellsToolStripMenuItem
  223.         '
  224.         Me.CopySelectedCellsToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
  225.         Me.CopySelectedCellsToolStripMenuItem.ForeColor = System.Drawing.Color.White
  226.         Me.CopySelectedCellsToolStripMenuItem.Name = "CopySelectedCellsToolStripMenuItem"
  227.         Me.CopySelectedCellsToolStripMenuItem.Size = New System.Drawing.Size(180, 22)
  228.         Me.CopySelectedCellsToolStripMenuItem.Text = "Copy Selected Cells"
  229.         '
  230.         'PasteToolStripMenuItem
  231.         '
  232.         Me.PasteToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
  233.         Me.PasteToolStripMenuItem.ForeColor = System.Drawing.Color.White
  234.         Me.PasteToolStripMenuItem.Name = "PasteToolStripMenuItem"
  235.         Me.PasteToolStripMenuItem.Size = New System.Drawing.Size(180, 22)
  236.         Me.PasteToolStripMenuItem.Text = "Paste"
  237.         '
  238.         'PasteSpecialToolStripMenuItem
  239.         '
  240.         Me.PasteSpecialToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
  241.         Me.PasteSpecialToolStripMenuItem.DropDownItems.AddRange(New System.Windows.Forms.ToolStripItem() {Me.ExcelGridToolStripMenuItem, Me.ExcelRangeToolStripMenuItem, Me.BinanceWebCopyToolStripMenuItem})
  242.         Me.PasteSpecialToolStripMenuItem.ForeColor = System.Drawing.Color.White
  243.         Me.PasteSpecialToolStripMenuItem.Name = "PasteSpecialToolStripMenuItem"
  244.         Me.PasteSpecialToolStripMenuItem.Size = New System.Drawing.Size(180, 22)
  245.         Me.PasteSpecialToolStripMenuItem.Text = "Paste Special..."
  246.         '
  247.         'ExcelGridToolStripMenuItem
  248.         '
  249.         Me.ExcelGridToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
  250.         Me.ExcelGridToolStripMenuItem.ForeColor = System.Drawing.Color.White
  251.         Me.ExcelGridToolStripMenuItem.Name = "ExcelGridToolStripMenuItem"
  252.         Me.ExcelGridToolStripMenuItem.Size = New System.Drawing.Size(174, 22)
  253.         Me.ExcelGridToolStripMenuItem.Text = "Excel Grid"
  254.         '
  255.         'ExcelRangeToolStripMenuItem
  256.         '
  257.         Me.ExcelRangeToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
  258.         Me.ExcelRangeToolStripMenuItem.ForeColor = System.Drawing.Color.White
  259.         Me.ExcelRangeToolStripMenuItem.Name = "ExcelRangeToolStripMenuItem"
  260.         Me.ExcelRangeToolStripMenuItem.Size = New System.Drawing.Size(174, 22)
  261.         Me.ExcelRangeToolStripMenuItem.Text = "Excel Range"
  262.         '
  263.         'BinanceWebCopyToolStripMenuItem
  264.         '
  265.         Me.BinanceWebCopyToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
  266.         Me.BinanceWebCopyToolStripMenuItem.ForeColor = System.Drawing.Color.White
  267.         Me.BinanceWebCopyToolStripMenuItem.Name = "BinanceWebCopyToolStripMenuItem"
  268.         Me.BinanceWebCopyToolStripMenuItem.Size = New System.Drawing.Size(174, 22)
  269.         Me.BinanceWebCopyToolStripMenuItem.Text = "Binance Web Copy"
  270.         '
  271.         'PasteWithHeadersToolStripMenuItem
  272.         '
  273.         Me.PasteWithHeadersToolStripMenuItem.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
  274.         Me.PasteWithHeadersToolStripMenuItem.ForeColor = System.Drawing.Color.White
  275.         Me.PasteWithHeadersToolStripMenuItem.Name = "PasteWithHeadersToolStripMenuItem"
  276.         Me.PasteWithHeadersToolStripMenuItem.Size = New System.Drawing.Size(180, 22)
  277.         Me.PasteWithHeadersToolStripMenuItem.Text = "Paste Auto Headers"
  278.         '
  279.         'frmJsonToDatatTable
  280.         '
  281.         Me.AutoScaleDimensions = New System.Drawing.SizeF(96.0!, 96.0!)
  282.         Me.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Dpi
  283.         Me.BackColor = System.Drawing.Color.FromArgb(CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer), CType(CType(32, Byte), Integer))
  284.         Me.ClientSize = New System.Drawing.Size(713, 354)
  285.         Me.Controls.Add(Me.dgvBinance)
  286.         Me.Font = New System.Drawing.Font("Segoe UI", 9.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
  287.         Me.ForeColor = System.Drawing.Color.White
  288.         Me.Name = "frmJsonToDatatTable"
  289.         Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen
  290.         Me.Text = "frmJsonToDatatTable"
  291.         CType(Me.dgvBinance, System.ComponentModel.ISupportInitialize).EndInit()
  292.         Me.cmsDgv.ResumeLayout(False)
  293.         Me.ResumeLayout(False)
  294.  
  295.     End Sub
  296.  
  297.     Friend WithEvents dgvBinance As DataGridView
  298.     Friend WithEvents cmsDgv As ContextMenuStrip
  299.     Friend WithEvents CopyCurrentRowToolStripMenuItem As ToolStripMenuItem
  300.     Friend WithEvents CopySelectedRowsToolStripMenuItem As ToolStripMenuItem
  301.     Friend WithEvents CopySelectedCellsToolStripMenuItem As ToolStripMenuItem
  302.     Friend WithEvents PasteToolStripMenuItem As ToolStripMenuItem
  303.     Friend WithEvents PasteSpecialToolStripMenuItem As ToolStripMenuItem
  304.     Friend WithEvents ExcelGridToolStripMenuItem As ToolStripMenuItem
  305.     Friend WithEvents ExcelRangeToolStripMenuItem As ToolStripMenuItem
  306.     Friend WithEvents BinanceWebCopyToolStripMenuItem As ToolStripMenuItem
  307.     Friend WithEvents PasteWithHeadersToolStripMenuItem As ToolStripMenuItem
  308. End Class
  309.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement