C#: SIMULAZIONE CURVA DEI PREZZI (RANDOM WALK)

using System;

using System.Drawing;

using System.Windows.Forms;


namespace WinFormsApp4

{

    public partial class Form1 : Form

    {

        private Panel panelGrafico;


        public Form1()

        {

            InitializeComponent();

            InitializeGrafico();

        }


        private void InitializeGrafico()

        {

            panelGrafico = new Panel();

            panelGrafico.Dock = DockStyle.Fill;

            Controls.Add(panelGrafico);

        }


        private void button1_Click(object sender, EventArgs e)

        {

            // Impostazioni per la serie storica

            int lunghezzaSerie = 50; // Lunghezza della serie storica 

            int valoreIniziale = 100; // Valore iniziale della random walk


            // Generazione dei dati per la serie storica

            Random random = new Random();

            double[] dati = new double[lunghezzaSerie];

            dati[0] = valoreIniziale; // Imposta il primo valore

            for (int i = 1; i < lunghezzaSerie; i++)

            {

                // Incremento casuale per la random walk

                int incremento = random.Next(-10, 11); // Incremento casuale compreso tra -10 e 10

                // Calcola il nuovo valore basato sul valore precedente e sull'incremento

                dati[i] = dati[i - 1] + incremento;

                // Assicura che il valore sia compreso tra 0 e 200

                dati[i] = Math.Max(0, Math.Min(200, dati[i]));

            }


            // Disegno del grafico

            panelGrafico.Paint += (s, args) =>

            {

                // Calcolo delle dimensioni del grafico

                int margineSinistro = 50;

                int margineDestro = 50;

                int margineSuperiore = 50;

                int margineInferiore = 50;

                int larghezzaGrafico = panelGrafico.Width - margineSinistro - margineDestro;

                int altezzaGrafico = panelGrafico.Height - margineSuperiore - margineInferiore;


                // Calcolo dello spazio tra ciascun punto lungo l'asse x

                float spazioPunti = (float)larghezzaGrafico / (lunghezzaSerie - 1);


                // Calcolo dello spazio tra i valori sull'asse y

                float spazioValoriY = 5;


                // Disegno dell'asse x

                args.Graphics.DrawLine(Pens.Black, margineSinistro, panelGrafico.Height - margineInferiore, panelGrafico.Width - margineDestro, panelGrafico.Height - margineInferiore);

                args.Graphics.DrawString("Mesi", DefaultFont, Brushes.Black, panelGrafico.Width - margineDestro - 30, panelGrafico.Height - margineInferiore + 10);


                // Disegno dell'asse y e dei valori

                for (int i = 0; i <= 200; i += 15)

                {

                    float y = panelGrafico.Height - margineInferiore - (i - 0) * (altezzaGrafico / (float)(200 - 0));

                    args.Graphics.DrawLine(Pens.Black, margineSinistro, y, margineSinistro - 5, y);

                    args.Graphics.DrawString(i.ToString(), DefaultFont, Brushes.Black, margineSinistro - 40, y - 7);

                }


                // Disegno della serie storica

                for (int i = 0; i < lunghezzaSerie - 1; i++)

                {

                    float x1 = margineSinistro + i * spazioPunti;

                    float y1 = panelGrafico.Height - margineInferiore - (float)((dati[i] - 0) / (200 - 0) * altezzaGrafico);

                    float x2 = margineSinistro + (i + 1) * spazioPunti;

                    float y2 = panelGrafico.Height - margineInferiore - (float)((dati[i + 1] - 0) / (200 - 0) * altezzaGrafico);


                    args.Graphics.DrawLine(Pens.Fuchsia, x1, y1, x2, y2);

                }

            };


            // Forza il ridisegno del pannello per visualizzare il grafico

            panelGrafico.Invalidate();

        }

    }


Output:



Post più popolari