Browse Source

加入btc涨幅,查看相关性。

skyffire 1 năm trước cách đây
mục cha
commit
23a80c748d
1 tập tin đã thay đổi với 29 bổ sung5 xóa
  1. 29 5
      十面埋伏分析.js

+ 29 - 5
十面埋伏分析.js

@@ -9,6 +9,7 @@ async function readData() {
   return JSON.parse(data)
 }
 
+let realCountMap = {}
 function getRealDragonMap(kLinesMap, FIRST_FEW_DAYS, BUY_LIMIT_RATE) {
   let realDragonMap = {}
   for (let symbol in kLinesMap) {
@@ -26,12 +27,19 @@ function getRealDragonMap(kLinesMap, FIRST_FEW_DAYS, BUY_LIMIT_RATE) {
       kLine.Rate = rate
       kLine.Profit = rate - BUY_LIMIT_RATE
       realDragonMap[symbol] = kLine
+
+      if (!realCountMap[symbol]) {
+        realCountMap[symbol] = 1
+      } else {
+        realCountMap[symbol] += 1
+      }
     }
   }
 
   return realDragonMap
 }
 
+let fakeCountMap = {}
 function getFakeDragonMap(kLinesMap, FIRST_FEW_DAYS, BUY_LIMIT_RATE) {
   let fakeDragonMap = {}
   for (let symbol in kLinesMap) {
@@ -50,6 +58,12 @@ function getFakeDragonMap(kLinesMap, FIRST_FEW_DAYS, BUY_LIMIT_RATE) {
       kLine.MaxRate = maxRate
       kLine.Profit = rate > 0 ? rate - BUY_LIMIT_RATE : -BUY_LIMIT_RATE
       fakeDragonMap[symbol] = kLine
+
+      if (!fakeCountMap[symbol]) {
+        fakeCountMap[symbol] = 1
+      } else {
+        fakeCountMap[symbol] += 1
+      }
     }
   }
 
@@ -59,9 +73,9 @@ function getFakeDragonMap(kLinesMap, FIRST_FEW_DAYS, BUY_LIMIT_RATE) {
 async function main() {
   let kLinesMap = await readData()
 
-  const FIRST_FEW_DAYS = 0            // 第几天的数据,0表示今天,1表示昨天,2表示前天,以此类推
-  const BUY_LIMIT_RATE = 3            // 从什么比例入场
-  const BAKE_TEST_DAYS = 30           // 一共回测多少天
+  const FIRST_FEW_DAYS = 1            // 第几天的数据,0表示今天,1表示昨天,2表示前天,以此类推
+  const BUY_LIMIT_RATE = 2.5          // 从什么比例入场
+  const BAKE_TEST_DAYS = 150          // 一共回测多少天
 
   let totalProfit = 0
   for (let i = FIRST_FEW_DAYS; i < BAKE_TEST_DAYS; i++) {
@@ -72,6 +86,8 @@ async function main() {
       realDragonProfit += realDragonMap[symbol].Profit
       // logger.info(realDragonMap[symbol].Symbol, realDragonMap[symbol].Profit, realDragonMap[symbol].Rate)
     }
+    // logger.info("----------------真龙榜数据定量分析----------------")
+    // dragonAnalysis(realDragonMap)
     // 假龙榜
     let fakeDragonProfit = 0
     let fakeDragonMap = getFakeDragonMap(kLinesMap, i, BUY_LIMIT_RATE)
@@ -79,6 +95,8 @@ async function main() {
       fakeDragonProfit += fakeDragonMap[symbol].Profit
       // logger.info(fakeDragonMap[symbol].Symbol, fakeDragonMap[symbol].Profit, fakeDragonMap[symbol].MaxRate, fakeDragonMap[symbol].Rate)
     }
+    // logger.info("----------------假龙榜数据定量分析----------------")
+    // dragonAnalysis(fakeDragonMap, fakeCountMap)
 
     realDragonProfit = NumKit.getSubFloat(realDragonProfit, 2)
     fakeDragonProfit = NumKit.getSubFloat(fakeDragonProfit, 2)
@@ -92,10 +110,13 @@ async function main() {
     let avgProfit = NumKit.getSubFloat(synProfit / (realLength + fakeLength), 2)
 
     let index = kLinesMap['BTC_USDT'].length - (i + 1)
-    let dateStr = TimeKit.getDateByMillisecond(kLinesMap['BTC_USDT'][index].Time)
+    let btcK = kLinesMap['BTC_USDT'][index]
+    let dateStr = TimeKit.getDateByMillisecond(btcK.Time)
+    let btcUpRate = NumKit.getSubFloat(100 * (btcK.Close - btcK.Open) / btcK.Open, 2)
+
     logger.info(`${i}日(${dateStr}, ${realLength + fakeLength}只),真龙榜(${realLength}只)利润${realDragonProfit}%`
       + `,假龙榜(${fakeLength}只)利润${fakeDragonProfit}%`
-      + `,真龙期望利润${expRealProfit}%,假龙期望利润${expFakeProfit}%,综合利润${synProfit}%,平均每只利润${avgProfit}%`
+      + `,真龙期望利润${expRealProfit}%,假龙期望利润${expFakeProfit}%,综合利润${synProfit}%,平均每只利润${avgProfit}%,BTC涨幅${btcUpRate}%`
     )
 
     totalProfit += avgProfit
@@ -104,6 +125,9 @@ async function main() {
 
   let dayProfit = NumKit.getSubFloat(totalProfit / BAKE_TEST_DAYS, 2)
   logger.info(`利润期望值总和:${totalProfit}%,平均日化${dayProfit}%。`)
+  for (let symbol in fakeCountMap) {
+    logger.info(`${symbol} 真${realCountMap[symbol]},假${fakeCountMap[symbol]}`)
+  }
 }
 
 main().catch((error) => {