| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- const logger = require("./utils/logger");
- const fs = require('fs').promises;
- async function readData() {
- let data = await fs.readFile('./data/k_lines.json', 'utf8')
- return JSON.parse(data)
- }
- function getRealDragonMap(kLinesMap, FIRST_FEW_DAYS, BUY_LIMIT_RATE) {
- let realDragonMap = {}
- for (let symbol in kLinesMap) {
- let kLines = kLinesMap[symbol]
- let index = kLines.length - (FIRST_FEW_DAYS + 1)
- let kLine = kLines[index]
- let prevKline = kLines[index - 1]
- // 开盘第一天不计算
- if (!kLine || !prevKline) continue
- let rate = 100 * (kLine.Close - kLine.Open) / kLine.Open
- if (rate > BUY_LIMIT_RATE) {
- kLine.Rate = rate
- kLine.Profit = rate - BUY_LIMIT_RATE
- realDragonMap[symbol] = kLine
- }
- }
- return realDragonMap
- }
- function getFakeDragonMap(kLinesMap, FIRST_FEW_DAYS, BUY_LIMIT_RATE) {
- let fakeDragonMap = {}
- for (let symbol in kLinesMap) {
- let kLines = kLinesMap[symbol]
- let index = kLines.length - (FIRST_FEW_DAYS + 1)
- let kLine = kLines[index]
- let prevKline = kLines[index - 1]
- // 开盘第一天不计算
- if (!kLine || !prevKline) continue
- let rate = 100 * (kLine.Close - kLine.Open) / kLine.Open
- let maxRate = 100 * (kLine.High - kLine.Open) / kLine.Open
- if (maxRate > BUY_LIMIT_RATE && rate < BUY_LIMIT_RATE) {
- kLine.Rate = rate
- kLine.MaxRate = maxRate
- kLine.Profit = rate > 0 ? rate - BUY_LIMIT_RATE : -BUY_LIMIT_RATE
- fakeDragonMap[symbol] = kLine
- }
- }
- return fakeDragonMap
- }
- async function main() {
- let kLinesMap = await readData()
- const FIRST_FEW_DAYS = 0 // 第几天的数据,0表示今天,1表示昨天,2表示前天,以此类推
- const BUY_LIMIT_RATE = 10 // 从什么比例入场
- for (let i = 0; i <= kLinesMap['BTC_USDT'].length - 1; i++) {
- // 真龙榜
- let realDragonProfit = 0
- let realDragonMap = getRealDragonMap(kLinesMap, i, BUY_LIMIT_RATE)
- for (let symbol in realDragonMap) {
- realDragonProfit += realDragonMap[symbol].Profit
- // logger.info(realDragonMap[symbol].Symbol, realDragonMap[symbol].Profit, realDragonMap[symbol].Rate)
- }
- // 假龙榜
- let fakeDragonProfit = 0
- let fakeDragonMap = getFakeDragonMap(kLinesMap, i, BUY_LIMIT_RATE)
- for (let symbol in fakeDragonMap) {
- fakeDragonProfit += fakeDragonMap[symbol].Profit
- // logger.info(fakeDragonMap[symbol].Symbol, fakeDragonMap[symbol].Profit, fakeDragonMap[symbol].MaxRate, fakeDragonMap[symbol].Rate)
- }
- logger.info(`${i}日,真龙榜利润${realDragonProfit}%/${Object.keys(realDragonMap).length}`
- + `,假龙榜利润${fakeDragonProfit}%/${Object.keys(fakeDragonMap).length}`)
- }
- }
- main().catch((error) => {
- logger.error(error.stack);
- process.exitCode = 1;
- })
|