diff --git a/src/GenTradeAgent/src/renderer/src/components/TradingDashboard.vue b/src/GenTradeAgent/src/renderer/src/components/TradingDashboard.vue
index 48ad9cd..c91433a 100644
--- a/src/GenTradeAgent/src/renderer/src/components/TradingDashboard.vue
+++ b/src/GenTradeAgent/src/renderer/src/components/TradingDashboard.vue
@@ -70,7 +70,6 @@ store.watch(
(state) => state.currentOhlcv,
(value) => {
console.log('change ohlcv')
- console.log(value)
candlestickSeries.setData(value)
}
)
diff --git a/src/GenTradeAgent/src/renderer/src/components/TradingMain.vue b/src/GenTradeAgent/src/renderer/src/components/TradingMain.vue
index 9cf3b55..6c0cbcb 100644
--- a/src/GenTradeAgent/src/renderer/src/components/TradingMain.vue
+++ b/src/GenTradeAgent/src/renderer/src/components/TradingMain.vue
@@ -5,6 +5,17 @@
+
([])
+const lastSelectedMarketId = localStorage.getItem('lastSelectedMarketId')
+if (lastSelectedMarketId) {
+ store.state.currentMarket = lastSelectedMarketId
+}
+
+const lastSelectedAsset = localStorage.getItem('lastSelectedAsset')
+if (lastSelectedAsset) {
+ store.state.currentAsset = lastSelectedAsset
+}
+
+const lastSelectedInterval = localStorage.getItem('lastSelectedInterval')
+if (lastSelectedInterval) {
+ store.state.currentInterval = lastSelectedInterval
+}
+
+const currentMarket = ref(store.state.currentMarket)
const currentAsset = ref(store.state.currentAsset)
-const currentInterval = ref('1h')
+const currentInterval = ref('1d')
+
+const optionsMarket = ref([])
+const optionsAsset = ref([])
const optionsInterval = ref([
{
label: '1m',
@@ -88,31 +119,32 @@ const optionsInterval = ref([
}
])
-store.watch(
- (state) => state.ohlcvDB,
- (value) => {
- Object.keys(value).forEach((item) => {
- optionsAsset.value.push({
- label: getMarket(store.state, item) + ': ' + item,
- value: item
- })
+const updateAssetOptions = (market_id) => {
+ const assertNames = Object.keys(agentServer.markets[market_id].assets)
+ optionsAsset.value.length = 0
+ assertNames.forEach((item) => {
+ optionsAsset.value.push({
+ label: item,
+ value: item
})
- }
-)
+ })
+ currentAsset.value = store.state.currentAsset
+}
-const handlerRefresh = () => {
- store.commit('updateCurrentAsset', currentAsset.value)
- setTimeout(handlerRefresh, 30000)
+const handleUpdateCurrentMarket = (value: string) => {
+ store.commit('updateCurrentMarket', value)
+ localStorage.setItem('lastSelectedMarketId', value)
+ updateAssetOptions(value)
}
-handlerRefresh()
const handleUpdateCurrentAsset = (value: string) => {
- console.log('handleUpdateCurrentAsset:' + value)
store.commit('updateCurrentAsset', value)
+ localStorage.setItem('lastSelectedAsset', value)
}
const handleUpdateCurrentInterval = (value: string) => {
store.commit('updateCurrentInterval', value)
+ localStorage.setItem('lastSelectedInterval', value)
}
const callbackPing = (latency: number) => {
@@ -121,21 +153,10 @@ const callbackPing = (latency: number) => {
const handlerPingServer = () => {
agentServer.ping(callbackPing)
- setTimeout(handlerPingServer, agentServer.pingInterval)
+ //setTimeout(handlerPingServer, agentServer.pingInterval)
}
handlerPingServer()
-let isConnect = false
-const onAssetFromServer = (retval) => {
- optionsAsset.value.length = 0
- Object.keys(retval).forEach((item) => {
- optionsAsset.value.push({
- label: item,
- value: item
- })
- })
-}
-
store.watch(
(state) => state.serverLatency,
(value) => {
@@ -145,7 +166,27 @@ store.watch(
if (!isConnect && value != -1) {
isConnect = true
- agentServer.get_assets(onAssetFromServer)
+ store.commit('updateNotification', 'Reloading market data...')
+ agentServer.refreshAssets().then(() => {
+ setTimeout(() => {
+ store.commit('updateNotification', 'Reloading market data...Done')
+ // refresh market select UI
+ optionsMarket.value.length = 0
+ Object.keys(agentServer.markets).forEach((index) => {
+ optionsMarket.value.push({ label: agentServer.markets[index].name, value: index })
+ })
+
+ let lastSelectedMarketId = localStorage.getItem('lastSelectedMarketId')
+ if (lastSelectedMarketId == null || !(lastSelectedMarketId in agentServer.markets)) {
+ lastSelectedMarketId = MARKET_CRYPTO
+ }
+ currentMarket.value = agentServer.markets[lastSelectedMarketId].name
+ localStorage.setItem('lastSelectedMarketId', lastSelectedMarketId)
+
+ store.commit('updateCurrentMarket', lastSelectedMarketId)
+ updateAssetOptions(lastSelectedMarketId)
+ }, 500)
+ })
}
}
)
diff --git a/src/GenTradeAgent/src/renderer/src/main.ts b/src/GenTradeAgent/src/renderer/src/main.ts
index eded400..46ef5e8 100644
--- a/src/GenTradeAgent/src/renderer/src/main.ts
+++ b/src/GenTradeAgent/src/renderer/src/main.ts
@@ -9,12 +9,12 @@ const app = createApp(App)
app.use(store, keyStore)
app.mount('#app')
-window.electron.ipcRenderer.invoke('getCryptoAssetDB').then((response) => {
- store.commit('updateCryptoAssetDB', response)
-})
-window.electron.ipcRenderer.invoke('getStockUSAssetDB').then((response) => {
- store.commit('updateStockUSAssetDB', response)
-})
-window.electron.ipcRenderer.invoke('getOhlcvDB').then((response) => {
- store.commit('updateOhlcvDB', response)
-})
+// window.electron.ipcRenderer.invoke('getCryptoAssetDB').then((response) => {
+// store.commit('updateCryptoAssetDB', response)
+// })
+// window.electron.ipcRenderer.invoke('getStockUSAssetDB').then((response) => {
+// store.commit('updateStockUSAssetDB', response)
+// })
+// window.electron.ipcRenderer.invoke('getOhlcvDB').then((response) => {
+// store.commit('updateOhlcvDB', response)
+// })
diff --git a/src/GenTradeAgent/src/renderer/src/server.ts b/src/GenTradeAgent/src/renderer/src/server.ts
index ed1f651..38aaba0 100644
--- a/src/GenTradeAgent/src/renderer/src/server.ts
+++ b/src/GenTradeAgent/src/renderer/src/server.ts
@@ -1,11 +1,30 @@
import axios, { AxiosError } from 'axios'
+type Asset = {
+ name: string
+ quote: string
+ type: string
+ cik: number
+ base: string
+ symbol: string
+}
+
+interface IMarket {
+ name: string
+ type: string
+ assets: { [name: string]: Asset }
+}
+
+export const MARKET_CRYPTO = 'b13a4902-ad9d-11ef-a239-00155d3ba217'
+export const MARKET_STOCK_US = '5784f1f5-d8f6-401d-8d24-f685a3812f2d'
+
class AgentServer {
static DEFAULT_SERVER_ADDRESS = 'http://47.100.216.225:8000/api/v1'
apiKey: string = 'e54d4431-5dab-474e-b71a-0db1fcb9e659'
tzName: string = ''
tzOffset: number = 0
pingInterval: number = 10000
+ markets: { [market_id: string]: IMarket } = {}
get serverAddress() {
const retval = localStorage.getItem('serverAddress')
@@ -39,10 +58,10 @@ class AgentServer {
ask_question(prompt: string, callback: (answer: string) => void) {
const address = this.serverAddress + '/agent/'
- axios.interceptors.request.use((request) => {
- console.log('Starting Request', JSON.stringify(request, null, 2))
- return request
- })
+ // axios.interceptors.request.use((request) => {
+ // console.log('Starting Request', JSON.stringify(request, null, 2))
+ // return request
+ // })
axios.defaults.headers['X-API-KEY'] = 'e54d4431-5dab-474e-b71a-0db1fcb9e659'
axios
@@ -60,17 +79,21 @@ class AgentServer {
})
}
- get_assets(callback: (retval) => void) {
- const address = this.serverAddress + '/public/assets/'
- axios
- .get(address)
- .then((response) => {
- console.log(response)
- callback(response.data)
- })
- .catch((err: AxiosError) => {
- console.log(err)
- })
+ async get_assets(market_id: string, start: number = 0, limit: number = 0) {
+ const address = this.serverAddress + '/public/markets/' + market_id + '/assets'
+ const resp = await axios.get(address, {
+ params: {
+ start: start,
+ limit: limit
+ }
+ })
+ return resp.data
+ }
+
+ async get_markets() {
+ const address = this.serverAddress + '/public/markets/'
+ const resp = await axios.get(address)
+ return resp.data
}
get_ohlcv(assetName: string, interval: string, callback: (data) => void) {
@@ -89,13 +112,37 @@ class AgentServer {
}
})
.then((response) => {
- console.log(response)
callback(response.data)
})
.catch((err: AxiosError) => {
console.log(err)
})
}
+
+ async refreshAssets() {
+ this.markets = await this.get_markets()
+ await Object.keys(this.markets).forEach(async (market_id) => {
+ this.markets[market_id].assets = {}
+ let start = 0
+ let isEnd = false
+ while (!isEnd) {
+ const assets = await this.get_assets(market_id, start, 1000)
+ if (assets.length < 1000) {
+ isEnd = true
+ break
+ }
+ start += 1000
+ assets.forEach(async (item) => {
+ if (market_id == MARKET_CRYPTO && item.quote == 'usdt' && item.type == 'spot') {
+ this.markets[market_id].assets[item.name] = item
+ }
+ if (market_id == MARKET_STOCK_US && item.type == 'stock') {
+ this.markets[market_id].assets[item.name] = item
+ }
+ })
+ }
+ })
+ }
}
export const agentServer = new AgentServer()
diff --git a/src/GenTradeAgent/src/renderer/src/store.ts b/src/GenTradeAgent/src/renderer/src/store.ts
index 5f06b8a..4fac0a2 100644
--- a/src/GenTradeAgent/src/renderer/src/store.ts
+++ b/src/GenTradeAgent/src/renderer/src/store.ts
@@ -1,6 +1,6 @@
import { InjectionKey } from 'vue'
import { createStore, Store, useStore as baseUseStore } from 'vuex'
-import { agentServer } from './server'
+import { agentServer, MARKET_CRYPTO, MARKET_STOCK_US } from './server'
export interface ohlcvData {
time: number
@@ -11,23 +11,8 @@ export interface ohlcvData {
vol: number
}
-interface ICryptoAsset {
- base: string
- quote: string
- symbol: string
- type: string
-}
-
-interface IStockUSAsset {
- cik_str: number
- ticker: string
- title: string
-}
-
export interface IState {
- cryptoAssets: { [assertType: string]: { [asset: string]: ICryptoAsset } }
- stockUSAssets: { [asset: string]: IStockUSAsset }
- ohlcvDB: { [asset: string]: { [interval: string]: ohlcvData[] } }
+ currentMarket: string
currentAsset: string
currentOhlcv: ohlcvData[]
currentInterval: string
@@ -39,55 +24,43 @@ export const keyStore: InjectionKey> = Symbol()
export const store = createStore({
state: () => ({
- cryptoAssets: {},
- stockUSAssets: {},
- ohlcvDB: { btc: { '1h': [] } },
- currentAsset: 'btc',
+ currentMarket: '',
+ currentAsset: '',
currentOhlcv: [],
- currentInterval: '1h',
+ currentInterval: '1d',
notifyMessage: 'Last message',
serverLatency: -1
}),
mutations: {
- updateCryptoAssetDB(state, newCryptoAssetDB) {
- console.log('updateCryptoAssetDB')
- state.cryptoAssets = newCryptoAssetDB
- },
- updateStockUSAssetDB(state, newStockUSDB) {
- console.log('updateStockUSAssetDB')
- state.stockUSAssets = newStockUSDB
- },
- updateOhlcvDB(state, newOhlcvDB) {
- console.log('updateOhlcvDB')
- console.log(newOhlcvDB)
- state.ohlcvDB = newOhlcvDB
- state.currentAsset = Object.keys(newOhlcvDB)[0]
- state.currentOhlcv = state.ohlcvDB[state.currentAsset][state.currentInterval]
+ updateCurrentMarket(state, newId) {
+ console.log('updateMarket: ' + newId)
+ state.currentMarket = newId
+ const marketInst = agentServer.markets[newId]
+ const assetNames = Object.keys(marketInst.assets)
+ if (!(state.currentAsset in assetNames)) {
+ if (newId == MARKET_CRYPTO) {
+ state.currentAsset = 'btc_usdt'
+ } else if (newId == MARKET_STOCK_US) {
+ state.currentAsset = 'ibit'
+ }
+ const callback = ((data) => {
+ state.currentOhlcv = data
+ })
+ agentServer.get_ohlcv(state.currentAsset, state.currentInterval, callback)
+ }
},
updateCurrentAsset(state, newAsset: string) {
console.log('updateCurrentAsset')
state.currentAsset = newAsset
- if (state.currentAsset in state.ohlcvDB) {
- state.currentOhlcv = state.ohlcvDB[state.currentAsset][state.currentInterval]
- }
- //console.log(state.c)
const callback = ((data) => {
- console.log(data)
state.currentOhlcv = data
- console.log(state.currentOhlcv)
})
agentServer.get_ohlcv(newAsset, state.currentInterval, callback)
},
updateCurrentInterval(state, newInterval: string) {
console.log('updateCurrentInterval')
state.currentInterval = newInterval
- if (state.currentAsset in state.ohlcvDB) {
- state.currentOhlcv = state.ohlcvDB[state.currentAsset][state.currentInterval]
- console.log(state.currentOhlcv)
- console.log("222")
- }
const callback = ((data) => {
- console.log(data)
state.currentOhlcv = data
})
agentServer.get_ohlcv(state.currentAsset, state.currentInterval, callback)
@@ -105,16 +78,3 @@ export const store = createStore({
export function useStore() {
return baseUseStore(keyStore)
}
-
-export function getMarket(state: IState, asset: string): string | null {
- if (state.cryptoAssets['spot'] != null) {
- if (asset in state.cryptoAssets['spot']) {
- return 'Crypto[Spot]'
- }
- }
- if (asset in state.stockUSAssets) {
- return 'Stock[US]'
- }
-
- return null
-}