@@ -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'
|
||||
})
|
||||
}
|
||||
@@ -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 }
|
||||
})
|
||||
}
|
||||
@@ -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'
|
||||
})
|
||||
}
|
||||
@@ -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'
|
||||
})
|
||||
}
|
||||
@@ -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
|
||||
})
|
||||
}
|
||||
@@ -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
|
||||
})
|
||||
}
|
||||
@@ -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
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user