Răsfoiți Sursa

修复btc的index错误

skyffire 1 an în urmă
părinte
comite
cb61257a7f
2 a modificat fișierele cu 26 adăugiri și 14 ștergeri
  1. 4 3
      pull_k_lines.js
  2. 22 11
      十面埋伏分析.js

+ 4 - 3
pull_k_lines.js

@@ -6,7 +6,7 @@ const logger = require('./utils/logger')
 
 const BASE_REST = 'https://api.binance.com'
 const QUOTE_ASSET = 'USDT'                                    // 拉取什么交易对的
-const NUMBER_OF_DAYS_TO_PULL = 360                         // 一共拉取多少K的数据
+const NUMBER_OF_DAYS_TO_PULL = 720                         // 一共拉取多少K的数据
 
 const socksProxy = 'socks://127.0.0.1:7890';
 const agent = new SocksProxyAgent(socksProxy);
@@ -53,8 +53,9 @@ 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}`)
+    // let url = `${BASE_REST}/api/v3/klines?symbol=${symbol.replace('_', '')}&interval=2h&limit=${NUMBER_OF_DAYS_TO_PULL}&startTime=1697040000000`
+    let url = `${BASE_REST}/api/v3/klines?symbol=${symbol.replace('_', '')}&interval=2h&limit=${NUMBER_OF_DAYS_TO_PULL}`
+    const kLines = await HttpQuery(url)
 
     kLinesMap[symbol] = []
     for (let kLine of kLines) {

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

@@ -42,13 +42,13 @@ function statisticB(kLines, index) {
 /* 指标学说 */
 
 // 一个新的指标,前N根共有M根与BTC走势一致
-function statisticC(kLines, btcKLines, index) {
+function statisticC(kLines, index, btcKLines, btcIndex) {
   let count = 0
-  for (let i = index - 1; i >= index - 6; i--) {
-    let kLine = kLines[i]
-    let btcKLine = btcKLines[i]
+  for (let i = 6; i >= 1; i--) {
+    let kLine = kLines[index - i]
+    let btcKLine = btcKLines[btcIndex - i]
 
-    if (!kLines[i - 1] || !btcKLines[i - 1]) break
+    if (!kLines[index - i - 1] || !btcKLines[btcIndex - i - 1]) break
 
     if (kLine.Open > kLine.Close && btcKLine.Open > btcKLine.Close) count += 1
     if (kLine.Open < kLine.Close && btcKLine.Open < btcKLine.Close) count += 1
@@ -107,7 +107,10 @@ function statisticC(kLines, btcKLines, index) {
 // }
 
 // 指标过滤
-function filter(btcKLines, kLines, index, symbol) {
+function filter(btcKLines, kLines, index, btcIndex, symbol) {
+  if (symbol === 'PDA_USDT') {
+    logger.info(kLines[index], btcKLines[index], index, btcIndex)
+  }
   // 过去N根K的累计涨幅
   let upRateN = statisticA(kLines, index)
   if (upRateN >= 90) {
@@ -120,7 +123,7 @@ function filter(btcKLines, kLines, index, symbol) {
   }
 
   // 过去N根k线一共有M根与btc走势一致
-  if (statisticC(btcKLines, kLines, index) > 4) {
+  if (statisticC(kLines, index, btcKLines, btcIndex) > 4) {
     return false
   }
 
@@ -134,14 +137,17 @@ function getRealDragonMap(btcKLines, kLinesMap, dayCount, BUY_LIMIT_RATE) {
     let kLines = kLinesMap[symbol]
 
     let index = kLines.length - (dayCount + 1)
+    let btcIndex = btcKLines.length - (dayCount + 1)
     let kLine = kLines[index]
     let prevKline = kLines[index - 1]
 
     // 开盘第一K不计算
     if (!kLine || !prevKline) continue
+    // 注意btc的时间戳要和计算的k的时间戳一样
+    if (btcKLines[btcIndex].Time !== kLine.Time) continue
 
     // 指标过滤
-    if (!filter(btcKLines, kLines, index, symbol)) continue
+    if (!filter(btcKLines, kLines, index, btcIndex, symbol)) continue
 
     let rate = 100 * (kLine.Close - kLine.Open) / kLine.Open
     // let upRate = 100 * (kLine.High - kLine.Open) / kLine.Open
@@ -172,14 +178,17 @@ function getFakeDragonMap(btcKLines, kLinesMap, dayCount, BUY_LIMIT_RATE) {
   for (let symbol in kLinesMap) {
     let kLines = kLinesMap[symbol]
     let index = kLines.length - (dayCount + 1)
+    let btcIndex = btcKLines.length - (dayCount + 1)
     let kLine = kLines[index]
     let prevKline = kLines[index - 1]
 
     // 开盘第一K不计算
     if (!kLine || (!prevKline)) continue
+    // 注意btc的时间戳要和计算的k的时间戳一样
+    if (btcKLines[btcIndex].Time !== kLine.Time) continue
 
     // 指标过滤
-    if (!filter(btcKLines, kLines, index, symbol)) continue
+    if (!filter(btcKLines, kLines, index, btcIndex, symbol)) continue
 
     let rate = 100 * (kLine.Close - kLine.Open) / kLine.Open
     if (rate < BUY_LIMIT_RATE) {
@@ -253,7 +262,7 @@ function dragonAnalysis(btcKLines, kLinesMap, dragonMap, _dayCount) {
   }
 }
 
-let NOOBS = ["MOB_USDT","ZRX_USDT","ID_USDT","FORTH_USDT","RAD_USDT","OAX_USDT","GFT_USDT","NULS_USDT","COS_USDT","HARD_USDT","PROM_USDT","JUP_USDT","DOT_USDT","KDA_USDT","RONIN_USDT","PDA_USDT","ORN_USDT","TRU_USDT","RARE_USDT","DOGE_USDT","WIN_USDT","MTL_USDT","TROY_USDT","OG_USDT","CELO_USDT","SUPER_USDT","SLP_USDT","MASK_USDT","QNT_USDT","ILV_USDT","ACA_USDT","OSMO_USDT","LQTY_USDT","UFT_USDT","LOOM_USDT","MEME_USDT","NFP_USDT","XAI_USDT","FET_USDT","WRX_USDT","DODO_USDT","BOND_USDT","MANTA_USDT","BOME_USDT","TKO_USDT","JTO_USDT","REI_USDT","VANRY_USDT","RSR_USDT","TWT_USDT","BURGER_USDT","STRK_USDT","HOT_USDT","CTXC_USDT","FLOKI_USDT","AST_USDT","LSK_USDT","SC_USDT","AUCTION_USDT","VTHO_USDT","REQ_USDT","BAR_USDT","FIS_USDT","HIGH_USDT","ASTR_USDT","AGLD_USDT","CFX_USDT","POLS_USDT","GMT_USDT","DEGO_USDT","FOR_USDT","POWR_USDT","POLYX_USDT","DOCK_USDT","OGN_USDT","GNS_USDT","LOKA_USDT","BADGER_USDT","WAVES_USDT","MATIC_USDT","ACE_USDT","FDUSD_USDT","ETH_USDT","TUSD_USDT","LINK_USDT","WAN_USDT","HBAR_USDT","ARPA_USDT","BAL_USDT","WNXM_USDT","KSM_USDT","UTK_USDT","XVS_USDT","AAVE_USDT","GRT_USDT","JUV_USDT","ASR_USDT","POND_USDT","AR_USDT","WAXP_USDT","CHESS_USDT","ADX_USDT","CITY_USDT","BSW_USDT","STEEM_USDT","LDO_USDT","OP_USDT","RDNT_USDT","EDU_USDT","WBETH_USDT","ALPINE_USDT","PAXG_USDT","SFP_USDT","USDP_USDT","ELF_USDT","BTC_USDT","ADA_USDT","XRP_USDT","TRX_USDT","VET_USDT","ATOM_USDT","BNT_USDT","LTO_USDT","STPT_USDT","LRC_USDT","YFI_USDT","KMD_USDT","JST_USDT","SUN_USDT","AKRO_USDT","AVA_USDT","PSG_USDT","ATM_USDT","ACM_USDT","GTC_USDT","PHA_USDT","FLUX_USDT","IMX_USDT","XNO_USDT","LEVER_USDT","GAS_USDT","QKC_USDT","WBTC_USDT","AERGO_USDT","PIVX_USDT"]
+let NOOBS = []
 
 async function main() {
   let kLinesMap = await readData()
@@ -261,7 +270,7 @@ async function main() {
   const BUY_LIMIT_RATE = 0               // 从什么比例入场
 
   const FIRST_FEW_DAYS = 0               // 第几K的数据,0表示今K,1表示昨K,2表示前K,以此类推
-  const BAKE_TEST_DAYS = 12              // 一共回测多少K
+  const BAKE_TEST_DAYS = 720              // 一共回测多少K
   // const FIRST_FEW_DAYS = 710                   // 第几K的数据,0表示今K,1表示昨K,2表示前K,以此类推
   // const BAKE_TEST_DAYS = 1                     // 一共回测多少K
 
@@ -308,6 +317,8 @@ async function main() {
         avgProfit -= 6.8
         if (avgProfit < -6.8) avgProfit = -6.8
         isStopLoss = true
+      } else if (avgProfit < -16.8) {
+        avgProfit = -16.8
       }
     } else {
       avgProfit = 0