|
|
@ -1497,8 +1497,8 @@ const sendTcpMessage = (command) => { |
|
|
messageData = { |
|
|
messageData = { |
|
|
command: "daily_data", |
|
|
command: "daily_data", |
|
|
stock_code: "GBPAUD.FXCM", |
|
|
stock_code: "GBPAUD.FXCM", |
|
|
start_date: "20251001", |
|
|
|
|
|
end_date: "20251023", |
|
|
|
|
|
|
|
|
start_date: "20250801", |
|
|
|
|
|
end_date: "20251029", |
|
|
}; |
|
|
}; |
|
|
break; |
|
|
break; |
|
|
// 周线数据 |
|
|
// 周线数据 |
|
|
@ -1515,7 +1515,7 @@ const sendTcpMessage = (command) => { |
|
|
messageData = { |
|
|
messageData = { |
|
|
command: "monthly_data", |
|
|
command: "monthly_data", |
|
|
stock_code: "000001.SZ", |
|
|
stock_code: "000001.SZ", |
|
|
start_date: "2024912", |
|
|
|
|
|
|
|
|
start_date: "20201130", |
|
|
end_date: "20251029", |
|
|
end_date: "20251029", |
|
|
}; |
|
|
}; |
|
|
break; |
|
|
break; |
|
|
@ -1850,6 +1850,45 @@ const parseStockData = (message) => { |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
} else if ((typeof message === "string" && message.includes("monthly_data_start")) || isMorePacket.monthly_data) { |
|
|
|
|
|
if (typeof message === "string" && message.includes("monthly_data_start")) { |
|
|
|
|
|
console.log("开始接受分包数据"); |
|
|
|
|
|
receivedMessage = ""; |
|
|
|
|
|
} else { |
|
|
|
|
|
console.log("接收分包数据过程中"); |
|
|
|
|
|
} |
|
|
|
|
|
isMorePacket.monthly_data = true; |
|
|
|
|
|
receivedMessage += message; |
|
|
|
|
|
// 如果当前消息包含},说明收到JSON字符串结尾,结束接收,开始解析 |
|
|
|
|
|
if (receivedMessage.includes("monthly_data_complete")) { |
|
|
|
|
|
console.log("接受分包数据结束"); |
|
|
|
|
|
isMorePacket.monthly_data = false; |
|
|
|
|
|
|
|
|
|
|
|
console.log("展示数据", receivedMessage); |
|
|
|
|
|
|
|
|
|
|
|
const result = findJsonPacket(receivedMessage, "monthly_data_complete"); |
|
|
|
|
|
if (result.error) { |
|
|
|
|
|
throw new Error("解析JSON字符串失败"); |
|
|
|
|
|
} else { |
|
|
|
|
|
parsedMessage = result.json; |
|
|
|
|
|
console.log("JSON解析成功,解析后类型:", typeof parsedMessage, parsedMessage); |
|
|
|
|
|
if (parsedMessage.type === "monthly_data") { |
|
|
|
|
|
klineData.value = parsedMessage.data.map((item) => ({ |
|
|
|
|
|
open: item.bid_open, |
|
|
|
|
|
close: item.bid_close, |
|
|
|
|
|
high: item.bid_high, |
|
|
|
|
|
low: item.bid_low, |
|
|
|
|
|
volume: item.vol, |
|
|
|
|
|
amount: item.amount, |
|
|
|
|
|
date: item.trade_date ? `${item.trade_date.slice(0, 4)}-${item.trade_date.slice(4, 6)}-${item.trade_date.slice(6, 8)}` : item.trade_date, |
|
|
|
|
|
})); |
|
|
|
|
|
stockInformation.value.lastDayStockClosePrice = klineData.value[klineData.value.length - 2].close; |
|
|
|
|
|
touchState.offset = canvasWidth.value / klineData.value.length / 2; |
|
|
|
|
|
console.log("lastDayStockClosePrice", stockInformation.value.lastDayStockClosePrice); |
|
|
|
|
|
drawChart(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} else if ((typeof message === "string" && message.includes("daily_one_minutes_data_start")) || isMorePacket.daily_one_minutes_data) { |
|
|
} else if ((typeof message === "string" && message.includes("daily_one_minutes_data_start")) || isMorePacket.daily_one_minutes_data) { |
|
|
if (typeof message === "string" && message.includes("daily_one_minutes_data_start")) { |
|
|
if (typeof message === "string" && message.includes("daily_one_minutes_data_start")) { |
|
|
console.log("开始接受分包数据"); |
|
|
console.log("开始接受分包数据"); |
|
|
@ -1873,15 +1912,171 @@ const parseStockData = (message) => { |
|
|
parsedMessage = result.json; |
|
|
parsedMessage = result.json; |
|
|
console.log("JSON解析成功,解析后类型:", typeof parsedMessage, parsedMessage); |
|
|
console.log("JSON解析成功,解析后类型:", typeof parsedMessage, parsedMessage); |
|
|
if (parsedMessage.type === "daily_one_minutes_data") { |
|
|
if (parsedMessage.type === "daily_one_minutes_data") { |
|
|
// klineData.value = parsedMessage.data.map((item) => ({ |
|
|
|
|
|
// open: item.open, |
|
|
|
|
|
// close: item.close, |
|
|
|
|
|
// high: item.high, |
|
|
|
|
|
// low: item.low, |
|
|
|
|
|
// volume: item.volume, |
|
|
|
|
|
// amount: item.amount, |
|
|
|
|
|
// date: item.time, |
|
|
|
|
|
// })); |
|
|
|
|
|
|
|
|
klineData.value = parsedMessage.data.map((item) => ({ |
|
|
|
|
|
open: item.open, |
|
|
|
|
|
close: item.close, |
|
|
|
|
|
high: Math.max(item.low, item.high), |
|
|
|
|
|
low: Math.min(item.low, item.high), |
|
|
|
|
|
volume: item.volume, |
|
|
|
|
|
amount: item.amount, |
|
|
|
|
|
date: item.timestamp, |
|
|
|
|
|
})); |
|
|
|
|
|
stockInformation.value.lastDayStockClosePrice = klineData.value[klineData.value.length - 2].close; |
|
|
|
|
|
touchState.offset = canvasWidth.value / klineData.value.length / 2; |
|
|
|
|
|
console.log("lastDayStockClosePrice", stockInformation.value.lastDayStockClosePrice); |
|
|
|
|
|
drawChart(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} else if ((typeof message === "string" && message.includes("daily_five_minutes_data_start")) || isMorePacket.daily_five_minutes_data) { |
|
|
|
|
|
if (typeof message === "string" && message.includes("daily_five_minutes_data_start")) { |
|
|
|
|
|
console.log("开始接受分包数据"); |
|
|
|
|
|
receivedMessage = ""; |
|
|
|
|
|
} else { |
|
|
|
|
|
console.log("接收分包数据过程中"); |
|
|
|
|
|
} |
|
|
|
|
|
isMorePacket.daily_five_minutes_data = true; |
|
|
|
|
|
receivedMessage += message; |
|
|
|
|
|
// 如果当前消息包含},说明收到JSON字符串结尾,结束接收,开始解析 |
|
|
|
|
|
if (receivedMessage.includes("daily_five_minutes_data_complete")) { |
|
|
|
|
|
console.log("接受分包数据结束"); |
|
|
|
|
|
isMorePacket.daily_five_minutes_data = false; |
|
|
|
|
|
|
|
|
|
|
|
console.log("展示数据", receivedMessage); |
|
|
|
|
|
|
|
|
|
|
|
const result = findJsonPacket(receivedMessage, "daily_five_minutes_data_complete"); |
|
|
|
|
|
if (result.error) { |
|
|
|
|
|
throw new Error("解析JSON字符串失败"); |
|
|
|
|
|
} else { |
|
|
|
|
|
parsedMessage = result.json; |
|
|
|
|
|
console.log("JSON解析成功,解析后类型:", typeof parsedMessage, parsedMessage); |
|
|
|
|
|
if (parsedMessage.type === "daily_five_minutes_data") { |
|
|
|
|
|
klineData.value = parsedMessage.data.map((item) => ({ |
|
|
|
|
|
open: item.open, |
|
|
|
|
|
close: item.close, |
|
|
|
|
|
high: Math.max(item.low, item.high), |
|
|
|
|
|
low: Math.min(item.low, item.high), |
|
|
|
|
|
volume: item.volume, |
|
|
|
|
|
amount: item.amount, |
|
|
|
|
|
date: item.timestamp, |
|
|
|
|
|
})); |
|
|
|
|
|
stockInformation.value.lastDayStockClosePrice = klineData.value[klineData.value.length - 2].close; |
|
|
|
|
|
touchState.offset = canvasWidth.value / klineData.value.length / 2; |
|
|
|
|
|
console.log("lastDayStockClosePrice", stockInformation.value.lastDayStockClosePrice); |
|
|
|
|
|
drawChart(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} else if ((typeof message === "string" && message.includes("daily_fifteen_minutes_data_start")) || isMorePacket.daily_fifteen_minutes_data) { |
|
|
|
|
|
if (typeof message === "string" && message.includes("daily_fifteen_minutes_data_start")) { |
|
|
|
|
|
console.log("开始接受分包数据"); |
|
|
|
|
|
receivedMessage = ""; |
|
|
|
|
|
} else { |
|
|
|
|
|
console.log("接收分包数据过程中"); |
|
|
|
|
|
} |
|
|
|
|
|
isMorePacket.daily_fifteen_minutes_data = true; |
|
|
|
|
|
receivedMessage += message; |
|
|
|
|
|
// 如果当前消息包含},说明收到JSON字符串结尾,结束接收,开始解析 |
|
|
|
|
|
if (receivedMessage.includes("daily_fifteen_minutes_data_complete")) { |
|
|
|
|
|
console.log("接受分包数据结束"); |
|
|
|
|
|
isMorePacket.daily_fifteen_minutes_data = false; |
|
|
|
|
|
|
|
|
|
|
|
console.log("展示数据", receivedMessage); |
|
|
|
|
|
|
|
|
|
|
|
const result = findJsonPacket(receivedMessage, "daily_fifteen_minutes_data_complete"); |
|
|
|
|
|
if (result.error) { |
|
|
|
|
|
throw new Error("解析JSON字符串失败"); |
|
|
|
|
|
} else { |
|
|
|
|
|
parsedMessage = result.json; |
|
|
|
|
|
console.log("JSON解析成功,解析后类型:", typeof parsedMessage, parsedMessage); |
|
|
|
|
|
if (parsedMessage.type === "daily_fifteen_minutes_data") { |
|
|
|
|
|
klineData.value = parsedMessage.data.map((item) => ({ |
|
|
|
|
|
open: item.open, |
|
|
|
|
|
close: item.close, |
|
|
|
|
|
high: Math.max(item.low, item.high), |
|
|
|
|
|
low: Math.min(item.low, item.high), |
|
|
|
|
|
volume: item.volume, |
|
|
|
|
|
amount: item.amount, |
|
|
|
|
|
date: item.timestamp, |
|
|
|
|
|
})); |
|
|
|
|
|
stockInformation.value.lastDayStockClosePrice = klineData.value[klineData.value.length - 2].close; |
|
|
|
|
|
touchState.offset = canvasWidth.value / klineData.value.length / 2; |
|
|
|
|
|
console.log("lastDayStockClosePrice", stockInformation.value.lastDayStockClosePrice); |
|
|
|
|
|
drawChart(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} else if ((typeof message === "string" && message.includes("daily_thirty_minutes_data_start")) || isMorePacket.daily_thirty_minutes_data) { |
|
|
|
|
|
if (typeof message === "string" && message.includes("daily_thirty_minutes_data_start")) { |
|
|
|
|
|
console.log("开始接受分包数据"); |
|
|
|
|
|
receivedMessage = ""; |
|
|
|
|
|
} else { |
|
|
|
|
|
console.log("接收分包数据过程中"); |
|
|
|
|
|
} |
|
|
|
|
|
isMorePacket.daily_thirty_minutes_data = true; |
|
|
|
|
|
receivedMessage += message; |
|
|
|
|
|
// 如果当前消息包含},说明收到JSON字符串结尾,结束接收,开始解析 |
|
|
|
|
|
if (receivedMessage.includes("daily_thirty_minutes_data_complete")) { |
|
|
|
|
|
console.log("接受分包数据结束"); |
|
|
|
|
|
isMorePacket.daily_thirty_minutes_data = false; |
|
|
|
|
|
|
|
|
|
|
|
console.log("展示数据", receivedMessage); |
|
|
|
|
|
|
|
|
|
|
|
const result = findJsonPacket(receivedMessage, "daily_thirty_minutes_data_complete"); |
|
|
|
|
|
if (result.error) { |
|
|
|
|
|
throw new Error("解析JSON字符串失败"); |
|
|
|
|
|
} else { |
|
|
|
|
|
parsedMessage = result.json; |
|
|
|
|
|
console.log("JSON解析成功,解析后类型:", typeof parsedMessage, parsedMessage); |
|
|
|
|
|
if (parsedMessage.type === "daily_thirty_minutes_data") { |
|
|
|
|
|
klineData.value = parsedMessage.data.map((item) => ({ |
|
|
|
|
|
open: item.open, |
|
|
|
|
|
close: item.close, |
|
|
|
|
|
high: Math.max(item.low, item.high), |
|
|
|
|
|
low: Math.min(item.low, item.high), |
|
|
|
|
|
volume: item.volume, |
|
|
|
|
|
amount: item.amount, |
|
|
|
|
|
date: item.timestamp, |
|
|
|
|
|
})); |
|
|
|
|
|
stockInformation.value.lastDayStockClosePrice = klineData.value[klineData.value.length - 2].close; |
|
|
|
|
|
touchState.offset = canvasWidth.value / klineData.value.length / 2; |
|
|
|
|
|
console.log("lastDayStockClosePrice", stockInformation.value.lastDayStockClosePrice); |
|
|
|
|
|
drawChart(); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} else if ((typeof message === "string" && message.includes("daily_sixty_minutes_data_start")) || isMorePacket.daily_sixty_minutes_data) { |
|
|
|
|
|
if (typeof message === "string" && message.includes("daily_sixty_minutes_data_start")) { |
|
|
|
|
|
console.log("开始接受分包数据"); |
|
|
|
|
|
receivedMessage = ""; |
|
|
|
|
|
} else { |
|
|
|
|
|
console.log("接收分包数据过程中"); |
|
|
|
|
|
} |
|
|
|
|
|
isMorePacket.daily_sixty_minutes_data = true; |
|
|
|
|
|
receivedMessage += message; |
|
|
|
|
|
// 如果当前消息包含},说明收到JSON字符串结尾,结束接收,开始解析 |
|
|
|
|
|
if (receivedMessage.includes("daily_sixty_minutes_data_complete")) { |
|
|
|
|
|
console.log("接受分包数据结束"); |
|
|
|
|
|
isMorePacket.daily_sixty_minutes_data = false; |
|
|
|
|
|
|
|
|
|
|
|
console.log("展示数据", receivedMessage); |
|
|
|
|
|
|
|
|
|
|
|
const result = findJsonPacket(receivedMessage, "daily_sixty_minutes_data_complete"); |
|
|
|
|
|
if (result.error) { |
|
|
|
|
|
throw new Error("解析JSON字符串失败"); |
|
|
|
|
|
} else { |
|
|
|
|
|
parsedMessage = result.json; |
|
|
|
|
|
console.log("JSON解析成功,解析后类型:", typeof parsedMessage, parsedMessage); |
|
|
|
|
|
if (parsedMessage.type === "daily_sixty_minutes_data") { |
|
|
|
|
|
klineData.value = parsedMessage.data.map((item) => ({ |
|
|
|
|
|
open: item.open, |
|
|
|
|
|
close: item.close, |
|
|
|
|
|
high: Math.max(item.low, item.high), |
|
|
|
|
|
low: Math.min(item.low, item.high), |
|
|
|
|
|
volume: item.volume, |
|
|
|
|
|
amount: item.amount, |
|
|
|
|
|
date: item.timestamp, |
|
|
|
|
|
})); |
|
|
stockInformation.value.lastDayStockClosePrice = klineData.value[klineData.value.length - 2].close; |
|
|
stockInformation.value.lastDayStockClosePrice = klineData.value[klineData.value.length - 2].close; |
|
|
touchState.offset = canvasWidth.value / klineData.value.length / 2; |
|
|
touchState.offset = canvasWidth.value / klineData.value.length / 2; |
|
|
console.log("lastDayStockClosePrice", stockInformation.value.lastDayStockClosePrice); |
|
|
console.log("lastDayStockClosePrice", stockInformation.value.lastDayStockClosePrice); |
|
|
|