feat: 在文档中添加 CLI 参数说明,支持通过命令行临时指定交易所

This commit is contained in:
discountry
2025-10-03 03:16:44 +08:00
parent 9a419c36ac
commit b43eaa0c64
5 changed files with 72 additions and 5 deletions
+26 -1
View File
@@ -4,6 +4,7 @@ export interface CliOptions {
strategy?: StrategyId;
silent: boolean;
help: boolean;
exchange?: "aster" | "grvt" | "lighter";
}
const STRATEGY_VALUES = new Set<StrategyId>(["trend", "maker", "offset-maker"]);
@@ -36,6 +37,19 @@ export function parseCliArgs(argv: string[] = process.argv.slice(2)): CliOptions
}
continue;
}
if (arg.startsWith("--exchange=")) {
const value = arg.split("=", 2)[1] ?? "";
assignExchange(options, value);
continue;
}
if (arg === "--exchange" || arg === "-e") {
const value = argv[i + 1];
if (value) {
assignExchange(options, value);
i += 1;
}
continue;
}
}
return options;
@@ -51,12 +65,23 @@ function assignStrategy(options: CliOptions, raw: string): void {
}
}
function assignExchange(options: CliOptions, raw: string): void {
const normalized = raw.trim().toLowerCase();
if (!normalized) return;
if (normalized === "aster" || normalized === "grvt" || normalized === "lighter") {
options.exchange = normalized as CliOptions["exchange"];
} else if (normalized === "gravity" || normalized === "grav" || normalized === "grv") {
options.exchange = "grvt";
}
}
export function printCliHelp(): void {
// eslint-disable-next-line no-console
console.log(`Usage: bun run index.ts [--strategy <trend|maker|offset-maker>] [--silent]\n\n` +
console.log(`Usage: bun run index.ts [--strategy <trend|maker|offset-maker>] [--exchange <aster|grvt|lighter>] [--silent]\n\n` +
`Options:\n` +
` --strategy, -s Automatically start the specified strategy without the interactive menu.\n` +
` Aliases: offset, offset-maker for the offset maker engine.\n` +
` --exchange, -e Choose exchange. Overrides EXCHANGE/TRADE_EXCHANGE environment variables.\n` +
` --silent, -q Reduce console output. When used with --strategy, runs in silent daemon mode.\n` +
` --help, -h Show this help message.\n`);
}
+8
View File
@@ -4,9 +4,17 @@ import { App } from "./ui/App";
import { setupGlobalErrorHandlers } from "./runtime-errors";
import { parseCliArgs, printCliHelp } from "./cli/args";
import { startStrategy } from "./cli/strategy-runner";
import { resolveExchangeId } from "./exchanges/create-adapter";
setupGlobalErrorHandlers();
const options = parseCliArgs();
// If user specifies --exchange, override environment-based resolution for this process
if (options.exchange) {
// Ensure downstream calls to resolveExchangeId() pick the CLI value.
// We set both common env keys respected by resolveExchangeId.
process.env.EXCHANGE = options.exchange;
process.env.TRADE_EXCHANGE = options.exchange;
}
if (options.help) {
printCliHelp();
+12 -4
View File
@@ -4,6 +4,7 @@ import { TrendApp } from "./TrendApp";
import { MakerApp } from "./MakerApp";
import { OffsetMakerApp } from "./OffsetMakerApp";
import { loadCopyrightFragments, verifyCopyrightIntegrity } from "../utils/copyright";
import { resolveExchangeId } from "../exchanges/create-adapter";
interface StrategyOption {
id: "trend" | "maker" | "offset-maker";
@@ -40,16 +41,23 @@ export function App() {
const [selected, setSelected] = useState<StrategyOption | null>(null);
const copyright = useMemo(() => loadCopyrightFragments(), []);
const integrityOk = useMemo(() => verifyCopyrightIntegrity(), []);
const exchangeId = useMemo(() => resolveExchangeId(), []);
const strategies = useMemo(() => {
if (exchangeId === "lighter") {
return STRATEGIES.filter((s) => s.id !== "trend");
}
return STRATEGIES;
}, [exchangeId]);
useInput(
(input, key) => {
if (selected) return;
if (key.upArrow) {
setCursor((prev) => (prev - 1 + STRATEGIES.length) % STRATEGIES.length);
setCursor((prev) => (prev - 1 + strategies.length) % strategies.length);
} else if (key.downArrow) {
setCursor((prev) => (prev + 1) % STRATEGIES.length);
setCursor((prev) => (prev + 1) % strategies.length);
} else if (key.return) {
const strategy = STRATEGIES[cursor];
const strategy = strategies[cursor];
if (strategy) {
setSelected(strategy);
}
@@ -75,7 +83,7 @@ export function App() {
<Text color="cyanBright"></Text>
<Text color="gray">使 / Ctrl+C 退</Text>
<Box flexDirection="column" marginTop={1}>
{STRATEGIES.map((strategy, index) => {
{strategies.map((strategy, index) => {
const active = index === cursor;
return (
<Box key={strategy.id} flexDirection="column" marginBottom={1}>