Преглед на файлове

非常接近实盘的一个回测方式。

skyffire преди 1 година
родител
ревизия
bf8c815620
променени са 2 файла, в които са добавени 23 реда и са изтрити 6 реда
  1. 1 1
      pull_k_lines.js
  2. 22 5
      十面埋伏分析.js

+ 1 - 1
pull_k_lines.js

@@ -54,7 +54,7 @@ async function main() {
   for (let i = 0; i < symbols.length; i++) {
     let symbol = symbols[i]
     const kLines = await HttpQuery(
-      `${BASE_REST}/api/v3/klines?symbol=${symbol.replace('_', '')}&interval=2h&limit=${NUMBER_OF_DAYS_TO_PULL}&startTime=1696089600000`)
+      `${BASE_REST}/api/v3/klines?symbol=${symbol.replace('_', '')}&interval=2h&limit=${NUMBER_OF_DAYS_TO_PULL}`)
 
     kLinesMap[symbol] = []
     for (let kLine of kLines) {

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

@@ -91,6 +91,21 @@ function statisticE(kLines, index) {
   return date.getHours()
 }
 
+// 过去24小时成交额度之和。大于1B用1000表示,小于10M用0表示,没啥意义
+// function statisticF(kLines, index) {
+//   let sum = 0
+//   for (let i = index - 1; i >= index - 12; i--) {
+//     let kLine = kLines[i]
+//
+//     if (!kLines[i - 1]) break
+//
+//     sum += kLine.Turnover
+//   }
+//
+//   let rst = parseInt(sum / 1e7)
+//   return rst > 100 ? 100 : rst
+// }
+
 // 指标过滤
 function filter(btcKLines, kLines, index) {
   // 过去N根K的累计涨幅
@@ -193,7 +208,7 @@ let dataLeft = []
 let dataRight = []
 let tempLeft = []
 let tempRight = []
-let dataY = [...Array(30).keys()]
+let dataY = [...Array(101).keys()]
 function dragonAnalysis(btcKLines, kLinesMap, dragonMap, dayCount) {
   for (let symbol in dragonMap) {
     let kLines = kLinesMap[symbol]
@@ -248,7 +263,7 @@ async function main() {
 
 
   const FIRST_FEW_DAYS = 1               // 第几K的数据,0表示今K,1表示昨K,2表示前K,以此类推
-  const BAKE_TEST_DAYS = 900              // 一共回测多少K
+  const BAKE_TEST_DAYS = 100              // 一共回测多少K
   // const FIRST_FEW_DAYS = 710                   // 第几K的数据,0表示今K,1表示昨K,2表示前K,以此类推
   // const BAKE_TEST_DAYS = 1                     // 一共回测多少K
 
@@ -257,7 +272,8 @@ async function main() {
   let totalProfit = 0
   for (let day_count = FIRST_FEW_DAYS; day_count < FIRST_FEW_DAYS + BAKE_TEST_DAYS; day_count++) {
     let btcKline = btcKLines[btcKLines.length - (day_count + 1)]
-    let btcKlineDownRate = 100 * (btcKline.Open - btcKline.Low) / btcKline.Open // 可能的回撤计算
+    // let btcKlineDownRate = 100 * (btcKline.Open - btcKline.Low) / btcKline.Open // 可能的回撤计算
+    let btcKlineUpRate = 100 * (btcKline.High - btcKline.Close) / btcKline.High // 可能的回撤计算
 
     // 赚钱榜
     // logger.info("----------------赚钱榜数据分析----------------")
@@ -291,8 +307,9 @@ async function main() {
     let avgProfit = NumKit.getSubFloat(synProfit / (realLength + fakeLength), 2)
     let isStopLoss = false
     if ((Object.keys(fakeDragonMap).length !== 0 || Object.keys(realDragonMap).length !== 0)) {
-      if (avgProfit < -0.8 || btcKlineDownRate > 0.5) {
-        avgProfit = -1
+      if (btcKlineUpRate > 3.4) {
+        avgProfit -= 6.8
+        if (avgProfit < -6.8) avgProfit = -6.8
         isStopLoss = true
       }
     } else {