コード例 #1
0
        private void button1_Click(object sender, EventArgs e)
        {
            MarketGuess day = GetMarketGuess(searchBox.Text, days);

            PopulateChart(day);
            chart1.Refresh();
        }
コード例 #2
0
        public MainCandleStick()
        {
            InitializeComponent();

            Console.WriteLine("Wait...");

            Console.WriteLine("Leave empty for random stock or enter a ticker and date 'TICKER YYYY-MM-DD'");
            Console.Write("Search:");
            string search = Console.ReadLine();



            MarketGuess day = GetMarketGuess(search, days);

            chart1.MouseMove      += chart1_MouseMove;
            tooltip.AutomaticDelay = 10;

            PopulateChart(day);

            var firstGroup = days.GroupBy(x => x.FirstVolume.VolumeClass);

            foreach (var iter in firstGroup)
            {
                var secondGroup = iter.GroupBy(x => x.SecondVolume.VolumeClass);
                foreach (var iter2 in secondGroup)
                {
                    VolumeShortLong v = new VolumeShortLong(iter2.OrderBy(x => x.FirstVolume.Volume).ThenBy(x => x.SecondVolume.Volume).ToList());
                    v.Text = $"{iter.Key}-{iter2.Key}";
                    v.Show();
                }
            }
        }
コード例 #3
0
        public Form1()
        {
            InitializeComponent();
            testLog.AutoFlush = true;

            day = GetMarketGuess("", days);

            chart1.MouseMove      += chart1_MouseMove;
            tooltip.AutomaticDelay = 10;
        }
コード例 #4
0
        private void newButton_Click(object sender, EventArgs e)
        {
            count    = 1;
            buyPoint = null;
            profit   = 0;

            rakeInButton.Enabled  = false;
            goLongButton.Enabled  = true;
            shortButton.Enabled   = true;
            noTouchButton.Enabled = true;

            day = GetMarketGuess("", days);
            PopulateChart(day);
        }
コード例 #5
0
        static MarketGuess GetMarketGuess(string search, List <MarketGuess> days)
        {
            Random      rand = new Random();
            MarketGuess day;

            if (search == "")
            {
                var shortList = days.Where(x => x.MarketDay.DataPoints.Count > 20 && x.FirstVolume.VolumeClass != VolumeClass.veryLow && x.SecondVolume.VolumeClass != VolumeClass.veryLow).ToList();
                int index     = rand.Next(0, shortList.Count);
                day = shortList[index];
            }
            else
            {
                string[] splitSearch = search.Split(' ');

                day =
                    days.FirstOrDefault(
                        x => x.MarketDay.Ticker == splitSearch[0].ToUpper() && x.MarketDay.DateTime == DateTime.Parse(splitSearch[1]));
            }
            return(day);
        }
コード例 #6
0
        void PopulateChart(MarketGuess day)
        {
            chart1.ChartAreas["VolumeArea"].AlignWithChartArea   = "PriceArea";
            chart1.ChartAreas["VolumeArea"].AlignmentOrientation = AreaAlignmentOrientations.Vertical;
            chart1.ChartAreas["VolumeArea"].AlignmentStyle       = AreaAlignmentStyles.All;

            chart1.Titles["TitleStockDetails"].Text = day.ToString();

            chart1.Series["Hloc5Min"].ChartType = SeriesChartType.Candlestick;
            chart1.Series["Hloc5Min"].Points.Clear();

            chart1.ChartAreas["PriceArea"].AxisY.Minimum  = day.MarketDay.Low * 0.999;
            chart1.ChartAreas["PriceArea"].AxisY.Maximum  = day.MarketDay.High * 1.001;
            chart1.ChartAreas["PriceArea"].AxisY2.Minimum = (day.MarketDay.Low / day.BuyPrice - 1);
            chart1.ChartAreas["PriceArea"].AxisY2.Maximum = (day.MarketDay.High / day.BuyPrice - 1);
            chart1.ChartAreas["PriceArea"].AxisX.Minimum  = day.ToOA(9, 30);
            chart1.ChartAreas["PriceArea"].AxisX.Maximum  = day.ToOA(16, 10);
            chart1.ChartAreas["VolumeArea"].AxisX.Minimum = day.ToOA(9, 30);
            chart1.ChartAreas["VolumeArea"].AxisX.Maximum = day.ToOA(16, 10);


            foreach (Series series in chart1.Series)
            {
                series.Points.Clear();
            }

            Console.WriteLine(day.MarketDay.ToStringNice());

            chart1.Series["LocalHL"].Points.Add(new DataPoint(day.ToOA(9, 30), new [] { day.LocalHigh, day.LocalLow }));
            chart1.Series["LocalHL"].Points.Add(new DataPoint(day.ToOA(10, 30), new [] { day.LocalHigh, day.LocalLow }));

            chart1.Series["HighBound"].Points.Add(new DataPoint(day.ToOA(9, 30), day.HighBound));
            chart1.Series["HighBound"].Points.Add(new DataPoint(day.ToOA(10, 30), day.HighBound));

            chart1.Series["LowBound"].Points.Add(new DataPoint(day.ToOA(9, 30), day.LowBound));
            chart1.Series["LowBound"].Points.Add(new DataPoint(day.ToOA(10, 30), day.LowBound));

            chart1.Series["BuyPrice"].Points.Add(new DataPoint(day.ToOA(9, 30), day.BuyPrice));
            chart1.Series["BuyPrice"].Points.Add(new DataPoint(day.ToOA(10, 30), day.BuyPrice));

            chart1.Series["GapLine"].Points.Add(new DataPoint(day.ToOA(9, 30), day.MarketDay.Open / day.MarketDay.Gap));
            chart1.Series["GapLine"].Points.Add(new DataPoint(day.ToOA(16, 10), day.MarketDay.Open / day.MarketDay.Gap));

            chart1.Series["ProfitMargin"].Points.Add(new DataPoint(day.ToOA(10, 30), new[] { day.BuyPrice *(1 - MarketGuess.profit), day.BuyPrice * (1 + MarketGuess.profit) }));
            chart1.Series["ProfitMargin"].Points.Add(new DataPoint(day.ToOA(16, 10), new[] { day.BuyPrice *(1 - MarketGuess.profit), day.BuyPrice * (1 + MarketGuess.profit) }));

            foreach (DataPoint dataPoint in chart1.Series["ProfitMargin"].Points)
            {
                dataPoint.Color = Color.FromArgb(40, dataPoint.Color);
            }

            foreach (DataPoint dataPoint in chart1.Series["LocalHL"].Points)
            {
                dataPoint.Color = Color.FromArgb(40, dataPoint.Color);
            }

            foreach (MarketDataPoint marketDataPoint in day.LongPoints)
            {
                chart1.Series["LongPoints"].Points.Add(new DataPoint(marketDataPoint.DateTime.ToOADate(), marketDataPoint.High));
            }

            foreach (MarketDataPoint marketDataPoint in day.ShortPoints)
            {
                chart1.Series["ShortPoints"].Points.Add(new DataPoint(marketDataPoint.DateTime.ToOADate(), marketDataPoint.Low));
            }

            foreach (MarketDataPoint marketDataPoint in day.MarketDay.DataPoints)
            {
                chart1.Series["Hloc5Min"].Points.Add(
                    new DataPoint(
                        marketDataPoint.DateTime.ToOADate(),
                        new[] { marketDataPoint.High, marketDataPoint.Low, marketDataPoint.Open, marketDataPoint.Close }));

                chart1.Series["Volume5Min"].Points.Add(new DataPoint(marketDataPoint.DateTime.ToOADate(), (double)marketDataPoint.Volume / 5));
            }
        }
コード例 #7
0
        void PopulateChart(MarketGuess day)
        {
            foreach (Series series in chart1.Series)
            {
                series.Points.Clear();
            }

            //Console.WriteLine(day.MarketDay.ToStringNice());

            //chart1.Series["LocalHL"].Points.Add(new DataPoint(day.ToOA(9, 30), new []{day.LocalHigh, day.LocalLow}));
            //chart1.Series["LocalHL"].Points.Add(new DataPoint(day.ToOA(10, 30), new []{day.LocalHigh, day.LocalLow}));

            chart1.Series["HighBound"].Points.Add(new DataPoint(day.ToOA(9, 30), lh * 0.99));
            chart1.Series["HighBound"].Points.Add(new DataPoint(day.ToOA(10, 30), lh * 0.99));

            chart1.Series["LowBound"].Points.Add(new DataPoint(day.ToOA(9, 30), ll * 1.01));
            chart1.Series["LowBound"].Points.Add(new DataPoint(day.ToOA(10, 30), ll * 1.01));

            if (buyPoint != null)
            {
                chart1.Series["BuyPrice"].Points.Add(new DataPoint(buyPoint.DateTime.ToOADate(), buyPoint.Close));
                chart1.Series["BuyPrice"].Points.Add(new DataPoint(day.ToOA(16, 30), buyPoint.Close));
            }
            if (sellPoint != null)
            {
                chart1.Series["SellPrice"].Points.Add(new DataPoint(sellPoint.DateTime.ToOADate(), sellPoint.Close));
                chart1.Series["SellPrice"].Points.Add(new DataPoint(day.ToOA(16, 30), sellPoint.Close));
            }

            chart1.Series["GapLine"].Points.Add(new DataPoint(day.ToOA(9, 30), day.MarketDay.Open / day.MarketDay.Gap));
            chart1.Series["GapLine"].Points.Add(new DataPoint(day.ToOA(16, 10), day.MarketDay.Open / day.MarketDay.Gap));

            //chart1.Series["ProfitMargin"].Points.Add(new DataPoint(day.ToOA(10, 30), new[] { day.BuyPrice * (1 - MarketGuess.profit), day.BuyPrice * (1 + MarketGuess.profit) }));
            //chart1.Series["ProfitMargin"].Points.Add(new DataPoint(day.ToOA(16, 10), new[] { day.BuyPrice * (1 - MarketGuess.profit), day.BuyPrice * (1 + MarketGuess.profit) }));

            volAvg = 0;
            ll     = 999999;
            lh     = 0;
            for (int i = 0; i < count; i++)
            {
                //chart1.Series["ProfitMargin"].Points[i].Color = Color.FromArgb(40, chart1.Series["ProfitMargin"].Points[i].Color);
                //chart1.Series["LongPoints"].Points.Add(new DataPoint(day.LongPoints[i].DateTime.ToOADate(), day.LongPoints[i].High));
                //chart1.Series["ShortPoints"].Points.Add(new DataPoint(day.ShortPoints[i].DateTime.ToOADate(), day.ShortPoints[i].Low));
                chart1.Series["Hloc5Min"].Points.Add(
                    new DataPoint(
                        day.MarketDay.DataPoints[i].DateTime.ToOADate(),
                        new[] { day.MarketDay.DataPoints[i].High, day.MarketDay.DataPoints[i].Low, day.MarketDay.DataPoints[i].Open, day.MarketDay.DataPoints[i].Close }));

                chart1.Series["Volume5Min"].Points.Add(new DataPoint(day.MarketDay.DataPoints[i].DateTime.ToOADate(), (double)day.MarketDay.DataPoints[i].Volume / 5));

                volAvg += (double)day.MarketDay.DataPoints[i].Volume / 5;
                ll      = (day.MarketDay.DataPoints[i].Low < ll) ? day.MarketDay.DataPoints[i].Low : ll;
                lh      = (day.MarketDay.DataPoints[i].High > lh) ? day.MarketDay.DataPoints[i].High : lh;
            }
            volAvg /= count;

            if (buyPoint != null)
            {
                if (goingLong)
                {
                    profit = 1 - (buyPoint.Close / day.MarketDay.DataPoints[count - 1].Close);
                }
                else
                {
                    profit = (buyPoint.Close / day.MarketDay.DataPoints[count - 1].Close) - 1;
                }
            }


            chart1.ChartAreas["VolumeArea"].AlignWithChartArea   = "PriceArea";
            chart1.ChartAreas["VolumeArea"].AlignmentOrientation = AreaAlignmentOrientations.Vertical;
            chart1.ChartAreas["VolumeArea"].AlignmentStyle       = AreaAlignmentStyles.All;

            chart1.Titles["TitleStockDetails"].Text = $"Time:{day.MarketDay.DataPoints[count-1].DateTime.ToString("t")}\n" +
                                                      $"Current:{day.MarketDay.DataPoints[count-1].Close}\n" +
                                                      $"VolAvg:{volAvg}\n" +
                                                      $"Profit:{profit}";

            chart1.Series["Hloc5Min"].ChartType = SeriesChartType.Candlestick;
            //chart1.Series["Hloc5Min"].Points.Clear();

            chart1.ChartAreas["PriceArea"].AxisY.Minimum  = ll;
            chart1.ChartAreas["PriceArea"].AxisY.Maximum  = lh;
            chart1.ChartAreas["PriceArea"].AxisY2.Minimum = ll / lh;
            chart1.ChartAreas["PriceArea"].AxisY2.Maximum = 1;
            chart1.ChartAreas["PriceArea"].AxisX.Minimum  = day.ToOA(9, 30);
            chart1.ChartAreas["PriceArea"].AxisX.Maximum  = day.ToOA(16, 10);
            chart1.ChartAreas["VolumeArea"].AxisX.Minimum = day.ToOA(9, 30);
            chart1.ChartAreas["VolumeArea"].AxisX.Maximum = day.ToOA(16, 10);


            chart1.Refresh();
        }