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

89
old/xem4o.go Normal file
View File

@@ -0,0 +1,89 @@
package old
import (
"github.com/banbox/banbot/config"
"github.com/banbox/banbot/exg"
"github.com/banbox/banbot/orm/ormo"
"github.com/banbox/banbot/strat"
ta "github.com/banbox/banta"
"math"
"strconv"
)
/*
这是针对XEM/USDT:USDT的策略,其最小价格变动0.6%,挂单等待成交盈利很稳定。
但实盘时实际成交量很小,挂单十几分钟才吃进去。
*/
func xem40(p *config.RunPolicyConfig) *strat.TradeStrat {
lenAtr := 14
return &strat.TradeStrat{
WarmupNum: 300,
MinTfScore: 0.3,
EachMaxLong: 1,
EachMaxShort: 1,
OnStartUp: func(s *strat.StratJob) {
pip, err := exg.Default.PriceOnePip(s.Symbol.Symbol)
if err != nil {
panic(err)
}
s.More = pip
},
OnBar: func(s *strat.StratJob) {
e := s.Env
c := e.Close.Get(0)
pip := s.More.(float64)
if pip/c < 0.002 {
// 仅针对XEM,最小价格变动是0.6%
return
}
volMa := ta.SMA(e.Volume, 14).Get(0)
maSml := ta.SMA(e.Close, 50).Get(0)
maBig := ta.SMA(e.Close, 300).Get(0)
rsi := ta.RSI50(e.Close, 50).Get(0)
atr := ta.ATR(e.High, e.Low, e.Close, lenAtr).Get(0)
if s.OrderNum > 0 {
var od *ormo.InOutOrder
if len(s.LongOrders) > 0 {
od = s.LongOrders[0]
} else {
od = s.ShortOrders[0]
}
if od.Status == ormo.InOutStatusPartEnter && (e.TimeStop-od.RealEnterMS())/e.TFMSecs > 3 {
s.CloseOrders(&strat.ExitReq{Tag: "cancel", UnFillOnly: true})
}
return
}
sub1, sub2 := c-maSml, maSml-maBig
dirt := 0
if sub1*sub2 <= 0 && math.Abs(sub2) < atr {
// 震荡行情
if rsi > 3 {
dirt = -1
} else if rsi < -3 {
dirt = 1
}
}
if dirt == 0 && math.Abs(sub2) < pip {
// 波动很小,直接开单
dirt = 1
if c > maSml {
dirt = -1
}
}
if dirt != 0 {
amt := min(volMa*0.1, config.StakeAmount/c)
s.OpenOrder(&strat.EnterReq{
Tag: strconv.Itoa(dirt),
Short: dirt < 0,
Limit: c,
Amount: amt,
StopLossVal: pip * 2,
TakeProfitVal: pip,
StopBars: 20,
})
}
},
}
}