[C# 程式交易 API] 取得指數期貨交易月份語法 (包含近月、季月)
在台灣的大型期貨商品,例如台指期貨、電子期貨等等,會提供 6 個交易月份在市場上交易,分別是交易當月起連續 3 個月份,再加上 3 月、6 月、9 月、12 月中 3 個接續季月契約。
以下畫面是群益贏家策略王的期貨商品,台指期的代碼是 TX,台指期的交易月份就有 6 個,
群益為了方便交易員選擇最近月份,特別增加了 TX00 指向最近的月份,其價格跟最近的月份是一樣的。
以下是富邦的期貨商品交易月份,每家券商月份表現的方式都不太一樣。
關於詳細交割月份公告可參考期交所交割月份調整公告。
在所有的交易月份中,愈近的月份,交易量愈大,反之,愈遠就會愈少,通常我們在交易期貨時,都是以最近月為主。
當要向券商交易期貨的時候,除了輸入商品代碼,還要另外輸入交易月份。
交易月份會隨著不同日期而改變。
月份最後交易日
月份最後交易日為各契約交割月份第 3 個星期三。
例如 2021 年 9 月的第 3 個星期三是 9/15,
在 9/15 之前的交易月份都是 9 月份。
當過了 9/15 的下午 3 點之後,交易月份就會改為 10 月份。
我們已經知道了期貨交易月份的規則。
如果要利用程式取得目前的交易月份,是需要經過計算的,
以下我會分享我的程式碼,利用程式算出最近的近月及季月月份。
C# 計算交易月份
這是我簡單設計的畫面,依目前的日期,去推算接續的近月,以及接續的季月。
程式碼
這是呼叫方法,顯示結果在畫面上。
我分別傳入 NearMonth1~3 及 NearSeason1~3 代表連續近月及季月。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// 目前日期 txtNowDatetime.Text = DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"); //連續近月1 txtNearMonth1.Text = this.GetFutureTradeMonth("NearMonth1"); //連續近月2 txtNearMonth2.Text = this.GetFutureTradeMonth("NearMonth2"); //連續近月3 txtNearMonth3.Text = this.GetFutureTradeMonth("NearMonth3"); // 接續季月1 txtNearSeason1.Text = this.GetFutureTradeMonth("NearSeason1"); // 接續季月2 txtNearSeason2.Text = this.GetFutureTradeMonth("NearSeason2"); // 接續季月3 txtNearSeason3.Text = this.GetFutureTradeMonth("NearSeason3"); |
取得期貨交易月份方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
/// <summary> /// 取得期貨交易月份 /// </summary> /// <param name="type"></param> /// <returns></returns> public string GetFutureTradeMonth(string type) { string yearMonth = ""; DateTime nowDate = DateTime.Now; // 目前年月 int year = Convert.ToInt32(nowDate.Year.ToString()); int month = nowDate.Month; //取得月份到期日(當月第3個星期三) // 本月第一天 DateTime monthExp = new DateTime(nowDate.Year, nowDate.Month, 1, 14, 0, 0); // 找到第一個星期三 while (monthExp.DayOfWeek != DayOfWeek.Wednesday) monthExp = monthExp.AddDays(1); monthExp = monthExp.AddDays(14); if (type == "NearMonth1" || type == "NearMonth2" || type == "NearMonth3" || type == "NearSeason1" || type == "NearSeason2" || type == "NearSeason3") { //連續近月1 if (nowDate > monthExp) { month += 1; if (month == 13) { month = 1; year = year + 1; } } } if (type == "NearMonth2" || type == "NearMonth3" || type == "NearSeason1" || type == "NearSeason2" || type == "NearSeason3") { //連續近月2 month += 1; if (month == 13) { month = 1; year = year + 1; } } if (type == "NearMonth3" || type == "NearSeason1" || type == "NearSeason2" || type == "NearSeason3") { //連續近月3 month += 1; if (month == 13) { month = 1; year = year + 1; } } if (type == "NearSeason1" || type == "NearSeason2" || type == "NearSeason3") { //接續季月1 // 檢查連續近月3是否剛好為季月 if (month == 3 || month == 6 || month == 9 || month == 12) { month = month + 3; if (month > 12) { month = 3; year = year + 1; } } else if (month == 1 || month == 2) { month = 3; } else if (month == 4 || month == 5) { month = 6; } else if (month == 7 || month == 8) { month = 9; } else if (month == 10 || month == 11) { month = 12; } } if (type == "NearSeason2" || type == "NearSeason3") { //接續季月2 month = month + 3; if (month > 12) { month = 3; year = year + 1; } } if (type == "NearSeason3") { //接續季月3 month = month + 3; if (month > 12) { month = 3; year = year + 1; } } // 組合年月 yearMonth = year + "-" + month.ToString("00"); return yearMonth; } |
重點整理
- 愈近的月份,交易量愈大
- 月份最後交易日為第 3 個星期三
- 程式需先算出是否已過當月最後交易日,才能算後續的月份
相關學習文章
如果你在學習上有不懂的地方,需要諮詢服務,可以參考站長服務,我想辨法解決你的問題
如果文章內容有過時、不適用或錯誤的地方,幫我在下方留言通知我一下,謝謝