Browse Source

接针策略实验完了,但是要过滤能赚钱的交易,只是提高了盈亏比,没有意义。

skyffire 1 năm trước cách đây
mục cha
commit
176664ff17
1 tập tin đã thay đổi với 25 bổ sung27 xóa
  1. 25 27
      十面埋伏分析.js

+ 25 - 27
十面埋伏分析.js

@@ -40,48 +40,46 @@ function statisticB(kLines, index) {
 }
 
 /* 形态学说 */
-// 最近2根k线出现上涨吞没,或3根k线的组合形态是上涨吞没
-function statisticC(kLines, index) {
-  let kPrev1 = kLines[index - 1]
-  let kPrev2 = kLines[index - 2]
 
-  if (!kPrev1 || !kPrev2) return 0
+// 如果前一根k线是阴线,并且收了影线,影线涨幅>=实体跌幅*0.732【有用,能过滤60%的交易,但是过滤的交易很多都是能盈利的,所以这个因子只能说保留一下】
+function statisticD(kLines, index) {
+  let k = kLines[index - 1]
 
-  // 检查 kPrev2 是否为跌势中的黑色蜡烛
-  const isPrev2Bearish = kPrev2.Close < kPrev2.Open;
-  // 检查 kPrev1 是否为白色蜡烛
-  const isPrev1Bullish = kPrev1.Close > kPrev1.Open;
-  // 检查 kPrev1 的实体是否完全覆盖了 kPrev2 的实体
-  let isEngulfing = kPrev1.Close > kPrev2.Open;
+  if (!k) return 0
 
-  if (isPrev2Bearish && isPrev1Bullish && isEngulfing) return 1
+  // 计算实体的跌幅
+  const bodyDecline = k.Open - k.Close;
 
-  // 组合实体判断
-  let kPrev3 = kLines[index - 3]
+  // 如果跌幅小于5%,不适用这个过滤
+  if (100 * (k.Low - k.Open) / k.Open > -10) return 1
 
-  if (!kPrev3) return 0
+  // 计算下影线的涨幅
+  const lowerShadowGain = Math.min(k.Open, k.Close) - k.Low;
 
-  const isPrev3Bearish = kPrev3.Close < kPrev3.Open;
-  const isPrev2Bullish = kPrev2.Close > kPrev2.Open;
-  // 组合实体满足条件
-  isEngulfing = kPrev1.Close > kPrev3.Open;
-  if (isPrev3Bearish && isPrev2Bullish && isPrev1Bullish && isEngulfing) return 1
+  // 判断下影线的涨幅是否大于或等于实体的跌幅
+  const hasLongLowerShadow = (lowerShadowGain / k.Low) >= (bodyDecline / k.Open) * 1;
 
-  return 0
+  // 阴线并且下影线涨幅大于或等于实体跌幅
+  return hasLongLowerShadow ? 1 : 0;
 }
 
-// 前一根k线是阴线,并且收了影线,影线涨幅>=实体跌幅
-function statisticD(kLines, index) {}
+// 现在应该想一个形态,能过滤一下熊市时的亏损,牛市时的回撤无所谓
+function statisticC(kLines, index) {
+
+}
 
 // 指标过滤
 function filter(kLines, index) {
-  // 一共N天涨幅超过M%
-  if (statisticB(kLines, index) !== 0) return false
-
   // 过去N日累计涨幅,85表示亏15%,115表示赚15%,100是分界线
   let upRateN = statisticA(kLines, index)
   if (upRateN >= 85 && upRateN <= 100) return false
 
+  // 一共N天涨幅超过M%
+  if (statisticB(kLines, index) !== 0) return false
+
+  // 前一根k线是阴线,并且收了影线,影线涨幅>=实体跌幅*0.732
+  if (statisticD(kLines, index) === 0) return false
+
   return true
 }
 
@@ -163,7 +161,7 @@ function dragonAnalysis(btcKLines, kLinesMap, dragonMap, dayCount) {
     let kLines = kLinesMap[symbol]
     let index = kLines.length - (dayCount + 1)
 
-    let x = statisticC(kLines, index)
+    let x = statisticD(kLines, index)
     let y = dragonMap[symbol].Profit
 
     // logger.info(