skyffire 1 anno fa
parent
commit
add9d98103
2 ha cambiato i file con 24 aggiunte e 26 eliminazioni
  1. 2 2
      pull_k_lines.js
  2. 22 24
      十面埋伏分析.js

+ 2 - 2
pull_k_lines.js

@@ -55,7 +55,7 @@ async function main() {
   for (let i = 0; i < symbols.length; i++) {
   for (let i = 0; i < symbols.length; i++) {
     let symbol = symbols[i]
     let symbol = symbols[i]
     const kLines = await HttpQuery(
     const kLines = await HttpQuery(
-      `${BASE_REST}/api/v3/klines?symbol=${symbol.replace('_', '')}&interval=4h&limit=${NUMBER_OF_DAYS_TO_PULL}`)
+      `${BASE_REST}/api/v3/klines?symbol=${symbol.replace('_', '')}&interval=2h&limit=${NUMBER_OF_DAYS_TO_PULL}`)
 
 
     kLinesMap[symbol] = []
     kLinesMap[symbol] = []
     for (let kLine of kLines) {
     for (let kLine of kLines) {
@@ -76,7 +76,7 @@ async function main() {
 
 
     // length - 1是最新一天的
     // length - 1是最新一天的
     logger.info(`${symbol}拉取完毕,拉取到${kLinesMap[symbol].length}条(${i+1}/${symbols.length})。`)
     logger.info(`${symbol}拉取完毕,拉取到${kLinesMap[symbol].length}条(${i+1}/${symbols.length})。`)
-    await TimeKit.sleep(1000)
+    // await TimeKit.sleep(1000)
   }
   }
 
 
   fs.writeFile('./data/k_lines.json', JSON.stringify(kLinesMap, null, 2), 'utf8', (err) => {
   fs.writeFile('./data/k_lines.json', JSON.stringify(kLinesMap, null, 2), 'utf8', (err) => {

+ 22 - 24
十面埋伏分析.js

@@ -13,7 +13,7 @@ async function readData() {
 /* 概率学说 */
 /* 概率学说 */
 // 统计过去N日累计涨幅,【有一定关系】
 // 统计过去N日累计涨幅,【有一定关系】
 function statisticA(kLines, index) {
 function statisticA(kLines, index) {
-  let startK = kLines[index - 10]
+  let startK = kLines[index - 12]
   let endK = kLines[index - 1]
   let endK = kLines[index - 1]
 
 
   if (!startK || !endK) {
   if (!startK || !endK) {
@@ -23,10 +23,10 @@ function statisticA(kLines, index) {
   return parseInt(100 * (endK.Close - startK.Open) / startK.Open) + 100
   return parseInt(100 * (endK.Close - startK.Open) / startK.Open) + 100
 }
 }
 
 
-// 返回过去一共N涨幅超过M%【这个有关的】
+// 返回过去一共NK涨幅超过M%【这个有关的】
 function statisticB(kLines, index) {
 function statisticB(kLines, index) {
   let count = 0
   let count = 0
-  for (let i = index - 1; i >= index - 3; i--) {
+  for (let i = index - 1; i >= index - 2; i--) {
     let kLine = kLines[i]
     let kLine = kLines[i]
 
 
     if (!kLines[i - 1]) break
     if (!kLines[i - 1]) break
@@ -74,12 +74,12 @@ function statisticD(_kLines, _index) {
 function filter(kLines, index) {
 function filter(kLines, index) {
   // 过去N根K的累计涨幅
   // 过去N根K的累计涨幅
   let upRateN = statisticA(kLines, index)
   let upRateN = statisticA(kLines, index)
-  if (upRateN <= 75 || upRateN >= 95) {
+  if (upRateN <= 75 || upRateN >= 90) {
     return false
     return false
   }
   }
 
 
-  // 一共N涨幅超过M%
-  if (statisticB(kLines, index) > 1) {
+  // 一共NK涨幅超过M%
+  if (statisticB(kLines, index) > 0) {
     return false
     return false
   }
   }
 
 
@@ -96,7 +96,7 @@ function getRealDragonMap(kLinesMap, dayCount, BUY_LIMIT_RATE) {
     let kLine = kLines[index]
     let kLine = kLines[index]
     let prevKline = kLines[index - 1]
     let prevKline = kLines[index - 1]
 
 
-    // 开盘第一不计算
+    // 开盘第一K不计算
     if (!kLine || !prevKline) continue
     if (!kLine || !prevKline) continue
 
 
     // 指标过滤
     // 指标过滤
@@ -134,7 +134,7 @@ function getFakeDragonMap(kLinesMap, dayCount, BUY_LIMIT_RATE) {
     let kLine = kLines[index]
     let kLine = kLines[index]
     let prevKline = kLines[index - 1]
     let prevKline = kLines[index - 1]
 
 
-    // 开盘第一不计算
+    // 开盘第一K不计算
     if (!kLine || (!prevKline)) continue
     if (!kLine || (!prevKline)) continue
 
 
     // 指标过滤
     // 指标过滤
@@ -163,7 +163,7 @@ let dataLeft = []
 let dataRight = []
 let dataRight = []
 let tempLeft = []
 let tempLeft = []
 let tempRight = []
 let tempRight = []
-let dataY = [...Array(10).keys()]
+let dataY = [...Array(200).keys()]
 function dragonAnalysis(btcKLines, kLinesMap, dragonMap, dayCount) {
 function dragonAnalysis(btcKLines, kLinesMap, dragonMap, dayCount) {
   for (let symbol in dragonMap) {
   for (let symbol in dragonMap) {
     let kLines = kLinesMap[symbol]
     let kLines = kLinesMap[symbol]
@@ -172,13 +172,6 @@ function dragonAnalysis(btcKLines, kLinesMap, dragonMap, dayCount) {
     let x = statisticB(kLines, index)
     let x = statisticB(kLines, index)
     let y = dragonMap[symbol].Profit
     let y = dragonMap[symbol].Profit
 
 
-    // logger.info(
-    //   `${symbol}的分析(${y}%)`
-    //   // + `前7日累计涨幅${statisticA(kLines, index)}%。`
-    //   // + `前30日平均振幅${statisticB(kLines, index)}%。`
-    //   + `前30日平均(High - Close)${x}%。`
-    // )
-
     // 打印实际的量
     // 打印实际的量
     // if (y > 0) {
     // if (y > 0) {
     //   if (dataRight[x]) {
     //   if (dataRight[x]) {
@@ -218,10 +211,10 @@ async function main() {
   let kLinesMap = await readData()
   let kLinesMap = await readData()
 
 
   const BUY_LIMIT_RATE = 0               // 从什么比例入场
   const BUY_LIMIT_RATE = 0               // 从什么比例入场
-  const FIRST_FEW_DAYS = 1               // 第几天的数据,0表示今天,1表示昨天,2表示前天,以此类推
-  const BAKE_TEST_DAYS = 60              // 一共回测多少天
-  // const FIRST_FEW_DAYS = 710               // 第几天的数据,0表示今天,1表示昨天,2表示前天,以此类推
-  // const BAKE_TEST_DAYS = 1              // 一共回测多少
+  const FIRST_FEW_DAYS = 1               // 第几K的数据,0表示今K,1表示昨K,2表示前K,以此类推
+  const BAKE_TEST_DAYS = 980              // 一共回测多少K
+  // const FIRST_FEW_DAYS = 710               // 第几K的数据,0表示今K,1表示昨K,2表示前K,以此类推
+  // const BAKE_TEST_DAYS = 1              // 一共回测多少K
 
 
 
 
   let btcKLines = kLinesMap['BTC_USDT']
   let btcKLines = kLinesMap['BTC_USDT']
@@ -261,14 +254,19 @@ async function main() {
     let synProfit = NumKit.getSubFloat(expFakeProfit + expRealProfit, 2)
     let synProfit = NumKit.getSubFloat(expFakeProfit + expRealProfit, 2)
     let avgProfit = NumKit.getSubFloat(synProfit / (realLength + fakeLength), 2)
     let avgProfit = NumKit.getSubFloat(synProfit / (realLength + fakeLength), 2)
     let isStopLoss = false
     let isStopLoss = false
-    if (avgProfit < -0.8 || btcKlineDownRate > 0.8) {
-      avgProfit = -1
-      isStopLoss = true
+    if ((Object.keys(fakeDragonMap).length !== 0 || Object.keys(realDragonMap).length !== 0)) {
+      if (avgProfit < -0.8 || btcKlineDownRate > 0.8) {
+        avgProfit = -1
+        isStopLoss = true
+      }
+    } else {
+      avgProfit = 0
     }
     }
 
 
+
     let index = kLinesMap['BTC_USDT'].length - (day_count + 1)
     let index = kLinesMap['BTC_USDT'].length - (day_count + 1)
     let btcK = kLinesMap['BTC_USDT'][index]
     let btcK = kLinesMap['BTC_USDT'][index]
-    let dateStr = TimeKit.getDateByMillisecond(btcK.Time)
+    let dateStr = TimeKit.getTimeByMillisecond(btcK.Time)
     let btcUpRate = NumKit.getSubFloat(100 * (btcK.Close - btcK.Open) / btcK.Open, 2)
     let btcUpRate = NumKit.getSubFloat(100 * (btcK.Close - btcK.Open) / btcK.Open, 2)
 
 
     logger.info(`${day_count}日(${dateStr}, ${realLength + fakeLength}只),赚钱榜(${realLength}只)利润${realDragonProfit}%`
     logger.info(`${day_count}日(${dateStr}, ${realLength + fakeLength}只),赚钱榜(${realLength}只)利润${realDragonProfit}%`