跳到內容

板塊輪動

獲利了結、保留淨利幣,再把利潤放到正在領先、而且量能放大的板塊。報價來自 CoinMarketCap,CoinGecko 備援。

14 個板塊、一眼看出輪動7 日中位數對上量能,標出過熱、順勢與觀望。

先收回本金,再用利潤加碼自動算出賣多少、利潤池可撥多少,並記帳。

資料只留在你的裝置沒有帳號、沒有雲端;金鑰存在你的 Worker 或這個瀏覽器。

金鑰兩種放法擇一:填在這裡,會以明文存在這台裝置的瀏覽器,隨請求送到你的 Worker(共用電腦請用完在設定裡清除);或存成 Worker Secret(見下方步驟),這兩格留空,換裝置也不用再填。通行碼是中繼站設了 ACCESS_CODE 才需要,用來擋掉不知道通行碼的人用你的額度;每台裝置輸入一次。

Worker 設定步驟與程式碼
  1. Cloudflare 後台 → Workers & Pages → 你的 Worker → Edit code,把下方程式碼整段貼上,並把 ALLOW 改成你的網域(只要 https://帳號.github.io 這種,不含路徑)。
  2. 回到 Worker → Settings → Variables and Secrets → Add,類型選 Secret:名稱 CMC_KEY 填 CoinMarketCap 金鑰;再新增 CG_KEY 填 CoinGecko 金鑰。
  3. 按 Deploy。之後網頁只要填 Worker 網址就能用,換電腦也一樣。
// 金鑰優先用 Worker 的 Secret:CMC_KEY、CG_KEY(Settings → Variables and Secrets);沒設就用網頁送來的金鑰
const ALLOW = ["https://你的帳號.github.io"]; // 改成你的網域(不含路徑)
const ROUTES = {
  "/v2/cryptocurrency/quotes/latest": (env, h) => ["https://pro-api.coinmarketcap.com/v2/cryptocurrency/quotes/latest", { "X-CMC_PRO_API_KEY": env.CMC_KEY || h.get("X-CMC_PRO_API_KEY") || "" }],
  "/cg/coins/markets": (env, h) => ["https://api.coingecko.com/api/v3/coins/markets", { "x-cg-demo-api-key": env.CG_KEY || h.get("x-cg-demo-api-key") || "" }]
};
export default {
  async fetch(req, env) {
    const o = req.headers.get("Origin") || "";
    const cors = { "Access-Control-Allow-Origin": ALLOW.includes(o) ? o : ALLOW[0], "Access-Control-Allow-Methods": "GET, OPTIONS", "Access-Control-Allow-Headers": "X-CMC_PRO_API_KEY, x-cg-demo-api-key", "Vary": "Origin" };
    if (req.method === "OPTIONS") return new Response(null, { headers: cors });
    if (req.method !== "GET" || !ALLOW.includes(o)) return new Response("forbidden", { status: 403, headers: cors });
    const u = new URL(req.url), route = ROUTES[u.pathname];
    if (!route) return new Response("not allowed", { status: 404, headers: cors });
    const [target, auth] = route(env, req.headers);
    // 一定要帶 User-Agent,否則 CoinGecko 會回 403
    const r = await fetch(target + u.search, { headers: { ...auth, "Accept": "application/json", "User-Agent": "sector-rotation/1.0" } });
    return new Response(r.body, { status: r.status, headers: { ...cors, "Content-Type": "application/json" } });
  }
};
板塊輪動