|
|
@@ -10,6 +10,7 @@ async function readData() {
|
|
|
return JSON.parse(data)
|
|
|
}
|
|
|
|
|
|
+/* 概率学说 */
|
|
|
// 统计过去N日累计涨幅,【在-1%~-20%容易有亏损,有一定关系】
|
|
|
function statisticA(kLines, index) {
|
|
|
let startK = kLines[index - 10]
|
|
|
@@ -38,6 +39,40 @@ function statisticB(kLines, index) {
|
|
|
return count
|
|
|
}
|
|
|
|
|
|
+/* 形态学说 */
|
|
|
+// 最近2根k线出现上涨吞没,或3根k线的组合形态是上涨吞没
|
|
|
+function statisticC(kLines, index) {
|
|
|
+ let kPrev1 = kLines[index - 1]
|
|
|
+ let kPrev2 = kLines[index - 2]
|
|
|
+
|
|
|
+ if (!kPrev1 || !kPrev2) return 0
|
|
|
+
|
|
|
+ // 检查 kPrev2 是否为跌势中的黑色蜡烛
|
|
|
+ const isPrev2Bearish = kPrev2.Close < kPrev2.Open;
|
|
|
+ // 检查 kPrev1 是否为白色蜡烛
|
|
|
+ const isPrev1Bullish = kPrev1.Close > kPrev1.Open;
|
|
|
+ // 检查 kPrev1 的实体是否完全覆盖了 kPrev2 的实体
|
|
|
+ let isEngulfing = kPrev1.Close > kPrev2.Open;
|
|
|
+
|
|
|
+ if (isPrev2Bearish && isPrev1Bullish && isEngulfing) return 1
|
|
|
+
|
|
|
+ // 组合实体判断
|
|
|
+ let kPrev3 = kLines[index - 3]
|
|
|
+
|
|
|
+ if (!kPrev3) return 0
|
|
|
+
|
|
|
+ const isPrev3Bearish = kPrev3.Close < kPrev3.Open;
|
|
|
+ const isPrev2Bullish = kPrev2.Close > kPrev2.Open;
|
|
|
+ // 组合实体满足条件
|
|
|
+ isEngulfing = kPrev1.Close > kPrev3.Open;
|
|
|
+ if (isPrev3Bearish && isPrev2Bullish && isPrev1Bullish && isEngulfing) return 1
|
|
|
+
|
|
|
+ return 0
|
|
|
+}
|
|
|
+
|
|
|
+// 前一根k线是阴线,并且收了影线,影线涨幅>=实体跌幅
|
|
|
+function statisticD(kLines, index) {}
|
|
|
+
|
|
|
// 指标过滤
|
|
|
function filter(kLines, index) {
|
|
|
// 一共N天涨幅超过M%
|
|
|
@@ -122,13 +157,13 @@ let dataLeft = []
|
|
|
let dataRight = []
|
|
|
let tempLeft = []
|
|
|
let tempRight = []
|
|
|
-let dataY = [...Array(100).keys()]
|
|
|
+let dataY = [...Array(10).keys()]
|
|
|
function dragonAnalysis(btcKLines, kLinesMap, dragonMap, dayCount) {
|
|
|
for (let symbol in dragonMap) {
|
|
|
let kLines = kLinesMap[symbol]
|
|
|
let index = kLines.length - (dayCount + 1)
|
|
|
|
|
|
- let x = statisticA(kLines, index)
|
|
|
+ let x = statisticC(kLines, index)
|
|
|
let y = dragonMap[symbol].Profit
|
|
|
|
|
|
// logger.info(
|
|
|
@@ -178,7 +213,7 @@ async function main() {
|
|
|
|
|
|
const FIRST_FEW_DAYS = 1 // 第几天的数据,0表示今天,1表示昨天,2表示前天,以此类推
|
|
|
const BUY_LIMIT_RATE = 0 // 从什么比例入场
|
|
|
- const BAKE_TEST_DAYS = 30 // 一共回测多少天, 150天是熊市最没有交易量的时候
|
|
|
+ const BAKE_TEST_DAYS = 360 // 一共回测多少天, 150天是熊市最没有交易量的时候
|
|
|
|
|
|
|
|
|
let btcKLines = kLinesMap['BTC_USDT']
|