init
This commit is contained in:
62
ptn/classic.go
Normal file
62
ptn/classic.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user