獲利了結、保留淨利幣,再把利潤放到正在領先、而且量能放大的板塊。報價來自 CoinMarketCap,CoinGecko 備援。
14 個板塊、一眼看出輪動7 日中位數對上量能,標出過熱、順勢與觀望。
先收回本金,再用利潤加碼自動算出賣多少、利潤池可撥多少,並記帳。
資料只留在你的裝置沒有帳號、沒有雲端;金鑰存在你的 Worker 或這個瀏覽器。
金鑰兩種放法擇一:填在這裡,會以明文存在這台裝置的瀏覽器,隨請求送到你的 Worker(共用電腦請用完在設定裡清除);或存成 Worker Secret(見下方步驟),這兩格留空,換裝置也不用再填。通行碼是中繼站設了 ACCESS_CODE 才需要,用來擋掉不知道通行碼的人用你的額度;每台裝置輸入一次。
ALLOW 改成你的網域(只要 https://帳號.github.io 這種,不含路徑)。CMC_KEY 填 CoinMarketCap 金鑰;再新增 CG_KEY 填 CoinGecko 金鑰。// 金鑰優先用 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" } });
}
};