Files
banstagy/trend/ma1/common.go
2026-08-24 20:53:21 +08:00

69 lines
1.8 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package ma1
import (
"github.com/banbox/banbot/config"
"github.com/banbox/banbot/strat"
"github.com/banbox/banstagy/com"
ta "github.com/banbox/banta"
"math"
)
func Main(pol *config.RunPolicyConfig) *strat.TradeStrat {
return MainV2_1(pol)
}
var (
// 这里是默认参数,请尽量在MainVX()中修改,不要在这里修改
periodBig = 30
periodSml = 10
parentRate = 0.7
periodParBig = int(float64(periodBig) * parentRate)
periodParSml = int(float64(periodSml) * parentRate)
sampleNum = 500 // 斜率采样数量
sampleStep = 2 // 斜率计算间隔
atrLen = 14
openOffRate = float64(0) // 开单时,从均线偏移基准ATR的倍数
goodRate = float64(10) // 收益超过此倍数的ATR时,将止损更新为均线
badRate = float64(5) // 损失超过此倍数的ATR时,止损退出
)
type MoreType struct {
*com.Slop
hitGoods map[int64]bool // 触发goodRate的订单ID,允许每个bar更新止损
open int // 1开多 -1开空
}
func onStartUp(s *strat.StratJob) {
s.More = &MoreType{
Slop: com.NewSlop(sampleNum, 0.25),
hitGoods: make(map[int64]bool),
}
}
func onInfoMaCross(s *strat.StratJob, e *ta.BarEnv, pair, tf string) {
smaSml := ta.SMA(e.Close, periodParSml)
smaBig := ta.SMA(e.Close, periodParBig)
x := smaSml.Cross(smaBig)
more, _ := s.More.(*MoreType)
if x == 1 || x == -1 {
more.Dirt = x
}
}
func onInfoMaSlop(s *strat.StratJob, e *ta.BarEnv, pair, tf string) {
sma := ta.SMA(e.Close, periodParBig)
prevSma := sma.Get(sampleStep)
if e.BarNum%sampleStep > 0 || math.IsNaN(prevSma) {
return
}
more, _ := s.More.(*MoreType)
curSma := sma.Get(0)
slop := (curSma - prevSma) / curSma
//more.Slop.Update(e.BarNum, slop)
if slop > 0 {
more.Dirt = 1
} else {
more.Dirt = -1
}
}