|
|
@@ -54,10 +54,8 @@ function getFakeDragonMap(kLinesMap, dayCount, BUY_LIMIT_RATE) {
|
|
|
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) {
|
|
|
+ if (rate < BUY_LIMIT_RATE) {
|
|
|
kLine.Rate = rate
|
|
|
- kLine.MaxRate = maxRate
|
|
|
// kLine.Profit = NumKit.getSubFloat(rate > 0 ? rate - BUY_LIMIT_RATE : -BUY_LIMIT_RATE, 2)
|
|
|
kLine.Profit = NumKit.getSubFloat(rate - BUY_LIMIT_RATE, 2)
|
|
|
fakeDragonMap[symbol] = kLine
|
|
|
@@ -153,11 +151,11 @@ function statisticD(kLines, index) {
|
|
|
return NumKit.getSubFloat(totalRiseAndFall / kCount, 2)
|
|
|
}
|
|
|
|
|
|
-// 过去60天的上影线幅度大于2.5%,并且收盘是阴线的次数
|
|
|
+// 过去N天的上影线幅度大于2.5%,并且收盘是阴线的次数
|
|
|
function statisticE(kLines, index) {
|
|
|
let kCount = 0
|
|
|
let count = 0
|
|
|
- for (let i = index - 1; i >= index - 60; i--) {
|
|
|
+ for (let i = index - 1; i >= index - 30; i--) {
|
|
|
let kLine = kLines[i]
|
|
|
|
|
|
if (!kLines[i - 1]) break
|
|
|
@@ -221,7 +219,7 @@ function statisticG(kLines, index) {
|
|
|
function statisticH(kLines, index) {
|
|
|
let kCount = 0
|
|
|
let rst = 0
|
|
|
- for (let i = index - 1; i >= index - 3; i--) {
|
|
|
+ for (let i = index - 1; i >= index - 2; i--) {
|
|
|
let kLine = kLines[i]
|
|
|
|
|
|
if (!kLines[i - 1]) break
|
|
|
@@ -236,23 +234,47 @@ function statisticH(kLines, index) {
|
|
|
return 0
|
|
|
}
|
|
|
|
|
|
- return parseInt(NumKit.getSubFloat((rst / kCount - 50) * 10 + 50, 2))
|
|
|
+ return parseInt(NumKit.getSubFloat((rst / kCount - 50) * 10 + 100, 2))
|
|
|
+}
|
|
|
+
|
|
|
+// *******过去N天阴线数量,有一定关系
|
|
|
+function statisticI(kLines, index) {
|
|
|
+ let count = 0
|
|
|
+ for (let i = index - 1; i >= index - 10; i--) {
|
|
|
+ let kLine = kLines[i]
|
|
|
+
|
|
|
+ if (!kLines[i - 1]) break
|
|
|
+
|
|
|
+ count += kLine.Close < kLine.Open ? 1 : 0
|
|
|
+ }
|
|
|
+
|
|
|
+ return count
|
|
|
}
|
|
|
|
|
|
-// BTC涨跌幅与当日收益率的关系
|
|
|
-// function statisticI(btcKLines, kLines, index) {
|
|
|
-//
|
|
|
-// }
|
|
|
+// 返回过去一共连续N天阴线
|
|
|
+function statisticJ(kLines, index) {
|
|
|
+ let count = 0
|
|
|
+ for (let i = index - 1; i >= 0; i--) {
|
|
|
+ let kLine = kLines[i]
|
|
|
+
|
|
|
+ if (!kLines[i - 1]) break
|
|
|
+ if (kLine.Close > kLine.Open) break
|
|
|
+
|
|
|
+ count += 1
|
|
|
+ }
|
|
|
+
|
|
|
+ return count
|
|
|
+}
|
|
|
|
|
|
let dataLeft = []
|
|
|
let dataRight = []
|
|
|
-let dataY = [...Array(150).keys()]
|
|
|
+let dataY = [...Array(60).keys()]
|
|
|
function dragonAnalysis(btcKLines, kLinesMap, dragonMap, dayCount) {
|
|
|
for (let symbol in dragonMap) {
|
|
|
let kLines = kLinesMap[symbol]
|
|
|
let index = kLines.length - (dayCount + 1)
|
|
|
|
|
|
- let x = statisticH(kLines, index)
|
|
|
+ let x = statisticJ(kLines, index)
|
|
|
let y = dragonMap[symbol].Profit
|
|
|
|
|
|
// logger.info(
|
|
|
@@ -262,6 +284,7 @@ function dragonAnalysis(btcKLines, kLinesMap, dragonMap, dayCount) {
|
|
|
// + `前30日平均(High - Close)${x}%。`
|
|
|
// )
|
|
|
if (dataRight[x]) {
|
|
|
+ logger.info(x, dataRight[x], y)
|
|
|
dataRight[x] += y
|
|
|
} else {
|
|
|
dataRight[x] = y
|
|
|
@@ -272,9 +295,9 @@ function dragonAnalysis(btcKLines, kLinesMap, dragonMap, dayCount) {
|
|
|
async function main() {
|
|
|
let kLinesMap = await readData()
|
|
|
|
|
|
- const FIRST_FEW_DAYS = 1 // 第几天的数据,0表示今天,1表示昨天,2表示前天,以此类推
|
|
|
- const BUY_LIMIT_RATE = 2.5 // 从什么比例入场
|
|
|
- const BAKE_TEST_DAYS = 30 // 一共回测多少天
|
|
|
+ const FIRST_FEW_DAYS = 1 // 第几天的数据,0表示今天,1表示昨天,2表示前天,以此类推
|
|
|
+ const BUY_LIMIT_RATE = 0 // 从什么比例入场
|
|
|
+ const BAKE_TEST_DAYS = 10 // 一共回测多少天
|
|
|
|
|
|
|
|
|
let btcKLines = kLinesMap['BTC_USDT']
|
|
|
@@ -294,7 +317,7 @@ async function main() {
|
|
|
let fakeDragonMap = getFakeDragonMap(kLinesMap, day_count, 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(fakeDragonMap[symbol].Symbol, fakeDragonMap[symbol].Profit, fakeDragonMap[symbol].Rate)
|
|
|
}
|
|
|
logger.info("----------------亏钱榜数据分析----------------")
|
|
|
dragonAnalysis(btcKLines, kLinesMap, fakeDragonMap, day_count)
|