15/09/2026
真的很容易忘記轉倉🤣
給忙碌人專用的「期貨轉倉提醒器」
期貨轉倉這件事,最怕的不是不懂。
最怕的是知道要做,但忙一忙就忘了。
尤其台指期、小台、微台這類商品,每個月都會遇到到期結算。如果有留倉習慣,快到期前通常就要開始留意要不要換到下一個月份。
以前這件事很多人是靠行事曆、靠記事本,或是靠自己每天記得看。
但我個人覺得,這種固定會發生、又很怕漏掉的事情,其實就很適合交給 XQ 的警示中心。
我今天試著寫了一個「期貨轉倉提醒」的警示腳本。
邏輯很單純:
1. 先抓目前商品的到期日
2. 計算距離到期還剩幾天
3. 如果進入自己設定的提醒天數,就跳出警示
4. 同一天只提醒一次,避免盤中一直洗版
這支腳本我多留了一個設定:
天數可以選「交易日」或「日曆天」。
這兩個差很多。
例如到期日是週三,今天是上週五。
如果用日曆天算,中間六日也算進去,看起來還有 5 天。
但如果用交易日算,真正能交易的時間其實只剩週一、週二、週三,大概就是 3 個交易日。
做期貨轉倉,我自己會比較傾向用交易日。
另外,提醒方式也可以選兩種:
1. 進入倒數後每天提醒
2. 只在剛好剩 N 天那天提醒一次
怕忘記的人,可以用每天提醒。
怕吵的人,就用只提醒一次。
腳本如下:
// ------------------------------
// 1. 變數宣告區
// ------------------------------
input:
_DaysBefore(3, "到期前幾天開始提醒", Quickedit:=True),
// 天數口徑:兩種算法差很多。
// 例:到期日是週三、今天是上週五 —— 交易日算只剩 3 天(一、二、三),
// 日曆天算是 5 天(六、日也算進去)。做期貨轉倉建議用交易日。
_CountMode(1, "天數怎麼算",
InputKind:=Dict(["用交易日算(不含假日)", 1], ["用日曆天算(含假日)", 2])),
// 提醒方式:怕漏掉就用每天提醒;怕吵就用只提醒一次。
_RemindMode(1, "提醒方式",
InputKind:=Dict(["進入倒數後每天提醒", 1], ["只在剛好剩N天那天提醒一次", 2]));
var:
_ExpireDate(0), // 商品到期日,格式是西元年月日(例:20260819)
_DaysLeft(0), // 距離到期還剩幾天
_CalendarLeft(0), // 日曆天口徑的剩餘天數(同時當作防呆的對照值)
_UnitName(""), // 天數單位的中文說法("個交易日" 或 "天")
_Hit(0); // 這一根 K 棒是否符合提醒條件:1=符合
// 一天只提醒一次的記號。
// ?? 這裡必須加 intrabarpersist:雷達盤中是逐筆洗價,每來一筆成交就重跑一次腳本。
// 沒加的話這個記號在同一根 K 棒內會被洗掉、記不住「今天已經提醒過了」,
// 結果就是整個盤中每成交一筆就跳一次提醒。
var: intrabarpersist _LastAlertDate(0);
// ------------------------------
// 2. 邏輯判斷區
// ------------------------------
// A. 只在最新的那一根 K 棒上判斷
// 雷達掛上去的時候會把歷史 K 棒整段重跑一遍,而「到期日 / 剩餘交易日」抓的是
// 商品「現在」的狀態、不會跟著歷史 K 棒往回退。不擋的話每一根歷史 K 棒都會成立,
// 一啟動就噴出上百則提醒。
if IsLastBar = false then return;
// B. 取得這檔商品的到期日
// 股票、指數這類沒有到期日的商品會取到 0,直接結束、不提醒。
_ExpireDate = GetSymbolInfo("到期日");
if _ExpireDate