|
@@ -11,7 +11,7 @@ async function readData() {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/* 概率学说 */
|
|
/* 概率学说 */
|
|
|
-// 统计过去N日累计涨幅,【有一定关系】
|
|
|
|
|
|
|
+// 统计过去N根累计涨幅,【有一定关系】
|
|
|
function statisticA(kLines, index) {
|
|
function statisticA(kLines, index) {
|
|
|
let startK = kLines[index - 12]
|
|
let startK = kLines[index - 12]
|
|
|
let endK = kLines[index - 1]
|
|
let endK = kLines[index - 1]
|
|
@@ -212,9 +212,9 @@ async function main() {
|
|
|
|
|
|
|
|
const BUY_LIMIT_RATE = 0 // 从什么比例入场
|
|
const BUY_LIMIT_RATE = 0 // 从什么比例入场
|
|
|
const FIRST_FEW_DAYS = 1 // 第几K的数据,0表示今K,1表示昨K,2表示前K,以此类推
|
|
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
|
|
|
|
|
|
|
+ const BAKE_TEST_DAYS = 800 // 一共回测多少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']
|
|
@@ -255,7 +255,7 @@ async function main() {
|
|
|
let avgProfit = NumKit.getSubFloat(synProfit / (realLength + fakeLength), 2)
|
|
let avgProfit = NumKit.getSubFloat(synProfit / (realLength + fakeLength), 2)
|
|
|
let isStopLoss = false
|
|
let isStopLoss = false
|
|
|
if ((Object.keys(fakeDragonMap).length !== 0 || Object.keys(realDragonMap).length !== 0)) {
|
|
if ((Object.keys(fakeDragonMap).length !== 0 || Object.keys(realDragonMap).length !== 0)) {
|
|
|
- if (avgProfit < -0.8 || btcKlineDownRate > 0.8) {
|
|
|
|
|
|
|
+ if (avgProfit < -0.8 || btcKlineDownRate > 0.5) {
|
|
|
avgProfit = -1
|
|
avgProfit = -1
|
|
|
isStopLoss = true
|
|
isStopLoss = true
|
|
|
}
|
|
}
|
|
@@ -269,7 +269,7 @@ async function main() {
|
|
|
let dateStr = TimeKit.getTimeByMillisecond(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}%`
|
|
|
+ `,亏钱榜(${fakeLength}只)利润${fakeDragonProfit}%`
|
|
+ `,亏钱榜(${fakeLength}只)利润${fakeDragonProfit}%`
|
|
|
+ `,赚钱榜期望利润${expRealProfit}%,亏钱榜期望利润${expFakeProfit}%,综合利润${synProfit}%,平均每只利润${avgProfit}% ${isStopLoss ? '(止损)' : ''}`
|
|
+ `,赚钱榜期望利润${expRealProfit}%,亏钱榜期望利润${expFakeProfit}%,综合利润${synProfit}%,平均每只利润${avgProfit}% ${isStopLoss ? '(止损)' : ''}`
|
|
|
+ `,BTC涨幅${btcUpRate}%`
|
|
+ `,BTC涨幅${btcUpRate}%`
|
|
@@ -280,7 +280,7 @@ async function main() {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
let dayProfit = NumKit.getSubFloat(totalProfit / BAKE_TEST_DAYS, 2)
|
|
let dayProfit = NumKit.getSubFloat(totalProfit / BAKE_TEST_DAYS, 2)
|
|
|
- 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++) {
|
|
|
// lastData.push([x, dataRight[x]])
|
|
// lastData.push([x, dataRight[x]])
|