zoukankan      html  css  js  c++  java
  • 一.【股票】通过交易数据通过代码判断股票是否涨停

    这里所说的涨停是指通过每天前收盘价,当日收盘价来判断,当然,如果打开股票交易软件一个个看那是一目了然了,但现在我们是大数据时代,目前国内A股4000多只股票,批量数据操作,人工去看做登记还是挺费时间的。

    如果是前几年,创业板还是10%涨停,也没有科创板,所有股票都是10%涨停那就很好判断了。说是10%,但股票实际上精确到分,所以10%的涨停,往往无法取整。

    说到这里有可能有人会问这个判断意义何在?如果有此疑问,就需要慢慢读一读我下面的文章了。

    目前,有个开放的系统可以直接导出这些数据,但使用几天后发现这个是要收费了,仅是提供几天的免费使用时间,如果想继续使用,需要交年费(还是基础版)。本着“以经济建设为中心,坚持四项基本原则”。

    咱们还是尽量使用节能环保。再想想,一天就能赚几K。也是挺开心的。自已动手吧。。。

    第一步:定义股票市场类型 

    public enum MarketType
        {
            /// <summary>
            /// 未知
            /// </summary>
            [ListItem(0, "未知")]
            Unknow = 0,
            /// <summary>
            /// 上证
            /// </summary>
            [ListItem(1,"上证")]
            SH = 1,
            /// <summary>
            /// 深证
            /// </summary>
            [ListItem(2, "深证")]
            SZ = 2,
            /// <summary>
            /// 创业
            /// </summary>
            [ListItem(3, "创业")]
            CY = 3,
            /// <summary>
            /// 科创
            /// </summary>
            [ListItem(4, "科创")]
            KC = 4,
            /// <summary>
            /// 北京
            /// </summary>
            [ListItem(5, "北京")]
            BJ = 5,
            /// <summary>
            /// 香港
            /// </summary>
            [ListItem(6, "香港")]
            HK = 6
        }
    public class ListItemAttribute : Attribute
        {
            public string Text { get; set; }
            public string Text2 { get; set; }
            public int Value { get; set; }
            public ListItemAttribute(int value, string text)
            {
                Value = value;
                Text = text;
            }
    
            public ListItemAttribute(int value, string text, string text2) : this(value, text)
            {
                Text2 = text2;
            }
        }    
        /// <summary>
        /// 涨跌停类型
        /// </summary>
        public enum ZDT
        {
            /// <summary>
            /// 未知
            /// </summary>
            None = 0,
            /// <summary>
            /// 涨停
            /// </summary>
            HighLimit=1,
            /// <summary>
            /// 跌停
            /// </summary>
            LowLimit = 2
        }

    第二步 主要判断代码

        public class StockHelper
        {
            /// <summary>
            /// 判断股票是否涨停
            /// </summary>
            /// <param name="code">股票代码 如300065</param>
            /// <param name="preClosePrice">前收盘价</param>
            /// <param name="closePrice">添天收盘价</param>
            /// <returns></returns>
            public ZDT IsHighLimit(string code, float preClosePrice,float closePrice)
            {
                var type = GetMarketType(code);
                var result = ZDT.None;
                var hprice = 0d;
                var lprice = 0d;
                switch (type)
                {
                    case MarketType.CY:
                    case MarketType.KC:
                        hprice = Math.Round(preClosePrice * (1 + 0.20),2);
                        lprice = Math.Round(preClosePrice * (1 - 0.20),2);
                        if (hprice == closePrice)
                        {
                            result =  ZDT.HighLimit;
                        }
                        else if(lprice==closePrice)
                        {
                            result = ZDT.LowLimit;
                        }                        
                        else
                        {
                            result = ZDT.None;
                        }
                        break;
                    case MarketType.SH:
                    case MarketType.SZ:
                        hprice = Math.Round(preClosePrice * (1 + 0.10), 2);
                        lprice = Math.Round(preClosePrice * (1 - 0.10), 2);
                        if (hprice == closePrice)
                        {
                            result = ZDT.HighLimit;
                        }
                        else if (lprice == closePrice)
                        {
                            result = ZDT.LowLimit;
                        }
                        else
                        {
                            result = ZDT.None;
                        }
                        break;
                }
                return result;
            }
    
            /// <summary>
            /// 获取市场类型
            /// </summary>
            /// <param name="code">股票代码 如300065</param>
            /// <returns></returns>
            public static MarketType GetMarketType(string code)
            {
                var type = MarketType.Unknow;
                if (code.StartsWith("30"))
                {
                    type = MarketType.CY;
                }
                else if (code.StartsWith("60"))
                {
                    type = MarketType.SH;
                }
                else if (code.StartsWith("68"))
                {
                    type = MarketType.KC;
                }
                else if (code.StartsWith("00"))
                {
                    type = MarketType.SZ;
                }
                else
                {
                    type = MarketType.Unknow;
                }
                return type;
            }
        }

    本节代码比较简单,咱们就从简单的开始吧。。。

    本软件开始编码,还没正常运行调试,bug在所难免,还请多多指教。。。

  • 相关阅读:
    递归函数及Java范例
    笔记本的硬盘坏了
    “References to generic type List should be parameterized”
    配置管理软件(configuration management software)介绍
    WinCE文件目录定制及内存调整
    使用Silverlight for Embedded开发绚丽的界面(3)
    wince国际化语言支持
    Eclipse IDE for Java EE Developers 与Eclipse Classic 区别
    WinCE Heartbeat Message的实现
    使用Silverlight for Embedded开发绚丽的界面(2)
  • 原文地址:https://www.cnblogs.com/Sofeng/p/15463088.html
Copyright © 2011-2022 走看看