|
@@ -1,4 +1,5 @@
|
|
|
const logger = require("./utils/logger");
|
|
const logger = require("./utils/logger");
|
|
|
|
|
+const NumKit = require('./utils/num-kit')
|
|
|
const fs = require('fs').promises;
|
|
const fs = require('fs').promises;
|
|
|
|
|
|
|
|
async function readData() {
|
|
async function readData() {
|
|
@@ -39,7 +40,7 @@ function getFakeDragonMap(kLinesMap, FIRST_FEW_DAYS, BUY_LIMIT_RATE) {
|
|
|
let prevKline = kLines[index - 1]
|
|
let prevKline = kLines[index - 1]
|
|
|
|
|
|
|
|
// 开盘第一天不计算
|
|
// 开盘第一天不计算
|
|
|
- if (!kLine || !prevKline) continue
|
|
|
|
|
|
|
+ if (!kLine || (!prevKline)) continue
|
|
|
|
|
|
|
|
let rate = 100 * (kLine.Close - kLine.Open) / kLine.Open
|
|
let rate = 100 * (kLine.Close - kLine.Open) / kLine.Open
|
|
|
let maxRate = 100 * (kLine.High - kLine.Open) / kLine.Open
|
|
let maxRate = 100 * (kLine.High - kLine.Open) / kLine.Open
|
|
@@ -58,9 +59,10 @@ async function main() {
|
|
|
let kLinesMap = await readData()
|
|
let kLinesMap = await readData()
|
|
|
|
|
|
|
|
const FIRST_FEW_DAYS = 0 // 第几天的数据,0表示今天,1表示昨天,2表示前天,以此类推
|
|
const FIRST_FEW_DAYS = 0 // 第几天的数据,0表示今天,1表示昨天,2表示前天,以此类推
|
|
|
- const BUY_LIMIT_RATE = 10 // 从什么比例入场
|
|
|
|
|
|
|
+ const BUY_LIMIT_RATE = 5 // 从什么比例入场
|
|
|
|
|
|
|
|
- for (let i = 0; i <= kLinesMap['BTC_USDT'].length - 1; i++) {
|
|
|
|
|
|
|
+ let totalProfit = 0
|
|
|
|
|
+ for (let i = FIRST_FEW_DAYS; i <= kLinesMap['BTC_USDT'].length - 2; i++) {
|
|
|
// 真龙榜
|
|
// 真龙榜
|
|
|
let realDragonProfit = 0
|
|
let realDragonProfit = 0
|
|
|
let realDragonMap = getRealDragonMap(kLinesMap, i, BUY_LIMIT_RATE)
|
|
let realDragonMap = getRealDragonMap(kLinesMap, i, BUY_LIMIT_RATE)
|
|
@@ -75,9 +77,26 @@ async function main() {
|
|
|
fakeDragonProfit += fakeDragonMap[symbol].Profit
|
|
fakeDragonProfit += fakeDragonMap[symbol].Profit
|
|
|
// logger.info(fakeDragonMap[symbol].Symbol, fakeDragonMap[symbol].Profit, fakeDragonMap[symbol].MaxRate, fakeDragonMap[symbol].Rate)
|
|
// 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}`)
|
|
|
|
|
|
|
+
|
|
|
|
|
+ realDragonProfit = NumKit.getSubFloat(realDragonProfit, 2)
|
|
|
|
|
+ fakeDragonProfit = NumKit.getSubFloat(fakeDragonProfit, 2)
|
|
|
|
|
+ let realLength = Object.keys(realDragonMap).length
|
|
|
|
|
+ let fakeLength = Object.keys(fakeDragonMap).length
|
|
|
|
|
+ let realRate = NumKit.getSubFloat(realLength / (realLength + fakeLength), 2)
|
|
|
|
|
+ let fakeRate = NumKit.getSubFloat(1 - realRate, 2)
|
|
|
|
|
+ let expRealProfit = NumKit.getSubFloat(realRate * realDragonProfit, 2)
|
|
|
|
|
+ let expFakeProfit = NumKit.getSubFloat(fakeRate * fakeDragonProfit, 2)
|
|
|
|
|
+ let synProfit = NumKit.getSubFloat(expFakeProfit + expRealProfit, 2)
|
|
|
|
|
+
|
|
|
|
|
+ logger.info(`${i}日,真龙榜(${realLength}只)利润${realDragonProfit}%`
|
|
|
|
|
+ + `,假龙榜(${fakeLength}只)利润${fakeDragonProfit}%`
|
|
|
|
|
+ + `,真龙期望利润${expRealProfit}%,假龙期望利润${expFakeProfit}%,综合利润${synProfit}%`
|
|
|
|
|
+ )
|
|
|
|
|
+
|
|
|
|
|
+ totalProfit += synProfit
|
|
|
|
|
+ totalProfit = NumKit.getSubFloat(totalProfit, 2)
|
|
|
}
|
|
}
|
|
|
|
|
+ logger.info(`利润期望值总和:${totalProfit}%。`)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
main().catch((error) => {
|
|
main().catch((error) => {
|