AI 交易 Hooks
ONE SDK 导出 6 个专用 hooks 用于 AI 驱动的交易,外加 token 管理函数 用于认证。这些 hooks 是 独立的——不需要 OneProvider,并自行管理认证 token。
导入
import {
// Hooks
useAIStrategies,
useAIStrategy,
useAIOrders,
useAIPortfolio,
useAIMarketData,
useAITrading,
// Token management
setAITradingAccessToken,
clearAITradingAccessToken,
} from '@one_deploy/sdk';
Token 管理
需要独立认 证
AI 交易 hooks 不会 从 OneProvider 上下文读取数据。你必须在使用任何 AI 交易 hook 之前调用 setAITradingAccessToken。未设置 token 就调用 hook 会产生 UNAUTHORIZED 错误。
设置
import {
setAITradingAccessToken,
clearAITradingAccessToken,
} from '@one_deploy/sdk';
// After your user authenticates (e.g. via your auth flow or OneEngineClient.login)
function onUserLogin(accessToken: string) {
setAITradingAccessToken(accessToken);
}
// On logout, clear the token
function onUserLogout() {
clearAITradingAccessToken();
}
函数签名
/** Set the bearer token used by all AI trading hooks and API calls.
* Call this once after authentication. The token is stored in module-level
* state and shared across all AI trading hook instances. */
function setAITradingAccessToken(token: string): void;
/** Clear the current AI trading access token.
* Subsequent hook calls will return UNAUTHORIZED errors until a new token is set. */
function clearAITradingAccessToken(): void;
完整设置示例
import {
setAITradingAccessToken,
clearAITradingAccessToken,
useAIStrategies,
useAIPortfolio,
} from '@one_deploy/sdk';
import { useEffect, useState } from 'react';
function AITradingApp() {
const [isReady, setIsReady] = useState(false);
useEffect(() => {
// Obtain a token from your auth system
async function init() {
const token = await fetchAccessTokenFromYourAuthService();
setAITradingAccessToken(token);
setIsReady(true);
}
init();
return () => {
clearAITradingAccessToken();
};
}, []);
if (!isReady) return <p>Authenticating...</p>;
return (
<>
<StrategyList />
<PortfolioSummary />
</>
);
}
useAIStrategies
获取和筛选可用的 AI 交易策略。
签名
function useAIStrategies(options?: UseAIStrategiesOptions): UseAIStrategiesResult;
选项
interface UseAIStrategiesOptions {
/** Filter by strategy category. */
category?: StrategyCategory;
/** Filter by risk level. */
riskLevel?: RiskLevel;
/** Filter by supported chain ID. */
chainId?: number;
/** Filter by trading pair (e.g. 'ETH/USDT'). */
pair?: string;
/** Enable automatic polling. Defaults to false. */
autoRefresh?: boolean;
/** Polling interval in milliseconds. Defaults to 60000. */
refreshInterval?: number;
}
type StrategyCategory =
| 'conservative'
| 'balanced'
| 'aggressive'
| 'hedge'
| 'arbitrage'
| 'trend'
| 'grid'
| 'dca';
type RiskLevel = 'conservative' | 'moderate' | 'aggressive';
返回类型
interface UseAIStrategiesResult {
/** Array of strategies matching the filter criteria. */
strategies: AIStrategy[];
/** Whether the initial fetch is in progress. */
isLoading: boolean;
/** Error object, or null. */
error: OneSDKError | null;
/** Manually trigger a refetch. */
refetch: () => Promise<void>;
}
interface AIStrategy {
id: string;
name: string;
description: string;
category: StrategyCategory;
riskLevel: RiskLevel;
supportedChains: number[];
supportedPairs: string[];
minInvestment: number;
maxInvestment: number;
expectedApy: { min: number; max: number };
lockPeriodDays: number;
isActive: boolean;
createdAt: string;
}
用法
import { useAIStrategies } from '@one_deploy/sdk';
function StrategyList() {
const { strategies, isLoading, error } = useAIStrategies({
category: 'balanced',
riskLevel: 'moderate',
});
if (isLoading) return <p>Loading strategies...</p>;
if (error) return <p>Error: {error.message}</p>;
return (
<ul>
{strategies.map((s) => (
<li key={s.id}>
<strong>{s.name}</strong> -- {s.description}
<br />
APY: {s.expectedApy.min}% - {s.expectedApy.max}% | Lock: {s.lockPeriodDays} days
<br />
Min: ${s.minInvestment} | Risk: {s.riskLevel}
</li>
))}
</ul>
);
}
useAIStrategy
按 ID 获取单个 AI 策略。适用于详情页。
签名
function useAIStrategy(strategyId?: string): UseAIStrategyResult;
参数
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
strategyId | string | 否 | 要获取的策略 ID。当为 undefined 时,hook 处于空闲状态(不发起请求)。 |
返回类型
interface UseAIStrategyResult {
/** The strategy object, or null if not yet loaded. */
strategy: AIStrategy | null;
/** Whether the fetch is in progress. */
isLoading: boolean;
/** Error object, or null. */
error: OneSDKError | null;
/** Manually trigger a refetch. */
refetch: () => Promise<void>;
}
用法
import { useAIStrategy } from '@one_deploy/sdk';
function StrategyDetail({ strategyId }: { strategyId: string }) {
const { strategy, isLoading, error } = useAIStrategy(strategyId);
if (isLoading) return <p>Loading strategy...</p>;
if (error) return <p>Error: {error.message}</p>;
if (!strategy) return <p>Strategy not found.</p>;
return (
<div>
<h2>{strategy.name}</h2>
<p>{strategy.description}</p>
<dl>
<dt>Category</dt><dd>{strategy.category}</dd>
<dt>Risk Level</dt><dd>{strategy.riskLevel}</dd>
<dt>Expected APY</dt><dd>{strategy.expectedApy.min}% - {strategy.expectedApy.max}%</dd>
<dt>Lock Period</dt><dd>{strategy.lockPeriodDays} days</dd>
<dt>Investment Range</dt><dd>${strategy.minInvestment} - ${strategy.maxInvestment}</dd>
<dt>Supported Chains</dt><dd>{strategy.supportedChains.join(', ')}</dd>
<dt>Supported Pairs</dt><dd>{strategy.supportedPairs.join(', ')}</dd>
</dl>
</div>
);
}
useAIOrders
查询已认证用户的当前和历史 AI 交易订单。
签名
function useAIOrders(options?: UseAIOrdersOptions): UseAIOrdersResult;