一.【股票】通過交易數據通過程式碼判斷股票是否漲停

這裡所說的漲停是指通過每天前收盤價,當日收盤價來判斷,當然,如果打開股票交易軟體一個個看那是一目了然了,但現在我們是大數據時代,目前中國A股4000多隻股票,批量數據操作,人工去看做登記還是挺費時間的。

如果是前幾年,創業板還是10%漲停,也沒有科創板,所有股票都都是10%漲停那就很好判斷了。說是10%,但股票實際上精確到分,所以10%的漲停,往往無法取整。

說到這裡有可能有人會問這個判斷意義何在?如果有此疑問,就需要慢慢讀一讀我下面的文章了。

目前,東方財富(choice金融終端)有個開放的系統可以直接導出這些數據,但使用幾天後發現這個是要收費了,僅是提供幾天的免費使用時間,如果想繼續使用,需要交年費5800元(還是基礎版)。本著「以經濟建設為中心,堅持四項基本原則」。

咱們還是盡量使用節能環保。再想想,一天就能賺5800元。也是挺開心的。自已動手吧。。。

第一步:定義股票市場類型 

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在所難免,還請多多指教。。。