This commit is contained in:
2026-08-24 20:53:21 +08:00
commit 6e78bba16a
287 changed files with 32443 additions and 0 deletions

62
ptn/classic.go Normal file
View File

@@ -0,0 +1,62 @@
package ptn
import (
ta "github.com/banbox/banta"
"math"
)
func getOHLC(e *ta.BarEnv, i int) (float64, float64, float64, float64) {
return e.Open.Get(i), e.High.Get(i), e.Low.Get(i), e.Close.Get(i)
}
type EngulfingRes struct {
Bottom float64
Top float64
}
func makeEngulfingRes(dirt int, minVal, maxVal float64) *PtnRes {
return &PtnRes{
Type: PtnEngulfing,
Dirt: dirt,
Confidence: 1,
Data: &EngulfingRes{
Bottom: minVal,
Top: maxVal,
},
}
}
/*
检查是否是吞没形态
1 看涨吞没 -1看跌吞没
*/
func isEngulfing(e *ta.BarEnv) *PtnRes {
o, h, l, c := getOHLC(e, 0)
o1, h1, l1, c1 := getOHLC(e, 1)
solid := math.Abs(o - c)
if solid/(h-l) < 0.6 {
// 第二个蜡烛实体至少60%
return nil
}
solid1 := math.Abs(o1 - c1)
if solid1/(h1-l1) <= 0.13 && solid > solid1*3 {
// 第一个是十字星,直接符合
if o > c {
return makeEngulfingRes(-1, min(l, l1), max(h, h1))
} else {
return makeEngulfingRes(1, min(l, l1), max(h, h1))
}
}
if o < c {
// 后一个是阳线,要求前一个是阴线
if o1 > c1 && o1 <= c && c1 >= o {
// 前开<收盘 & 前收 > 开盘
return makeEngulfingRes(1, min(l, l1), max(h, h1))
}
} else if o1 < c1 && c1 <= o && o1 >= c {
// 后一个阴线,要求前一个阳线
// 前收<开盘 & 前开 > 收盘
return makeEngulfingRes(-1, min(l, l1), max(h, h1))
}
return nil
}