فهرست منبع

架子搭好了,可以做一些基础分析了。

skyffire 1 سال پیش
والد
کامیت
c61e1635d6
2فایلهای تغییر یافته به همراه88 افزوده شده و 2 حذف شده
  1. 2 2
      pull_k_lines.js
  2. 86 0
      十面埋伏分析.js

+ 2 - 2
pull_k_lines.js

@@ -1,4 +1,6 @@
 const axios = require('axios');
+const fs = require('fs');
+
 const { SocksProxyAgent } = require('socks-proxy-agent');
 const logger = require('./utils/logger')
 
@@ -9,8 +11,6 @@ const NUMBER_OF_DAYS_TO_PULL = 30                           // 一共拉取多
 const socksProxy = 'socks://127.0.0.1:7890';
 const agent = new SocksProxyAgent(socksProxy);
 
-const fs = require('fs');
-
 async function HttpQuery(url) {
   try {
     let rst = await axios.get(url, {

+ 86 - 0
十面埋伏分析.js

@@ -0,0 +1,86 @@
+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;
+})