|
@@ -274,9 +274,12 @@ async function main() {
|
|
|
// const FIRST_FEW_DAYS = 710 // 第几K的数据,0表示今K,1表示昨K,2表示前K,以此类推
|
|
// const FIRST_FEW_DAYS = 710 // 第几K的数据,0表示今K,1表示昨K,2表示前K,以此类推
|
|
|
// const BAKE_TEST_DAYS = 1 // 一共回测多少K
|
|
// const BAKE_TEST_DAYS = 1 // 一共回测多少K
|
|
|
|
|
|
|
|
|
|
+ let profitList = []
|
|
|
|
|
+ let initProfit = 1
|
|
|
|
|
+ let profitCount = []
|
|
|
let btcKLines = kLinesMap['BTC_USDT']
|
|
let btcKLines = kLinesMap['BTC_USDT']
|
|
|
let totalProfit = 0
|
|
let totalProfit = 0
|
|
|
- for (let day_count = FIRST_FEW_DAYS + BAKE_TEST_DAYS - 1; day_count > 0; day_count--) {
|
|
|
|
|
|
|
+ for (let day_count = FIRST_FEW_DAYS + BAKE_TEST_DAYS - 1; day_count > FIRST_FEW_DAYS; day_count--) {
|
|
|
let btcKline = btcKLines[btcKLines.length - (day_count + 1)]
|
|
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 // 可能的回撤计算
|
|
let btcKlineUpRate = 100 * (btcKline.High - btcKline.Close) / btcKline.High // 可能的回撤计算
|
|
@@ -287,7 +290,7 @@ async function main() {
|
|
|
let realDragonMap = getRealDragonMap(btcKLines, kLinesMap, day_count, BUY_LIMIT_RATE)
|
|
let realDragonMap = getRealDragonMap(btcKLines, kLinesMap, day_count, BUY_LIMIT_RATE)
|
|
|
for (let symbol in realDragonMap) {
|
|
for (let symbol in realDragonMap) {
|
|
|
realDragonProfit += realDragonMap[symbol].Profit
|
|
realDragonProfit += realDragonMap[symbol].Profit
|
|
|
- logger.info(`${realDragonMap[symbol].Symbol}, ${realDragonMap[symbol].Profit}%`)
|
|
|
|
|
|
|
+ // logger.info(`${realDragonMap[symbol].Symbol}, ${realDragonMap[symbol].Profit}%`)
|
|
|
}
|
|
}
|
|
|
dragonAnalysis(btcKLines, kLinesMap, realDragonMap, day_count)
|
|
dragonAnalysis(btcKLines, kLinesMap, realDragonMap, day_count)
|
|
|
|
|
|
|
@@ -297,7 +300,7 @@ async function main() {
|
|
|
let fakeDragonMap = getFakeDragonMap(btcKLines, kLinesMap, day_count, BUY_LIMIT_RATE)
|
|
let fakeDragonMap = getFakeDragonMap(btcKLines, kLinesMap, day_count, BUY_LIMIT_RATE)
|
|
|
for (let symbol in fakeDragonMap) {
|
|
for (let symbol in fakeDragonMap) {
|
|
|
fakeDragonProfit += fakeDragonMap[symbol].Profit
|
|
fakeDragonProfit += fakeDragonMap[symbol].Profit
|
|
|
- logger.info(`${fakeDragonMap[symbol].Symbol}, ${fakeDragonMap[symbol].Profit}%`)
|
|
|
|
|
|
|
+ // logger.info(`${fakeDragonMap[symbol].Symbol}, ${fakeDragonMap[symbol].Profit}%`)
|
|
|
}
|
|
}
|
|
|
dragonAnalysis(btcKLines, kLinesMap, fakeDragonMap, day_count)
|
|
dragonAnalysis(btcKLines, kLinesMap, fakeDragonMap, day_count)
|
|
|
|
|
|
|
@@ -314,7 +317,10 @@ async function main() {
|
|
|
isStopLoss = true
|
|
isStopLoss = true
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- avgProfit = NumKit.getSubFloat(avgProfit - 0.2, 2) // 手续费算进去
|
|
|
|
|
|
|
+ avgProfit = NumKit.getSubFloat(avgProfit - 0.1, 2) // 手续费算进去
|
|
|
|
|
+ initProfit *= (100 + avgProfit) / 100
|
|
|
|
|
+ profitList.push(initProfit)
|
|
|
|
|
+ profitCount.push(profitList.length)
|
|
|
} else {
|
|
} else {
|
|
|
avgProfit = 0
|
|
avgProfit = 0
|
|
|
}
|
|
}
|
|
@@ -337,6 +343,8 @@ async function main() {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
let dayProfit = NumKit.getSubFloat(totalProfit / BAKE_TEST_DAYS, 2)
|
|
let dayProfit = NumKit.getSubFloat(totalProfit / BAKE_TEST_DAYS, 2)
|
|
|
|
|
+ logger.info(JSON.stringify(profitList))
|
|
|
|
|
+ logger.info(JSON.stringify(profitCount))
|
|
|
logger.info(`利润期望值总和:${totalProfit}%,平均根化${dayProfit}%。`)
|
|
logger.info(`利润期望值总和:${totalProfit}%,平均根化${dayProfit}%。`)
|
|
|
// let lastData = []
|
|
// let lastData = []
|
|
|
// for (let x = 0; x < dataRight.length; x++) {
|
|
// for (let x = 0; x < dataRight.length; x++) {
|