Просмотр исходного кода

使用指标进行过滤分析

skyffire 1 год назад
Родитель
Сommit
04663742b9
2 измененных файлов с 80 добавлено и 69 удалено
  1. BIN
      chart.png
  2. 80 69
      十面埋伏分析.js

+ 80 - 69
十面埋伏分析.js

@@ -10,68 +10,6 @@ async function readData() {
   return JSON.parse(data)
 }
 
-let realCountMap = {}
-function getRealDragonMap(kLinesMap, dayCount, BUY_LIMIT_RATE) {
-  let realDragonMap = {}
-  for (let symbol in kLinesMap) {
-    let kLines = kLinesMap[symbol]
-
-    let index = kLines.length - (dayCount + 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 = NumKit.getSubFloat(rate - BUY_LIMIT_RATE, 2)
-      realDragonMap[symbol] = kLine
-
-      if (!realCountMap[symbol]) {
-        realCountMap[symbol] = kLine.Profit
-      } else {
-        realCountMap[symbol] += kLine.Profit
-      }
-      realCountMap[symbol] = NumKit.getSubFloat(realCountMap[symbol], 2)
-    }
-  }
-
-  return realDragonMap
-}
-
-let fakeCountMap = {}
-function getFakeDragonMap(kLinesMap, dayCount, BUY_LIMIT_RATE) {
-  let fakeDragonMap = {}
-  for (let symbol in kLinesMap) {
-    let kLines = kLinesMap[symbol]
-    let index = kLines.length - (dayCount + 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 = NumKit.getSubFloat(rate > 0 ? rate - BUY_LIMIT_RATE : -BUY_LIMIT_RATE, 2)
-      kLine.Profit = NumKit.getSubFloat(rate - BUY_LIMIT_RATE, 2)
-      fakeDragonMap[symbol] = kLine
-
-      if (!fakeCountMap[symbol]) {
-        fakeCountMap[symbol] = kLine.Profit
-      } else {
-        fakeCountMap[symbol] += kLine.Profit
-      }
-      fakeCountMap[symbol] = NumKit.getSubFloat(fakeCountMap[symbol], 2)
-    }
-  }
-
-  return fakeDragonMap
-}
-
 // 统计过去N日累计涨幅,跟这个无关
 function statisticA(kLines, index) {
   let startK = kLines[index - 2]
@@ -281,10 +219,10 @@ function statisticK(kLines, index) {
   return count
 }
 
-// 返回过去一共N天涨幅超过M%
+// 返回过去一共N天涨幅超过M%,这个有关的
 function statisticL(kLines, index) {
   let count = 0
-  for (let i = index - 1; i >= index - 10; i--) {
+  for (let i = index - 1; i >= index - 3; i--) {
     let kLine = kLines[i]
 
     if (!kLines[i - 1]) break
@@ -297,6 +235,74 @@ function statisticL(kLines, index) {
   return count
 }
 
+let realCountMap = {}
+function getRealDragonMap(kLinesMap, dayCount, BUY_LIMIT_RATE) {
+  let realDragonMap = {}
+  for (let symbol in kLinesMap) {
+    let kLines = kLinesMap[symbol]
+
+    let index = kLines.length - (dayCount + 1)
+    let kLine = kLines[index]
+    let prevKline = kLines[index - 1]
+
+    // 开盘第一天不计算
+    if (!kLine || !prevKline) continue
+
+    // 指标过滤
+    // if (statisticL(kLines, index) !== 0) continue
+
+    let rate = 100 * (kLine.Close - kLine.Open) / kLine.Open
+    if (rate > BUY_LIMIT_RATE) {
+      kLine.Rate = rate
+      kLine.Profit = NumKit.getSubFloat(rate - BUY_LIMIT_RATE, 2)
+      realDragonMap[symbol] = kLine
+
+      if (!realCountMap[symbol]) {
+        realCountMap[symbol] = kLine.Profit
+      } else {
+        realCountMap[symbol] += kLine.Profit
+      }
+      realCountMap[symbol] = NumKit.getSubFloat(realCountMap[symbol], 2)
+    }
+  }
+
+  return realDragonMap
+}
+
+let fakeCountMap = {}
+function getFakeDragonMap(kLinesMap, dayCount, BUY_LIMIT_RATE) {
+  let fakeDragonMap = {}
+  for (let symbol in kLinesMap) {
+    let kLines = kLinesMap[symbol]
+    let index = kLines.length - (dayCount + 1)
+    let kLine = kLines[index]
+    let prevKline = kLines[index - 1]
+
+    // 开盘第一天不计算
+    if (!kLine || (!prevKline)) continue
+
+    // 指标过滤
+    // if (statisticL(kLines, index) !== 0) continue
+
+    let rate = 100 * (kLine.Close - kLine.Open) / kLine.Open
+    if (rate < BUY_LIMIT_RATE) {
+      kLine.Rate = rate
+      // 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
+
+      if (!fakeCountMap[symbol]) {
+        fakeCountMap[symbol] = kLine.Profit
+      } else {
+        fakeCountMap[symbol] += kLine.Profit
+      }
+      fakeCountMap[symbol] = NumKit.getSubFloat(fakeCountMap[symbol], 2)
+    }
+  }
+
+  return fakeDragonMap
+}
+
 let dataLeft = []
 let dataRight = []
 let tempLeft = []
@@ -316,6 +322,8 @@ function dragonAnalysis(btcKLines, kLinesMap, dragonMap, dayCount) {
     //   // + `前30日平均振幅${statisticB(kLines, index)}%。`
     //   + `前30日平均(High - Close)${x}%。`
     // )
+
+    // 打印实际的量
     // if (y > 0) {
     //   if (dataRight[x]) {
     //     dataRight[x] += y
@@ -329,6 +337,8 @@ function dragonAnalysis(btcKLines, kLinesMap, dragonMap, dayCount) {
     //     dataLeft[x] = y
     //   }
     // }
+
+    // 打印倍数
     if (y > 0) {
       if (tempRight[x]) {
         tempRight[x] += y
@@ -353,29 +363,30 @@ async function main() {
 
   const FIRST_FEW_DAYS = 1               // 第几天的数据,0表示今天,1表示昨天,2表示前天,以此类推
   const BUY_LIMIT_RATE = 0               // 从什么比例入场
-  const BAKE_TEST_DAYS = 150             // 一共回测多少天
+  const BAKE_TEST_DAYS = 60              // 一共回测多少天, 150天是熊市最没有交易量的时候
 
 
   let btcKLines = kLinesMap['BTC_USDT']
   let totalProfit = 0
   for (let day_count = FIRST_FEW_DAYS; day_count < FIRST_FEW_DAYS + BAKE_TEST_DAYS; day_count++) {
     // 赚钱榜
+    // logger.info("----------------赚钱榜数据分析----------------")
     let realDragonProfit = 0
     let realDragonMap = getRealDragonMap(kLinesMap, day_count, BUY_LIMIT_RATE)
     for (let symbol in realDragonMap) {
       realDragonProfit += realDragonMap[symbol].Profit
-      // logger.info(realDragonMap[symbol].Symbol, realDragonMap[symbol].Profit, realDragonMap[symbol].Rate)
+      // logger.info(`${realDragonMap[symbol].Symbol}, ${realDragonMap[symbol].Profit}%`)
     }
-    logger.info("----------------赚钱榜数据分析----------------")
     dragonAnalysis(btcKLines, kLinesMap, realDragonMap, day_count)
+
+    // logger.info("----------------亏钱榜数据分析----------------")
     // 亏钱榜
     let fakeDragonProfit = 0
     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].Rate)
+      // logger.info(`${fakeDragonMap[symbol].Symbol}, ${fakeDragonMap[symbol].Profit}%`)
     }
-    logger.info("----------------亏钱榜数据分析----------------")
     dragonAnalysis(btcKLines, kLinesMap, fakeDragonMap, day_count)
 
     realDragonProfit = NumKit.getSubFloat(realDragonProfit, 2)