一.【股票】通過交易數據通過程式碼判斷股票是否漲停
這裡所說的漲停是指通過每天前收盤價,當日收盤價來判斷,當然,如果打開股票交易軟體一個個看那是一目了然了,但現在我們是大數據時代,目前中國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在所難免,還請多多指教。。。