Signed-off-by: TIANHE <TIANHE@GMAIL.COM>
This commit is contained in:
TIANHE
2025-12-29 03:06:49 +08:00
commit f43312a858
292 changed files with 103739 additions and 0 deletions
+113
View File
@@ -0,0 +1,113 @@
import request from '@/utils/request'
const api = {
strategies: '/addons/quantdinger/strategy/strategies',
createAIStrategy: '/addons/quantdinger/strategy/aiCreate',
updateAIStrategy: '/addons/quantdinger/strategy/aiUpdate',
deleteStrategy: '/addons/quantdinger/strategy/delete',
startStrategy: '/addons/quantdinger/strategy/start',
stopStrategy: '/addons/quantdinger/strategy/stop',
testConnection: '/addons/quantdinger/strategy/testConnection',
aiDecisions: '/addons/quantdinger/strategy/aiDecisions',
getCryptoSymbols: '/addons/quantdinger/strategy/getCryptoSymbols'
}
/**
* 获取AI交易策略列表
*/
export function getStrategies () {
return request({
url: api.strategies,
method: 'get'
})
}
/**
* 创建AI交易策略
*/
export function createAIStrategy (data) {
return request({
url: api.createAIStrategy,
method: 'post',
data
})
}
/**
* 更新AI交易策略
*/
export function updateAIStrategy (data) {
return request({
url: api.updateAIStrategy,
method: 'post',
data
})
}
/**
* 删除策略
*/
export function deleteStrategy (strategyId) {
return request({
url: api.deleteStrategy,
method: 'delete',
params: { id: strategyId }
})
}
/**
* 启动策略
*/
export function startStrategy (strategyId) {
return request({
url: api.startStrategy,
method: 'post',
params: { id: strategyId }
})
}
/**
* 停止策略
*/
export function stopStrategy (strategyId) {
return request({
url: api.stopStrategy,
method: 'post',
params: { id: strategyId }
})
}
/**
* 测试交易所连接
*/
export function testConnection (data) {
return request({
url: api.testConnection,
method: 'post',
data
})
}
/**
* 获取AI决策记录
*/
export function getAIDecisions (strategyId, params) {
return request({
url: api.aiDecisions,
method: 'get',
params: {
strategy_id: strategyId,
...params
}
})
}
/**
* 获取系统支持的交易对列表
*/
export function getCryptoSymbols () {
return request({
url: api.getCryptoSymbols,
method: 'get'
})
}
+40
View File
@@ -0,0 +1,40 @@
import request from '@/utils/request'
const api = {
list: '/api/credentials/list',
get: '/api/credentials/get',
create: '/api/credentials/create',
delete: '/api/credentials/delete'
}
export function listExchangeCredentials (params = {}) {
return request({
url: api.list,
method: 'get',
params
})
}
export function getExchangeCredential (id, params = {}) {
return request({
url: api.get,
method: 'get',
params: { id, ...params }
})
}
export function createExchangeCredential (data) {
return request({
url: api.create,
method: 'post',
data
})
}
export function deleteExchangeCredential (id, params = {}) {
return request({
url: api.delete,
method: 'delete',
params: { id, ...params }
})
}
+30
View File
@@ -0,0 +1,30 @@
import request from '@/utils/request'
// Dashboard API
const api = {
summary: '/api/dashboard/summary',
pendingOrders: '/api/dashboard/pendingOrders'
}
export function getDashboardSummary () {
return request({
url: api.summary,
method: 'get'
})
}
export function getPendingOrders (params) {
return request({
url: api.pendingOrders,
method: 'get',
params
})
}
export function deletePendingOrder (id) {
return request({
url: `${api.pendingOrders}/${id}`,
method: 'delete'
})
}
+59
View File
@@ -0,0 +1,59 @@
import request from '@/utils/request'
const userApi = {
Login: '/api/user/login',
Logout: '/api/user/logout',
UserInfo: '/api/user/info',
UserMenu: '/user/nav'
}
/**
* login func
* parameter: {
* username: '',
* password: '',
* remember_me: true,
* captcha: '12345'
* }
* @param parameter
* @returns {*}
*/
export function login (parameter) {
return request({
url: userApi.Login,
method: 'post',
data: parameter
})
}
export function getInfo () {
return request({
url: userApi.UserInfo,
method: 'get',
headers: {
'Content-Type': 'application/json;charset=UTF-8'
}
})
}
// Backward-compatible alias: some modules still call getUserInfo()
export function getUserInfo () {
return getInfo()
}
export function logout () {
return request({
url: userApi.Logout,
method: 'post',
headers: {
'Content-Type': 'application/json;charset=UTF-8'
}
})
}
export function getCurrentUserNav () {
return request({
url: userApi.UserMenu,
method: 'get'
})
}
+70
View File
@@ -0,0 +1,70 @@
import request from '@/utils/request'
const api = {
user: '/user',
role: '/role',
service: '/service',
permission: '/permission',
permissionNoPager: '/permission/no-pager',
orgTree: '/org/tree'
}
export default api
export function getUserList (parameter) {
return request({
url: api.user,
method: 'get',
params: parameter
})
}
export function getRoleList (parameter) {
return request({
url: api.role,
method: 'get',
params: parameter
})
}
export function getServiceList (parameter) {
return request({
url: api.service,
method: 'get',
params: parameter
})
}
export function getPermissions (parameter) {
return request({
url: api.permissionNoPager,
method: 'get',
params: parameter
})
}
export function getOrgTree (parameter) {
return request({
url: api.orgTree,
method: 'get',
params: parameter
})
}
// id == 0 add post
// id != 0 update put
export function saveService (parameter) {
return request({
url: api.service,
method: parameter.id === 0 ? 'post' : 'put',
data: parameter
})
}
export function saveSub (sub) {
return request({
url: '/sub',
method: sub.id === 0 ? 'post' : 'put',
data: sub
})
}
+243
View File
@@ -0,0 +1,243 @@
import request from '@/utils/request'
const marketApi = {
// Watchlist
GetWatchlist: '/api/market/watchlist/get',
AddWatchlist: '/api/market/watchlist/add',
RemoveWatchlist: '/api/market/watchlist/remove',
GetWatchlistPrices: '/api/market/watchlist/prices',
// Analysis
MultiAnalysis: '/api/analysis/multiAnalysis',
CreateAnalysisTask: '/api/analysis/createTask',
GetAnalysisTaskStatus: '/api/analysis/getTaskStatus',
GetAnalysisHistoryList: '/api/analysis/getHistoryList',
ReflectAnalysis: '/api/analysis/reflect',
// AI chat (optional)
ChatMessage: '/api/ai/chat/message',
GetChatHistory: '/api/ai/chat/history',
SaveChatHistory: '/api/ai/chat/history/save',
// Public config
GetConfig: '/api/market/config',
GetMenuFooterConfig: '/api/market/menuFooterConfig',
// Market metadata
GetMarketTypes: '/api/market/types',
// Symbol search
SearchSymbols: '/api/market/symbols/search',
GetHotSymbols: '/api/market/symbols/hot'
}
/**
* 获取自选股列表
* @param parameter { userid: number }
* @returns {*}
*/
export function getWatchlist (parameter) {
return request({
url: marketApi.GetWatchlist,
method: 'post',
data: parameter
})
}
/**
* 添加自选股
* @param parameter { userid: number, market: string, symbol: string }
* @returns {*}
*/
export function addWatchlist (parameter) {
return request({
url: marketApi.AddWatchlist,
method: 'post',
data: parameter
})
}
/**
* 删除自选股
* @param parameter { userid: number, symbol: string }
* @returns {*}
*/
export function removeWatchlist (parameter) {
return request({
url: marketApi.RemoveWatchlist,
method: 'post',
data: parameter
})
}
/**
* 获取自选股价格
* @param parameter { watchlist: array } watchlist格式:[{market: 'USStock', symbol: 'AAPL'}, ...]
* @returns {*}
*/
export function getWatchlistPrices (parameter) {
return request({
url: marketApi.GetWatchlistPrices,
method: 'post',
data: parameter
})
}
/**
* 发送 AI 聊天消息
* @param parameter { userid: number, message: string, chatId?: string }
* @returns {*}
*/
export function chatMessage (parameter) {
return request({
url: marketApi.ChatMessage,
method: 'post',
data: parameter
})
}
/**
* 获取聊天历史
* @param parameter { userid: number }
* @returns {*}
*/
export function getChatHistory (parameter) {
return request({
url: marketApi.GetChatHistory,
method: 'post',
data: parameter
})
}
/**
* 保存聊天历史
* @param parameter { userid: number, chatHistory: array }
* @returns {*}
*/
export function saveChatHistory (parameter) {
return request({
url: marketApi.SaveChatHistory,
method: 'post',
data: parameter
})
}
/**
* 执行多维度分析
* @param parameter { userid: number, market: string, symbol: string }
* @returns {*}
*/
export function multiAnalysis (parameter) {
return request({
url: marketApi.MultiAnalysis,
method: 'post',
data: parameter
})
}
/**
* 创建分析任务
* @param parameter { userid: number, market: string, symbol: string }
* @returns {*}
*/
export function createAnalysisTask (parameter) {
return request({
url: marketApi.CreateAnalysisTask,
method: 'post',
data: parameter
})
}
/**
* 获取分析任务状态
* @param parameter { task_id: number }
* @returns {*}
*/
export function getAnalysisTaskStatus (parameter) {
return request({
url: marketApi.GetAnalysisTaskStatus,
method: 'post',
data: parameter
})
}
/**
* 获取历史分析列表
* @param parameter { userid: number, page?: number, pagesize?: number }
* @returns {*}
*/
export function getAnalysisHistoryList (parameter) {
return request({
url: marketApi.GetAnalysisHistoryList,
method: 'post',
data: parameter
})
}
/**
* 反思学习
* @param parameter { market: string, symbol: string, decision: string, returns?: number, result?: string }
* @returns {*}
*/
export function reflectAnalysis (parameter) {
return request({
url: marketApi.ReflectAnalysis,
method: 'post',
data: parameter
})
}
/**
* 获取插件配置
* @returns {*}
*/
export function getConfig () {
return request({
url: marketApi.GetConfig,
method: 'get'
})
}
/**
* 获取菜单底部配置
* @returns {*}
*/
export function getMenuFooterConfig () {
return request({
url: marketApi.GetMenuFooterConfig,
method: 'post',
data: {}
})
}
/**
* 获取股票类型列表
* @returns {*}
*/
export function getMarketTypes () {
return request({
url: marketApi.GetMarketTypes,
method: 'get'
})
}
/**
* 搜索金融产品
* @param parameter { market: string, keyword: string, limit?: number }
* @returns {*}
*/
export function searchSymbols (parameter) {
return request({
url: marketApi.SearchSymbols,
method: 'post',
data: parameter
})
}
/**
* 获取热门标的
* @param parameter { market: string, limit?: number }
* @returns {*}
*/
export function getHotSymbols (parameter) {
return request({
url: marketApi.GetHotSymbols,
method: 'post',
data: parameter
})
}
+177
View File
@@ -0,0 +1,177 @@
import request from '@/utils/request'
const api = {
// Local Python backend
strategies: '/api/strategies',
strategyDetail: '/api/strategies/detail',
createStrategy: '/api/strategies/create',
updateStrategy: '/api/strategies/update',
stopStrategy: '/api/strategies/stop',
startStrategy: '/api/strategies/start',
deleteStrategy: '/api/strategies/delete',
testConnection: '/api/strategies/test-connection',
trades: '/api/strategies/trades',
positions: '/api/strategies/positions',
equityCurve: '/api/strategies/equityCurve',
notifications: '/api/strategies/notifications'
}
/**
* 获取策略列表
* @param {Object} params - 查询参数
* @param {number} params.user_id - 用户ID(可选)
*/
export function getStrategyList (params = {}) {
return request({
url: api.strategies,
method: 'get',
params
})
}
/**
* 获取策略详情
* @param {number} id - 策略ID
*/
export function getStrategyDetail (id) {
return request({
url: api.strategyDetail,
method: 'get',
params: { id }
})
}
/**
* 创建策略
* @param {Object} data - 策略数据
* @param {number} data.user_id - 用户ID
* @param {string} data.strategy_name - 策略名称
* @param {string} data.strategy_type - 策略类型
* @param {Object} data.llm_model_config - LLM模型配置
* @param {Object} data.exchange_config - 交易所配置
* @param {Object} data.trading_config - 交易配置
*/
export function createStrategy (data) {
return request({
url: api.createStrategy,
method: 'post',
data
})
}
/**
* 更新策略
* @param {number} id - 策略ID
* @param {Object} data - 策略数据
* @param {string} data.strategy_name - 策略名称(可选)
* @param {Object} data.indicator_config - 技术指标配置(可选)
* @param {Object} data.exchange_config - 交易所配置(可选)
* @param {Object} data.trading_config - 交易配置(可选)
*/
export function updateStrategy (id, data) {
return request({
url: api.updateStrategy,
method: 'put',
params: { id },
data
})
}
/**
* 停止策略
* @param {number} id - 策略ID
*/
export function stopStrategy (id) {
return request({
url: api.stopStrategy,
method: 'post',
params: { id }
})
}
/**
* 启动策略
* @param {number} id - 策略ID
*/
export function startStrategy (id) {
return request({
url: api.startStrategy,
method: 'post',
params: { id }
})
}
/**
* 删除策略
* @param {number} id - 策略ID
*/
export function deleteStrategy (id) {
return request({
url: api.deleteStrategy,
method: 'delete',
params: { id }
})
}
/**
* 测试交易所连接
* @param {Object} exchangeConfig - 交易所配置
*/
export function testExchangeConnection (exchangeConfig) {
return request({
url: api.testConnection,
method: 'post',
data: { exchange_config: exchangeConfig }
})
}
/**
* 获取策略交易记录
* @param {number} id - 策略ID
*/
export function getStrategyTrades (id) {
return request({
url: api.trades,
method: 'get',
params: { id }
})
}
/**
* 获取策略持仓记录
* @param {number} id - 策略ID
*/
export function getStrategyPositions (id) {
return request({
url: api.positions,
method: 'get',
params: { id }
})
}
/**
* 获取策略净值曲线
* @param {number} id - 策略ID
*/
export function getStrategyEquityCurve (id) {
return request({
url: api.equityCurve,
method: 'get',
params: { id }
})
}
/**
* Strategy signal notifications (browser channel persistence).
* @param {Object} params
* @param {number} params.id - strategy id (optional)
* @param {number} params.limit - max items (optional)
* @param {number} params.since_id - return items with id > since_id (optional)
*/
export function getStrategyNotifications (params = {}) {
return request({
url: api.notifications,
method: 'get',
params
})
}